Logging en PHP Monolog

Written by Samuel de Ancos

Monolog es una librería de logging escrita en PHP inspirada en la similar herramienta LogBook escrita en Python. Requiere PHP5.3 o superior. Y lo que mas me gusta es que es muy fácil de utilizar. Existen seis niveles: debug, info, warning, error, critical, alert.

Para instalar la librería puedes bajártela en Formato Comprimido ZIP o utilizar GIT, método este que recomiendo:

$ git clone https://github.com/Seldaek/monolog.git

Tambien existe la posibilidad de descargarlo utilizando sistema de paquetes PHP como Pear:

$ pear install pearhub/Monolog

O en por medio de Composer: http://packagist.org/packages/monolog/monolog

Utilizar la librería es muy sencillo; simplemente se instancia un objeto Logger y utilizando el método pushHandler añadimos un nuevo handler a nuestro sistema logeador, donde el primer parámetro es el handler que queremos utilizar, y el segundo el nivel que utilizaremos como pivote para escribir los mensajes de log.

<php

use MonologLogger;
use MonologHandlerStreamHandler;

$log = new Logger("MiLogger");
$log->pushHandler(new StreamHandler("/home/tuuser/logs/tuapp.log", Logger::DEBUG));

$log->addDebug("Esto es un mensaje de DEBUG");
$log->addInfo("Esto es un mensaje de INFO");
$log->addWarning("Esto es un mensaje de WARNING");
$log->addError("Esto es un mensaje de ERROR");
$log->addCritical("Esto es un mensaje de CRITICAL");
$log->addAlert("Esto es un mensaje de ALERT");

Monolog puede gestionar los logs de varias maneras; pues posee varios handlers:

  • StreamHandler: Guardar streams de datos. Es la típica opción para guardar logs en ficheros.
  • RotatingFileHandler: Logs rotativos, un fichero por día.
  • FirePHPHandler: Como su nombre indica, para tratar los logs desde la extensión FirePHP del navegador Firefox.
  • ChromePHPHandler: Igual que el anterior pero para el navegador Chrome.
  • MongoDBHandler: Logs en base de datos, en este caso escribe en MongoDB, por medio de la extensión de mongo de PHP.
  • NativeMailHandler: Logs por email utilizando la función mail() de PHP.
  • SwiftMailerHandler: Igual que el anterior pero utilizando la librería SwiftMailer.
  • SyslogHandler: Escribe los mensaje en el log del sistema.
  • GelfHandler: Con este handler podemos conectarlo con el servidor de logs graylog2.
  • SocketHandler: Utiliza sockets UNIX. Aparte existen varios handlers mas, puedes encontrar información sobre ellos en la documentación del proyecto: Documentación Monolog

Tambien existe la posibilidad de darle formato a los mensajes de logs; existiendo varios formateadores como: LineFormatter, NormalizerFormatter, JsonFormatter, etc.. En la documentación se puede aprender mas sobre cada uno de ellos.