Psr/Log para PHP: guía completa con ejemplos prácticos
El logging es uno de los aspectos fundamentales en el desarrollo de cualquier aplicación seria. Sin él, es imposible depurar errores en producción, rastrear el comportamiento de los usuarios o analizar el rendimiento del sistema. Sin embargo, si en un proyecto se utilizan varias bibliotecas y cada una escribe logs a su manera, el desarrollador se enfrenta al caos: diferentes niveles, diferentes formatos, diferentes formas de salida. Precisamente para resolver este problema se creó el estándar PSR-3 (Logger Interface).
Psr/Log no es una biblioteca de logging en sí misma, sino una interfaz estándar (un conjunto de contratos) que define cómo debe ser un logger universal en PHP. Proporciona ocho métodos para registrar mensajes de diferentes niveles de importancia (emergency, alert, critical, error, warning, notice, info, debug), así como un método universal log(). Cualquier biblioteca que implemente PSR-3 puede integrarse fácilmente en cualquier proyecto que espere esta interfaz. Esto permite al desarrollador cambiar la implementación del logger (por ejemplo, de Monolog a Analog) sin modificar el código de la aplicación.
En este artículo, analizaremos en detalle la biblioteca psr/log, desde la instalación hasta ejemplos prácticos avanzados. Aprenderás a usar correctamente cada método, a formatear mensajes con placeholders y a evitar errores comunes. El material será útil tanto para principiantes que recién se inician en PHP como para desarrolladores experimentados que deseen estructurar sus conocimientos.
Instalación
La biblioteca psr/log se instala a través de Composer, el gestor de dependencias estándar para PHP. Ejecuta el siguiente comando en tu terminal:
composer require psr/log
Después de la instalación, aparecerá el directorio vendor/psr/log en tu proyecto. Si usas un framework (Laravel, Symfony), es muy probable que PSR-3 ya esté incluido. Para cargar el autoloader en tu script PHP, agrega esta línea:
require __DIR__ . '/vendor/autoload.php';
Ten en cuenta: psr/log es solo la interfaz. Para escribir logs realmente, necesitarás una implementación, por ejemplo, monolog/monolog. Instalación de Monolog:
composer require monolog/monolog
Inicio rápido
Vamos a crear un ejemplo sencillo de logging usando Monolog (la implementación más popular de PSR-3).
<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// Creamos un logger con el nombre 'my_logger'
$log = new Logger('my_logger');
// Agregamos un handler: escribe todos los mensajes de nivel DEBUG o superior en el archivo app.log
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::DEBUG));
// Registramos varios mensajes
$log->info('Aplicación iniciada');
$log->warning('No se pudo cargar el archivo de configuración, se usarán valores por defecto');
$log->error('Error crítico: base de datos no disponible');
echo "Logs escritos. Revisa el archivo app.log";
Después de ejecutar este script, en el archivo app.log verás algo similar a esto:
[2025-04-10T15:30:45.123456+00:00] my_logger.INFO: Aplicación iniciada [] []
[2025-04-10T15:30:45.123789+00:00] my_logger.WARNING: No se pudo cargar el archivo de configuración, se usarán valores por defecto [] []
[2025-04-10T15:30:45.124012+00:00] my_logger.ERROR: Error crítico: base de datos no disponible [] []
Este es un ejemplo funcional mínimo. Ahora analicemos cada método de la interfaz en detalle.
Métodos principales de la interfaz Psr\Log\LoggerInterface
La interfaz Psr\Log\LoggerInterface define 9 métodos. Los primeros 8 son métodos para niveles de logging específicos, y el noveno es el método universal log()
También en la biblioteca
Recommendations