Ver índice de contenidos del libro

A.5. MonologServiceProvider

El proveedor MonologServiceProvider proporciona un sistema de logs mediante la integración de la librería Monolog creada por el programador Jordi Boggiano.

Cuando se registra este proveedor, la aplicación guarda información de log sobre las peticiones y sobre los errores producidos. Como también permite loggear cualquier tipo de información propia, puedes emplearlo para depurar y monitorizar tu aplicación, incluso cuando se ejecuta en producción.

A.5.1. Parámetros de configuración

El proveedor define los siguientes parámetros configurables:

  • monolog.logfile: ruta del archivo en el que se guardan los mensajes.
  • monolog.bubble: (opcional) indica si los mensajes se escalan hacia arriba en la traza del error o no.
  • monolog.level (opcional): nivel que tienen que tener los mensajes para guardarse en el archivo. Los valores posibles son Logger::DEBUG, Logger::INFO, Logger::WARNING y Logger::ERROR (además de las constantes PHP, también puedes usar las cadenas DEBUG, INFO, WARNING y ERROR). El valor por defecto es DEBUG y los niveles son graduales, lo que significa que DEBUG guarda todos los mensajes, INFO guarda todo salvo los mensajes DEBUG, etc.
  • monolog.name (opcional): el nombre del canal monolog, que por defecto es myapp.

A.5.2. Servicios proporcionados

El proveedor proporciona los siguientes servicios:

  • monolog: una instancia del logger de Monolog. Ejemplo de uso:
$app['monolog']->addDebug('Probando el logger de Monolog.');
  • monolog.listener: un event listener que loguea peticiones, respuestas y errores.

A.5.3. Cómo se registra el proveedor

El siguiente código muestra un ejemplo de cómo registrar este proveedor:

$app->register(new Silex\Provider\MonologServiceProvider(), array(
    'monolog.logfile' => __DIR__.'/development.log',
));

Nota La librería Monolog se incluye cuando descargas Silex en forma de archivo comprimido. Si instalas Silex mediante Composer, debes añadir esta dependencia ejecutando el siguiente comando:

$ composer require monolog/monolog

A.5.4. Ejemplos de uso

El proveedor MonologServiceProvider proporciona el servicio monolog para guardar mensajes de log de diferentes niveles mediante los métodos addDebug(), addInfo(), addWarning() y addError():

use Symfony\Component\HttpFoundation\Response;
 
$app->post('/user', function () use ($app) {
    // ...
 
    $app['monolog']->addInfo(sprintf("Se ha registrado el usuario '%s'.", $username));
 
    return new Response('', 201);
});

A.5.5. Configuración personalizada

Para añadir o modificar los handlers de Monolog, debes configurar el servicio antes de utilizarlo. Para ello, extiende el servicio monolog:

$app['monolog'] = $app->share($app->extend('monolog', function($monolog, $app) {
    $monolog->pushHandler(...);
 
    return $monolog;
}));

A.5.6. Traits

El trait Silex\Application\MonologTrait definido por este proveedor añade los siguientes atajos:

  • log: guarda un mensaje en el archivo de logs.
$app->log(sprintf("Se ha registrado el usuario '%s'.", $username));

Para conocer todas las posibilidades de este proveedor, consulta la documentación oficial de Monolog.