Introduction : Pourquoi la journalisation en PHP ?
La journalisation ne consiste pas simplement à enregistrer des erreurs dans un fichier. C'est votre principal outil de surveillance, de débogage et d'analyse du fonctionnement d'une application web. Sans une journalisation de qualité, vous devrez deviner pourquoi le site a planté ou pourquoi un utilisateur ne peut pas passer commande. Pour les développeurs débutants en PHP, configurer une journalisation correcte est la première étape vers un développement professionnel.
Imaginez que votre application est une boîte noire. Les logs sont le seul moyen d'y jeter un coup d'œil, de comprendre ce qui se passe à chaque instant. Dans cet article, nous allons passer en revue les meilleures pratiques qui vous aideront à éviter les erreurs typiques des débutants et à construire un système de surveillance fiable.
1. Les bases : fonctions intégrées de PHP pour la journalisation
PHP fournit plusieurs fonctions intégrées pour travailler avec les logs. La plus simple et la plus populaire est error_log(). Elle permet d'envoyer un message dans le journal système du serveur ou dans un fichier spécifié.
Exemple de base d'utilisation de error_log()
// Enregistrement simple d'une erreur dans le journal systèmeerror_log("Ceci est un message d'erreur", 0);
// Enregistrement dans un fichier spécifiqueerror_log("Erreur de connexion à la base de données", 3, "/var/log/php_errors.log");
// Enregistrement avec indication du type de messageerror_log("Avertissement : requête lente", 4);Cependant, utiliser error_log() directement en production n'est pas une bonne idée. Premièrement, vous mélangez différents types de messages. Deuxièmement, il est difficile de gérer le format et la rotation des logs. Pour les projets sérieux, il est préférable d'utiliser des bibliothèques spécialisées.
Configuration de php.ini pour une journalisation améliorée
Avant d'écrire du code, assurez-vous que votre php.ini est correctement configuré :
; Activation de la journalisation des erreurslog_errors = On; Chemin vers le fichier de logerror_log = /var/log/php_errors.log; Taille maximale du log (en octets)log_errors_max_len = 1024; Désactivation de l'affichage des erreurs à l'écran (pour la production)display_errors = Off; Activation de la journalisation de tous les niveaux d'erreurserror_reporting = E_ALL2. Niveaux de journalisation : de DEBUG à CRITICAL
L'une des principales erreurs des débutants est d'enregistrer tous les messages en vrac. La journalisation professionnelle utilise des niveaux de gravité. Cela permet de filtrer rapidement les logs et de ne pas manquer les erreurs critiques parmi les messages d'information.
Niveaux standard PSR-3
La communauté PHP a adopté la norme PSR-3, qui définit 8 niveaux de journalisation :
- DEBUG — informations de débogage détaillées (utilisées uniquement en développement)
- INFO — messages d'information (utilisateur inscrit, commande créée)
- NOTICE — événements normaux mais significatifs (utilisation de fonctions obsolètes)
- WARNING — avertissements (par exemple, requête lente, espace disque faible)
- ERROR — erreurs nécessitant une attention (échec de connexion à la base de données)
- CRITICAL — erreurs critiques (composant principal du système indisponible)
- ALERT — nécessite une intervention immédiate (intrusion, panne système)
- EMERGENCY — système inutilisable
Exemple d'implémentation des niveaux avec Monolog
La meilleure bibliothèque de journalisation en PHP est Monolog. Elle est entièrement conforme à PSR-3 et facile à configurer :
use Monolog\\Logger;use Monolog\\Handler\\StreamHandler;use Monolog\\Handler\\RotatingFileHandler;use Monolog\\Level;
// Création d'un logger avec un nom de canal$log = new Logger('app');
// Ajout d'un gestionnaire pour tous les niveaux$log->pushHandler(new StreamHandler('/var/log/app.log', Level::Debug));
// Fichier séparé pour les erreurs critiques$log->pushHandler( new RotatingFileHandler('/var/log/critical.log', 30, Level::Critical));
// Ex