El principal objetivo del PSR-3 es proporcionar una interfaz simple y flexible que los desarrolladores puedan implementar y utilizar para registrar mensajes en sus aplicaciones. Al seguir esta especificación, se garantiza que las bibliotecas y los frameworks puedan trabajar juntos sin problemas, independientemente de la implementación específica del sistema de registro que se utilice.
Psr\Log\LoggerInterface
El corazón del PSR-3 es la interfaz Psr\Log\LoggerInterface
, que define los métodos que cualquier implementación de un sistema de registro debe proporcionar. A continuación se muestra la definición de esta interfaz:
namespace Psr\Log;
interface LoggerInterface
{
public function emergency($message, array $context = []);
public function alert($message, array $context = []);
public function critical($message, array $context = []);
public function error($message, array $context = []);
public function warning($message, array $context = []);
public function notice($message, array $context = []);
public function info($message, array $context = []);
public function debug($message, array $context = []);
public function log($level, $message, array $context = []);
}
La interfaz LoggerInterface
define ocho métodos de registro, cada uno correspondiente a un nivel de severidad:
1. emergency: situaciones críticas del sistema que requieren una atención inmediata.
2. alert: acciones que deben tomarse inmediatamente.
3. critical: condiciones críticas, como fallos del sistema.
4. error: errores de tiempo de ejecución que no requieren una acción inmediata pero deben ser monitoreados.
5. warning: eventos que podrían causar problemas.
6. notice: eventos normales pero significativos.
7. info: mensajes informativos.
8. debug: mensajes de depuración.
log
Además de los métodos específicos de cada nivel, el PSR-3 define un método log
que toma un nivel de registro como parámetro, permitiendo así una mayor flexibilidad.
El segundo parámetro de cada método de registro es un array $context
que permite proporcionar datos contextuales sobre el mensaje registrado. Este contexto es útil para incluir información adicional, como identificadores de usuario, detalles de solicitudes HTTP, o cualquier otro dato relevante. El PSR-3 sugiere un uso estándar del placeholder {}
dentro del mensaje para insertar estos valores del contexto.
Por ejemplo:
$logger->error('Usuario no encontrado: {username}', ['username' => 'johndoe']);
En este caso, el placeholder {username}
será reemplazado por el valor correspondiente del array $context
.
Existen varias implementaciones populares de LoggerInterface
que cumplen con el estándar PSR-3. Algunas de las más utilizadas son:
Aquí hay un ejemplo sencillo de cómo usar Monolog con la interfaz PSR-3:
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// Crear una instancia del logger
$logger = new Logger('mi_logger');
// Añadir un manejador
$logger->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::DEBUG));
// Registrar un mensaje
$logger->info('Este es un mensaje informativo');
$logger->error('Algo ha salido mal', ['exception' => $e]);
El PSR-3 proporciona una base sólida para la interoperabilidad de los sistemas de registro en PHP. Al definir una interfaz estándar, facilita el intercambio y la reutilización de componentes en diferentes proyectos y frameworks, promoviendo así mejores prácticas y una mayor cohesión en la comunidad PHP. Implementar y utilizar la interfaz LoggerInterface
es un paso importante hacia la creación de aplicaciones PHP más mantenibles y robustas.
Jorge García
Fullstack developer