Psr/Log PHP : guide complet avec exemples pratiques

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Psr/Log pour PHP : guide complet avec exemples

La journalisation (logging) est un aspect fondamental du développement de toute application sérieuse. Sans elle, impossible de déboguer les erreurs en production, de suivre le comportement des utilisateurs ou d'analyser les performances du système. Cependant, si votre projet utilise plusieurs bibliothèques, chacune écrivant ses logs à sa manière, le développeur se retrouve face au chaos : niveaux différents, formats différents, sorties différentes. C'est exactement pour résoudre ce problème que la norme PSR-3 (Logger Interface) a été créée.

Psr/Log n'est pas une bibliothèque de logging en tant que telle, mais une interface standard (un ensemble de contrats) qui définit à quoi doit ressembler un logger universel en PHP. Elle fournit huit méthodes pour enregistrer des messages de différents niveaux de gravité (emergency, alert, critical, error, warning, notice, info, debug), ainsi qu'une méthode universelle log(). Toute bibliothèque implémentant PSR-3 peut être facilement intégrée dans n'importe quel projet qui attend cette interface. Cela permet au développeur de changer l'implémentation du logger (par exemple, passer de Monolog à Analog) sans modifier le code de l'application.

Dans cet article, nous allons détailler la bibliothèque psr/log, de l'installation aux exemples pratiques avancés. Vous apprendrez à utiliser correctement chaque méthode, à formater les messages avec des espaces réservés (placeholders) et à éviter les erreurs courantes. Ce contenu sera utile aussi bien aux débutants découvrant PHP qu'aux développeurs expérimentés souhaitant structurer leurs connaissances.

Installation

La bibliothèque psr/log s'installe via Composer, le gestionnaire de dépendances standard pour PHP. Exécutez la commande suivante dans votre terminal :

composer require psr/log

Après l'installation, un répertoire vendor/psr/log apparaîtra dans votre projet. Si vous utilisez un framework (Laravel, Symfony), PSR-3 est très probablement déjà inclus. Pour charger l'autoloader dans votre script PHP, ajoutez cette ligne :

require __DIR__ . '/vendor/autoload.php';

Attention : psr/log n'est qu'une interface. Pour écrire réellement des logs, vous aurez besoin d'une implémentation, par exemple monolog/monolog. Installation de Monolog :

composer require monolog/monolog

Démarrage rapide

Créons un exemple simple de logging avec Monolog (l'implémentation PSR-3 la plus populaire).

<?php
require 'vendor/autoload.php';

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// Création du logger nommé 'my_logger'
$log = new Logger('my_logger');

// Ajout d'un handler : écrit tous les messages de niveau DEBUG et supérieur dans le fichier app.log
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::DEBUG));

// Enregistrement de plusieurs messages
$log->info('Application démarrée');
$log->warning('Impossible de charger le fichier de configuration, utilisation des valeurs par défaut');
$log->error('Erreur critique : base de données inaccessible');

echo "Logs enregistrés. Vérifiez le fichier app.log";

Après exécution de ce script, le fichier app.log contiendra quelque chose comme :

[2025-04-10T15:30:45.123456+00:00] my_logger.INFO: Application démarrée [] []
[2025-04-10T15:30:45.123789+00:00] my_logger.WARNING: Impossible de charger le fichier de configuration, utilisation des valeurs par défaut [] []
[2025-04-10T15:30:45.124012+00:00] my_logger.ERROR: Erreur critique : base de données inaccessible [] []

Voici un exemple fonctionnel minimal. Maintenant, détaillons chaque méthode de l'interface.

Méthodes principales de l'interface Psr\Log\LoggerInterface

L'interface Psr\Log\LoggerInterface définit 9 méthodes. Les 8 premières sont dédiées à des niveaux de logging spécifiques, tandis que la neuvième est la méthode universelle log().

Recommendations