PSR-3 – interfaz de registrador en PHP 7

El registro de diferentes tipos de eventos es una práctica común para las aplicaciones. Si bien una aplicación podría clasificar estos tipos de eventos en errores, eventos informativos y advertencias, otras podrían incluir niveles más elaborados de registro de severidad. Lo mismo pasa para el formato real del mensaje de registro en sí. Dice que cada aplicación podría tener fácilmente su propio mecanismo de registro. Esto representa una forma de interoperabilidad.

El estándar PSR-3 se propone solucionar esto definiendo un estándar para la interfaz real del registrador.
Dicha interfaz estandarizada nos permite escribir registros de aplicaciones PHP de una manera simple y universal.

El protocolo syslog (RFC 5424), definido por Internet Engineering Task Force (IETF), diferencia los siguientes ocho niveles de gravedad:

  • emergency: Esto indica que el sistema no se puede usar.
  • alert: Esto indica que se deben tomar medidas de inmediato
  • critical: Esto establece condiciones críticas
  • error: Esto indica condiciones de error
  • warning: Esto establece condiciones de advertencia
  • notice: Esto indica condición normal pero significativa
  • info: Esto indica mensajes informativos
  • debug: Esto indica mensajes de nivel de depuración

El estándar PSR-3 se basa en el RFC 5424 al especificar LoggerInterface, que expone un método especial para cada uno de los ocho niveles de gravedad, que se muestra a continuación:

<?php
interface LoggerInterface
{
public function emergency($message, array $context = array());
public function alert($message, array $context = array());
public function critical($message, array $context = array());
public function error($message, array $context = array());
public function warning($message, array $context = array());
public function notice($message, array $context = array());
public function info($message, array $context = array());
public function debug($message, array $context = array());
public function log($level, $message, array $context = array());
}

También podemos notar el noveno método log(), cuya firma difiere de los primeros ocho. El método log() es más un método de conveniencia, cuyo parámetro de nivel debe indicar uno de los ocho niveles de gravedad. Llamar a este método debe tener el mismo resultado que llamar a los métodos específicos de nivel. Cada método acepta una cadena como $message, o un objeto con un método __toString (). Intentar llamar a estos métodos con un nivel de gravedad desconocido debe arrojar Psr\ Log\ InvalidArgumentException.

La cadena de $message puede contener uno o más marcadores de posición, que los implementadores de la interfaz pueden interpolar con los parámetros clave-valor pasados a la cadena $context, como se muestra en el siguiente ejemplo abstracto:

<?php
//…
$message = "User {email} created, with role {role}.";
//…
$context = array('email' => ‘john@mail.com', ‘role’ => 'CUSTOMER');
//…

Sin entrar en los detalles de implementación, es suficiente decir que PSR-3 es un conjunto estándar simple para clasificar un papel importante de un mecanismo de registro. Al usar la interfaz del registrador, estamos libres de tener que depender de una implementación específica del registrador. Podemos insinuar nuestro código de aplicación contra LoggerInterface para adquirir un registrador compatible con PSR-3.
Si estuviéramos utilizando Composer con nuestro proyecto, podríamos incluir fácilmente el paquete psr/log en él. Esto nos permitiría integrar un registrador compatible con PSR con nuestro proyecto de una de las siguientes maneras:

  • Implementando la interfaz LoggerInterface y definiendo todos sus métodos
  • Heredar la clase AbstractLogger y definir el método de registro
  • Usando LoggerTrait y definiendo el método de registro

Sin embargo, es mucho más fácil usar un paquete Composer existente, como monolog/monolog o katzgrau/klogger, y evitar escribir nuestra propia implementación de registrador por completo.

Comparte