Qu'est-ce que Monolog et pourquoi en a-t-on besoin ?
\n\nMonolog est une bibliothèque standard de journalisation en PHP. Elle fournit une boîte à outils flexible et puissante pour enregistrer des logs dans différents canaux (fichiers, bases de données, e-mail, journal système, services externes, etc.). Monolog est le standard de facto pour les applications PHP, en particulier dans l'écosystème Symfony, Laravel et d'autres frameworks modernes.
\n\nPourquoi cette bibliothèque est-elle nécessaire ? Dans toute application, il est essentiel de suivre les événements : erreurs, avertissements, messages d'information, informations de débogage. Monolog permet de :
\n- \n
- Centraliser la journalisation — écrire des logs dans un format unique et depuis n'importe quel endroit de l'application. \n
- Configurer les canaux de manière flexible — envoyer les erreurs critiques vers Telegram/Slack, et les messages d'information vers un fichier. \n
- Formater les messages — ajouter la date, le niveau, le contexte, la pile d'appels. \n
- Filtrer les logs — traiter uniquement les messages d'un certain niveau. \n
- S'intégrer aux frameworks — dans Symfony, Laravel, Yii2, c'est Monolog qui est utilisé. \n
Installation
\nMonolog s'installe via Composer — le gestionnaire de paquets standard pour PHP.
\ncomposer require monolog/monolog\nSi vous utilisez PHP 8.0+, il est recommandé d'installer la dernière version stable. Après l'installation, le dossier vendor et le fichier composer.json avec la dépendance apparaîtront dans le projet.
Démarrage rapide
\nL'exemple le plus simple — écrire un log dans un fichier :
\n<?php\nrequire 'vendor/autoload.php';\n\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n// Création d'un logger avec le nom de canal 'my_app'\n$log = new Logger('my_app');\n// Ajout d'un gestionnaire — écriture dans un fichier\n$log->pushHandler(new StreamHandler('app.log', Logger::WARNING));\n\n// Maintenant, on peut journaliser\n$log->warning('Ceci est un avertissement');\n$log->error('Ceci est une erreur');\n\necho "Les logs ont été écrits dans app.log";\n?>\nAprès exécution du script, le fichier app.log contiendra quelque chose comme :
[2025-04-09T10:30:00.123456+00:00] my_app.WARNING: Ceci est un avertissement [] []\n[2025-04-09T10:30:00.123789+00:00] my_app.ERROR: Ceci est une erreur [] []\n\nMéthodes et fonctions principales
\nExaminons les méthodes clés de Monolog. Elles font toutes partie de la classe Monolog\\Logger ou de classes associées.
1. pushHandler(HandlerInterface $handler)
\nCe qu'elle fait : Ajoute un gestionnaire (handler) à la pile. Le logger peut avoir plusieurs gestionnaires, et chacun d'eux recevra tous les messages (si aucun filtrage n'est configuré).
\nParamètres :
\n- \n
$handler— un objet implémentantMonolog\\Handler\\HandlerInterface(par exemple,StreamHandler,FirePHPHandler,SlackHandler). \n
Exemple :
\n$log = new Logger('app');\n$log->pushHandler(new StreamHandler('debug.log', Logger::DEBUG));\n$log->pushHandler(new StreamHandler('errors.log', Logger::ERROR));\n// Désormais, les messages de niveau ERROR et supérieur iront dans les deux fichiers\n\n2. addRecord(int $level, string $message, array $context = [])
\nCe qu'elle fait : Méthode de base pour écrire un log. Elle n'est généralement pas appelée directement ; on utilise plutôt des méthodes d'encapsulation (debug(), info(), etc.).
Paramètres :
\n- \n
$level— le niveau de journalisation (constantes :Logger::DEBUG,Logger::INFO,Logger::WARNING, etc.). \n $message— le texte du message. \n $context— un tableau de données supplémentaires (par exemple, ID utilisateur, adresse IP). \n
Exemple :