JeuWeb - Crée ton jeu par navigateur
Logs - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Logs (/showthread.php?tid=2595)



Logs - Cartman34 - 24-05-2008

Bonjour,

Je viens de créer un systeme de logs(journaux) afin d'enregistrer pas mal de données d'action et erreurs qui se sont déroulés.
Je viens vous l'exposer pour avoir votre avis:

Code PHP :
<?php 
function log_save($action, $type = 0, $user = 'N/A', $data= 'N/A', $file = 'N/A', $line = 'N/A', $other = 'N/A', $filename = 0) {

global
$ugamela_root_path;

$logname = array(0 => 'error', 1 => 'log', 2 => 'admin');

$logpath = array(0 => 'error_logs', 1 => 'common_logs', 2 => 'admin_logs');

$filename = $ugamela_root_path."logs/".$logpath[$type].(($filename) ? $filename : $logname[$type]."_".$user['id']."_".date_fr("Y-m-d").".txt");

$log = array();

$log['time'] = time();

$log['action'] = $action;

$log['SERVER'] = $_SERVER;

$log['user'] = $user;

$log['data'] = $data;

$log['file'] = $file;

$log['line'] = $line;

$log['other'] = $other;

$log = json_encode($log);

return
file_add($log, $filename);

//Exemple d'utilisation:
log_save(1, ERROR, $user, $planet_tab, __FILE__, __LINE__);

}

Ce système supporte 3 types différents: les actions communes(normales), les actions administratives et les erreurs, ils ont chacun leur dossier.
$ugamela_root_path étant le chemin vers la racine et logs le dossier contenant les dossiers de logs.
file_add() ajoute les données au fichier donné.

Ce système utilise la méthode JSON.


RE: Logs - Raoull - 24-05-2008

mm j'ai écrit une classe JSON aussi, puisque je pense m'en servir activement de ce format.
Cette classe est toute fraiche, encore en test/debug, mais ça fonctionne pour les tableaux, pas encore tester les objets PHP.

Permet d'ouvrir/enregistrer un fichier json, décoder/encoder, tout ça d'une facon autonome, avec aussi un systeme de log/debug (qui peut être viré une fois la calsse au point).

si ça interesse qlqu'un, je peux donner des explications, je suis ouvert aux critiques/suggestions : http://paste.hack-it.org/index.php?show=f4babb9ce


RE: Logs - Sephi-Chan - 24-05-2008

Il faut prévoir aussi la possibilité de supprimer des éléments du journal, d'archiver, etc. C'est un début. Smile

Concernant la classe proposée, je la trouve un peu énorme pour finalement de pas faire grand chose. Utiliser json_decode et json_encode suffit amplement. La surcouche est ici indigeste, en tout cas à mon sens. On perd la très grande vitesse des fonctions natives pour gérer des cas qui n'arriveront finalement jamais.

Je pense qu'il vaut mieux se concentrer sur la création de la classe de journalisation plutôt qu'une classe qui en rajoute des tonnes sur l'ouverture et l'enregistrement d'objets JSON.


Sephi-Chan


RE: Logs - Cartman34 - 24-05-2008

A mon avis une classe serait vraiment utile pour supprimer des éléments sachant que j'ai 3 types différents de logs, et un fichier pour chaque joueur chaque jour, peut etre devrais je faire une semaine...


RE: Logs - Cartman34 - 31-05-2008

En fait ma fonction log st beaucoup trop lourde...je pense faire un meilleur rangement car là ce n'est pas utilisable...


RE: Logs - Cartman34 - 20-06-2008

Voici une fonction plus légère(ou plutot 2 fonctions):

Code PHP :
<?php //By IGstaff

function file_add($add, $filename = 0, $order = 1) {
$filename = (($filename) ? $filename : "save_".date_fr("Y-m-d").".txt");
$content = (file_exists($filename)) ? file_get_contents($filename) : '';
$content = ($order) ? $content.$add."\n" : $add."\n".$content;
file_put_contents($filename,$content);
return
true;
}

function
log_save($type, $action, $text, $filename = 0) {
global
$ugamela_root_path, $logname, $logpath;
$filename = $ugamela_root_path."logs/".$logpath[$type].(($filename) ? $filename : $logname[$type]."_".date_fr("Y-m-d").".txt");
$text = htmlentities($text);
$log = array();
$log['time'] = time();
$log['action'] = $action;
$log['text'] = $text;
$log = json_encode($log);
return
file_add($log, $filename);
}
?>
la première fonction file_add ajoute les données à la ligne suivante du fichier, celle-ci peut etre arrangée il me semble.
La deuxième, log_save, utilise la première en y enregistrant les données envoyées.

Pour en expliquer les fonctionnements, j'ai divisé mes logs en 3 types(normaux, erreurs et administration), chaque log a son ID ainsi que ses actions(ayant un ID aussi).
Tous cela est à définir par le développeur.
J'utilise ma fonction comme ceci:
Code PHP :
<?php
log_save
(ERROR, 3, "Le texte a enregistré et qui pourra etre lu par les administrateurs du site.");
?>
Avec le simple enregistrement d'un texte, vous limitez les données aux strictes nécessaireet cela évite une gestion trop lourde à la lecture.

Quand elle sera finie, je posterai sûrement une fonction/un script pour lire ces données.