Categorías: Programación

Laravel 5.3: Modificar (override) el sistema de logs basado en Monolog

Laravel trae por defecto un sistema de logs (bitácoras) basado en Monolog. Aunque hay algunas discusiones (Override format log) y artículos sobre el tema (Configuring Custom Logging in Laravel 5) ninguna me ofrecía la solución deseada. Mi interés era cambiar el nombre del fichero por defecto, y al mismo tiempo modificar el formato del log.

Modificar el log de nuestra aplicación con Laravel

Creación de la clase ConfigureLogging.php

Creamos un fichero de clases en bootstrap/ConfigureLogging.php

make('config');
        $maxFiles = $config->get('app.log_max_files');

        //  Stream handlers
        $path     = $app->storagePath().'/logs/cprsync.log';  // cprsync es el nombre que quiero darle
        $handler  = new RotatingFileHandler($path, is_null($maxFiles) ? 5 : $maxFiles,
                                            $config->get('app.log_level', 'debug'));
        // Modificamos el formato del log
        $logFormat = "[%datetime%] [%level_name%] : %message% %context% %extra%\n";

        $formatter = new LineFormatter($logFormat);
        $handler->setFormatter($formatter);

        // Push handler
        $log->getMonolog()->pushHandler($handler);
    }
}

Carga de la case con PSR-4

Debemos añadir la fichero composer.json

...
"psr-4": {
            "App\\": "app/",
            "Bootstrap\\": "bootstrap/",
            ...
        }

Modificar el kernel de la app

Modificaremos los ficheros app/Http/Kernel.php y app/Console/Kernel.php

app/Http/Kernel.php

...
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Routing\Router;
...

/**
 * Kernel constructor. Añadido para el tema del CustomLog (Completo)
 * @param Application $app
 * @param Router $router
 */ public function __construct(Application $app, Router $router)
 {
     parent::__construct($app, $router);

     array_walk($this->bootstrappers, function(&$bootstrapper)
     {
         if($bootstrapper === 'Illuminate\Foundation\Bootstrap\ConfigureLogging')
         {
              $bootstrapper = 'Bootstrap\ConfigureLogging';
         }
     });
 }

app/Console/Kernel.php

...
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Events\Dispatcher;
...

/**
 * Kernel constructor. Añadido para el tema del CustomLog (Completo)
 * @param Application $app
 * @param Router $router
 */ public function __construct(Application $app, Router $router)
 {
     parent::__construct($app, $router);

     array_walk($this->bootstrappers, function(&$bootstrapper)
     {
         if($bootstrapper === 'Illuminate\Foundation\Bootstrap\ConfigureLogging')
         {
              $bootstrapper = 'Bootstrap\ConfigureLogging';
         }
     });
 }

Comprobación

Ahora nuestra aplicación ya tiene el formato deseado

[2016-12-31 07:37:34] [INFO] : Hola var 1 {"favoriteColor":"orange","bestComplemeny”:"green"} []

Para evitar el tema de los corchetes vacios del final en caso de que no existan datos extra, podemos seguri las recomendaciones del post Laravel Logging Extra Square brackets at end of log lines cambiando en el fichero ConfigureLogging

$formatter = new LineFormatter($logFormat,null,true,true);

Otros enlaces relacionados:


Imagen: Vector Background

Comparte este artículo

Artículo Antiguo
Este artículo tiene más de 2 años. Es muy probable que su contenido este anticuado, aunque pueda ser de utilidad, es conveniente que revises otras informaciones al respecto. Si lo encuentras útil o crees que puede ser actualizado, deja tu comentario con la actualización para poder editarlo y que pueda ser útil a los demás.

Comparte este articulo en

Abkrim

Yo solo se que no se nada, y que me paso la vida aprendiendo

Entradas recientes

Youtube – Mod Security en DirectAdmin. Conocerlo y gestionarlo en el panel de control DirectAdmin.

¡Hola a todos! Vamos a sumergirnos en el fascinante mundo de Mod Security y aprender…

3 meses hace

Apertura del canal Youtube, Tecno Boomer, dedicado al mundo del hosting

Ya son muchos años en el sector, muchos años pasando por varios paneles de control,…

3 meses hace

El Uso de la Lista UCEPROTECT en los Niveles 2 y 3: Una Falacia de Causa Cuestionable

La lista UCEPROTECT es una herramienta utilizada por muchos administradores de sistemas y proveedores de…

4 meses hace

Fatal error: Allowed memory size of 268435456 bytes exhausted en WordPress. Otro post más… pero diferente

No es la primera vez que me encuentro con el agotamiento de la memoria en…

11 meses hace

Problemas de Acceso con Centos 7, Almalinux 8, Ubuntu 20.04, y Debian 10/11: Un Enigma Firewall CSF

Descubre cómo solucionar problemas de acceso a servidores con Centos 7, Almalinux 8, Ubuntu 20.04…

1 año hace

MySQL no inicia debido a errores en la base de datos interna de MySQL

Uno de los mensajes más alarmantes que puedes encontrarte es aquel que indica que tu…

1 año hace