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.
Contenidos
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);
}
}
Debemos añadir la fichero composer.json
...
"psr-4": {
"App\\": "app/",
"Bootstrap\\": "bootstrap/",
...
}
Modificaremos los ficheros app/Http/Kernel.php y app/Console/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';
}
});
}
...
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';
}
});
}
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
Comparte este articulo en
¡Hola a todos! Vamos a sumergirnos en el fascinante mundo de Mod Security y aprender…
Ya son muchos años en el sector, muchos años pasando por varios paneles de control,…
La lista UCEPROTECT es una herramienta utilizada por muchos administradores de sistemas y proveedores de…
No es la primera vez que me encuentro con el agotamiento de la memoria en…
Descubre cómo solucionar problemas de acceso a servidores con Centos 7, Almalinux 8, Ubuntu 20.04…
Uno de los mensajes más alarmantes que puedes encontrarte es aquel que indica que tu…