Hero

Agregar sistema de logs a Silex

Mayo 19, 2014

enzo
PHP
Silex

Para cualquier aplicación es importante tener un registro de las cosas que están pasando en el sistema, para poder hacer luego un análisis postmortem o simplemente para poder hacer una depuración de posibles errores,

En Silex podemos llevar acabo esta tarea utilizando Monolog a continuación veamos como lo podemos incluir en nuestro proyecto.

  1. Instalando Monolog.

Lo primero que debemos hacer es editar el archivo composer.json como se muestra a continuación

"require": {
    "monolog/monolog": ">=1.0.0"
}

Luego debemos ejecutar el comando composer update ó composer.phar update depende de la configuración de nuestro ambiente, al final dentro de nuestro folder vendor tendremos un nuevo folder llamado monolog.

  1. Registrando del Servicio de Monolog.

Con la librería cargada debemos registrar el servicio de Monolog en nuestra aplicación como se muestra a continuación.

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

En este casi he escogido que nuestro log se guarde en un archivo y le indicamos que el archivo se encuentra fuera del Document Root en un folder logs, este directorio debe existir antes; el archivo development.log sera creado si no existe.

Monolog permite también que se guarden los logs en based de datos así como en otra docena de destinos, todo esto esta muy bien documentado en el sitio de Monolog.

  1. Registrando eventos en el log.

Ahora solo debemos hacer uso del servicio como se muestra a continuación.

$app['monolog']->addDebug('Before define Routes.');

No necesariamente esto debe estar llamado dentro de una function route, en este caso lo he llamado antes de una definición de los enturamientos y el resultado en el log debería ser algo similar a la siguiente salida.

[2014-05-19 13:22:36] myapp.DEBUG: Before define Routes. [] []

Veamos un ejemplo dentro de una función de enrutamiento.

$app->get('/rest/clients', function() use ($app) {

  $app['monolog']->addWarning('Start');

  $clients = array(
              array(
                'id' => 1,
                'name' => 'HP'
                ),
              array(
                'id' => 1,
                'name' => 'IBM'
                ),
              array(
                'id' => 1,
                'name' => 'Google'
                ),
            );

  $app['monolog']->addError('End');

  return $app->json($clients);
});

Como se ve ahora se han usando los métodos addWarning y addError los cuales generan una salida defierente en nuestro archivos de log como se puede apreciar a continuación.

[2014-05-19 13:27:26] myapp.WARNING: Start [] []
[2014-05-19 13:27:26] myapp.ERROR: End [] []

Monolog soporta los siguientes niveles de log

  • DEBUG (100)
  • INFO (200)
  • NOTICE (250)
  • WARNING (300)
  • ERROR (400)
  • CRITICAL (500)
  • ALERT (550)
  • EMERGENCY (600)

Cada vez que se registra una actividad se agrega información del request como por ejemplo.

[2014-05-19 13:27:26] myapp.INFO: Matched route "GET_rest_clients" (parameters: "_controller": "{}", "_route": "GET_rest_clients") [] []
[2014-05-19 13:27:26] myapp.INFO: > GET /rest/clients [] []

Espero que haya sido de su agrado.

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.