Trazas o logging customizado en Laravel 8

Sigo trasteando con Laravel 8 para un nuevo proyecto que he arrancado con dos amigos y una las cosas más curiosas es cómo organiza la gestión de los logs. Las trazas son básicas para saber qué está pasando con una aplicación, sobretodo cuando te encuentras con algún comportamiento inesperado o un problema como ya expliqué en un artículo anterior.

Laravel utiliza Monolog (ver código fuente en GitHub) para el formateo de los logs y el formato por defecto sería:

storage/logs/laravel.log

[2020-12-28 00:09:59] local.INFO: mi traza de log

En mi caso, busco:

  • Una traza que incluya los milisegundos, ya que quiero saber en qué parte del procesamiento se pierde más tiempo
  • No me interesa el nombre del canal (en este caso, “local.INFO”)

Para modificar el formato, en la configuración de logging de Laravel dispones de multitud de canales pero el canal por defecto es “single”.

Publicidad

Por tanto, lo más sencillo es modificar el canal “single”, y configurarlo adecuadamente:

config/logging.php

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'formatter' => Monolog\Formatter\LineFormatter::class,
            'formatter_with' => [
                'format' => "[%datetime%] %message%\n",
                'dateFormat' => 'Y-m-d H:i:s.v',
            ],
        ],

Para el formato de la fecha y hora se utilizan los caracteres de formato estándar de PHP (ver referencia).

Con esta configuración, a partir de ahora puedes utilizar en cualquier clase:

<?php
use Illuminate\Support\Facades\Log;
class ExampleClass {
  public function hello() {
    Log::info('Hello function executed!');
  }
}

Y en las trazas se mostrarán con el siguiente formato:

storage/logs/laravel.log

[2021-04-21 21:45:19.787] Hello function executed!

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.