Salut à toutes et à tous,
Je me disais qu'un tutoriel expliquant comment implémenter une classe gérant les logs d'erreurs (ou autres) PHP serait pas mal. En gros une petite classe permettant de capturer les erreurs et de les écrire dans un fichier log (pratique quand on a un hébergement mutu avec lequel il est impossible de consulter les logs d'erreurs Apache). Aussi on peut étendre les fonctionnalités en proposant une autre classe qui s'occuperait de lire les données du/des log(s) afin d'afficher des stats et autres infos utiles.
Qu'en pensez-vous ?
@Defy: Exactement !
Et en plus de faire un tuto sur ma solution de Middleware, je me tâte pour en faire un sur une solution de log d'erreurs personnalisés.
A voir si quelqu'un est déjà sur le coup ou non (@Graf' ?).
@Forever t'as du passer 10x plus de temps à documenter ta class qu'a l'écrire, non ?
edit ; rien de méchant c'est juste la qté d'info sur Github qui me fait penser à ça
@forever: Ta classe est très intéressante merci ! Je pense m'en inspirer si ça ne te dérange pas, notamment au niveau des types de messages ;)
Ce n'est pas ma classe, c'est une classe crée par quelqu'un que je ne connais même pas. C'est ça, l'open source.
D'ailleurs, pourquoi ne pas l'utiliser directement ?
@Forever: Autant pour moi.
Tout simplement parce que c'est en faisant qu'on apprend ;)
Personnellement depuis le tuto du MVC de Graf, j'ai ajouté un petit code permettant de capturer les logs PHP, EMAIL, SQL, Upload assez facilement et sans classe uniquement une petite fonction :
function Write_log($texte,$file){
$fichier = WEBROOT.'logs'.DS.$file.'.log';
if(file_exists($fichier)) {
if($id = fopen($fichier, "r+")){
$contenu_original = null;
if(filesize($fichier)){ $contenu_original = fread($id, filesize($fichier)); }
$nouveau_contenu = '['.date("d/m/Y H:i:s").'] '.$texte;
$nouveau_contenu.= "\n";
$nouveau_contenu.= $contenu_original;
fputs($id, $nouveau_contenu);
fclose($id);
return true;
}else{
return false;
}
}else{
return false;
}
}
Ensuite par exemple pour les erreurs sql dans mon Model.php lors du catch j'ai juste à rajouter :
}catch(PDOException $e){
require(CORE.DS.'functions.php');
Write_log($e,'errors_sql');
if(Conf::$debug >= 1){
die($e->getMessage());
} else {
die('Impossible de se connecter à la base de donnée');
}
}
Et le tout est fait en quelques lignes de code seulement. (si ça peut en aider^^)
Mouais, je comprend qu'on apprend en codant, mais regarder le code des autres est aussi un très bon moyen d'apprendre, selon moi.
shinix pourquoi avoir fait le choix de faire du procédural pour ton Logger ? Tant qu'a travailler sur du MVC en POO autant continuer sur cette voie.
@arnich: parce que la fonction est aussi utilisée sur certain script ou j'ai juste besoin d'inclure le script function.php ^^.
@Cyprien G. si mais compliqué, j'ai créer un système "core" ou il y le principal du CMS (contenu non modifiable) et ensuite les dossiers controllers/view/model/ dans un dossier modules ^^. mais vu que je fais pas mal de test sur de simple script PHP que j'inclue dans webroot c'est plus flexible pour moi d'avoir une fonction au lieu d'une classe, mais il est clair que ça peut tout à fait être adapté en classe. A l'époque je n'était pas très friand des class c'est pourquoi j'ai fait une fonction et maintenant j'ai la flème de changer ça :-P
Ouais en gros tu as fait un pseudo-MVC, un hybride entre de la POO et du procédural ?
Sinon je te conseille de suivre la formation sur la POO de @Graf', perso elle m'a beaucoup aidé, notamment sur l'utilisation des namepaces.
Mais bon sinon tant que ça marche... ;)
Passer tout en POO est une bonne occasion pour faire le ménage dans ton code.
Et en principe pour la maintenance cela ne sera que du mieux