Cuando desarrollamos aplicaciones web en Laravel (o en cualquier framework) es fundamental tener herramientas de Log para saber todo lo que esta ocurriendo en nuestra sistema. No es muy recomendable utilizar try y catch en Laravel para loggear errores, como aveces solemos hacer. 😂
La información que nos brindan las herramientas de logs nos permiten reducir errores e identificar oportunidades para mejorar nuestra aplicación.
Por eso, en este artículo te voy a recomendar 3 herramientas de Log para Laravel que te servirán mucho.
1. Laravel Logging: Sistema de Logs incluido en Laravel
Laravel, como buen framework php, tiene incluido un sistema de logs llamado Laravel Logging, que nos permite capturar distintos niveles de errores de nuestra aplicación.
El servicio de logs de Laravel nos permite registrar los mensajes por diferentes canales, ya sea en archivos, o en Slack, o en multiples canales, gracias a al package de logs de PHP llamado Monolog.
Configurar Laravel Logging
Por defecto, ya tenemos una configuración inicial para nuestro proyecto de Laravel. Podemos ver la configuración por defecto y todas las opciones que tenemos disponibles en el archivo config/loggin.php
.
Para modificar el canal por donde queremos que se registren los mensajes del log, tenemos que modificar la variable LOG_CHANNEL
en nuestro archivo .env
Por defecto, la variable tiene el valor 'stack'
. Este canal tiene la particularidad de permitir a nuestra aplicación registrar logs por mas de un canal. Si dejamos el valor stack
, el sistema registrará por el canal 'daily'
, que es el que viene configurado por defecto en el canal stack:
'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['daily'], ], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 14, ], (...) ],
Lo bueno que tiene esta configuración es que, el canal daily nos permite configurar una cantidad de días que se guardara el archivo de logs. En este caso, pasados los 14 días, el archivo logs/laravel.log
se borrará. Esto nos permite controlar de cierta manera el crecimiento de nuestro archivo de logs, ya que podría llegar a pesar demasiado trayendo problemas a nuestro sistema.
Para ver mas configuraciones de Laravel Logging, visita la documentación oficial.
Mensajes personalizados en Laravel Logging
Laravel Logging nos da la posibilidad de registrar cualquier dato o información en el canal configurado (archivo, Slack, etc.). Para hacerlo, podemos utilizar las siguientes funciones:
Log::emergency($message, ['id' => $user->id]); Log::alert($message); Log::critical($message); Log::error($message); Log::warning($message); Log::channel('slack')->notice($message); Log::stack(['slack', 'single'])->info($message); Log::debug($message);
Como podemos ver, todas las funciones pueden aceptar un parametro que registrará en log formateado correctamente. También, podes cambiar el canal y/o asignar múltiples canales.
2. Laravel Debugbar
Laravel Debugbar es una de las herramientas mas conocidas entre la comunidad ya que se mantiene en constante actualización permitiendo ser utilizada en cualquier versión de Laravel. Esta herramienta agrega una barra de información en la parte inferior del navegador. Cada tipo de log esta organizado en pestañas que nos permite ver la información de una forma muy cómoda.
Una de las características mas utilizadas en Laravel Debugbar es la posibilidad de registrar las consultas a la base de datos que se ejecutan con Eloquent o con Query Builder de Laravel. De esta forma, podemos saber exactamente que query se esta ejecutando y de que forma.
Además, nos brinda diferentes tiempos que son muy útiles. Como por ejemplo, el tiempo total de la request junto con el consumo de memoria RAM, y el tiempo de cada consulta ejecutada en la base de datos y el tiempo total de todas las consultas.
También, tenemos la posibilidad de ver las excepciones que se ejecutan en nuestro sistema, las vistas, los correo electrónicos que envió nuestra aplicación, los datos en sesión y muchas características mas que podemos activar y desactivar en la configuración de Laravel Debugbar.
Cómo instalar Laravel Debugbar
La instalación de este paquete es muy sencilla gracias a Composer. Debemos ejecutar el siguiente comando dentro de nuestro proyecto.
composer require barryvdh/laravel-debugbar --dev
NOTA: Es importante agregar la opción --dev
para que no se instale en el ambiente de producción.
El comando anterior instalará el paquete y generará una nueva variable llamada APP_DEBUG
en nuestro archivo .env
. Deben verificar que dicha variable tenga el valor true
.
Si esta utilizando una versión inferior a Laravel 5.5 o no usa la detección automática, agregue el Proveedor de servicios en el array 'providers'
de config/app.php
Barryvdh\Debugbar\ServiceProvider::class,
Y si lo deseas, también puedes agregar la Facade en el mismo archivo:
'Debugbar' => Barryvdh\Debugbar\Facade::class,
Para habilitar y deshabilitar todas las pestañas que tiene disponible Debugbar para nosotros, debemos publicar su configuración. Esto se hace con el siguiente comando:
php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"
Este comando creará el archivo config/debugbar.php
que es una copia del archivo de configuración original del paquete que podemos editarlo para registrar todo lo que necesitemos. Verás que hay muchas opciones disponibles y cada una de ellas esta comentada con lo que registra en el log.
Registrar mensajes personalizados con Laravel Debugbar
Como con Laravel Logging, también tenemos la posibilidad de registrar todo lo que queramos en Debugbar y aparecerá en la pestaña Message de nuestra barra de log. Las funciones disponibles para registrar mensajes en la barra de Debugbar son:
Debugbar::info($object); Debugbar::error('Error!'); Debugbar::warning('Watch out…'); Debugbar::addMessage('Another message', 'mylabel');
Registrar tiempos de procesamiento en Debugbar
Otra característica fantástica que tiene este paquete de Laravel es la posibilidad de registrar el tiempo que tarda en ejecutarse cualquier función que necesitemos. Para esto, Debugbar nos provee distintos métodos.
Debugbar::startMeasure('render','Time for rendering'); Debugbar::stopMeasure('render'); Debugbar::addMeasure('now', LARAVEL_START, microtime(true)); Debugbar::measure('Mi proceso', function() { // Do something… });
A continuación, un ejemplo de como utilizar el registro de tiempos de procesamiento:
Debugbar::measure('Mi proceso', function() { sleep(1); });
En la pestaña de Linea de tiempo (Timeline), podemos ver cuanto tardo en ejecutarse ‘Mi proceso’:
Si queres ver más características que tiene Laravel Debugbar, puedes hacer clic aquí para ver su documentación oficial.
3. Laravel Log Viewer
La última herramienta de esta lista de herramientas para log de Laravel, es Laravel Log Viewer. Esta herramienta es compatible tanto para las versiones de Laravel 5, como para Laravel 4.2.
Laravel Log Viewer nos permite ver los registros de storage/logs/
en el navegador con una interfaz gráfica en HTML.
Cómo instalar Laravel Log Viewer
La instalación de Laravel Log Viewer se realiza con Composer como cualquier paquete de Laravel.
composer require rap2hpoutre/laravel-log-viewer
Luego, agregamos el ServiceProvider en el array providers
de config/app.php
.
Rap2hpoutre\LaravelLogViewer\LaravelLogViewerServiceProvider::class,
Y por último, agregamos la siguiente ruta a nuestro archivo routes/web.php.
Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index');
Si ingresamos a la url www.misitio.com/logs
veremos la tabla con todos los registros de nuestro log.
Si queremos modificar la vista de Log Viewer, podemos publicar la vista del paquete y editarlo como nosotros queramos.
php artisan vendor:publish \ --provider="Rap2hpoutre\LaravelLogViewer\LaravelLogViewerServiceProvider" \ --tag=views
Es un paquete muy útil y flexible, ya que leer el archivo de log de Laravel suele ser algo engorroso y con Log Viewer nos muestra el archivo de una forma mas legible. Además que nos permite modificar la vista para adaptarlo a nuestras necesidades.
Documentación de Laravel Log Viewer
Les dejo la documentación oficial del paquete para que le den una mirada si lo desean: https://github.com/rap2hpoutre/laravel-log-viewer
⭐ Bonus: Laravel Telescope, el paquete estrella para Logs
Laravel Telescope fue lanzado a finales del 2018 como el paquete oficial de Laravel para registrar cualquier tipo de actividad de nuestra aplicación. Y la verdad que es MUY bueno.
Laravel Telescope también registra excepciones, mensajes en logs, consultas de bases de datos, trabajos en cola, correos electrónicos, notificaciones, caché y mucho más. También, muestra cómo diferentes partes de su aplicación trabajan juntas. Puede averiguar qué páginas funcionan correctamente y qué consultas se ejecutaron cuando se realizó una solicitud a una determinada página.
Todo esto lo muestra en una bonita interfaz gráfica muy potente para ver, monitorear y depurar varios aspectos de nuestra aplicación.
Laravel Telescope es una herramienta muy completa que se merece un artículo propio en Laravel tip por eso lo pongo como «bonus» y próximamente estaré escribiendo un entrada bien completa sobre Telescope. Por el momento, dejo la documentación oficial de Laravel 5.7 para Telescope (solo esta disponible en la versión 5.7): https://laravel.com/docs/5.7/telescope
Conclusión
Vimos 3 herramientas muy buenas para el manejo de log en Laravel, más un acercamiento a Laravel Telescope, para los que no lo conocían.
Espero que les haya gustado el artículo, si es así compártelo en tus redes sociales que es una gran motivación para seguir escribiendo artículos. Nos vemos en la próxima. 👋😀
Muchas gracias bro estaré atento a tu aporte de Telescope… Espero sigas así ayudando a toda la comunidad
Muchas gracias! Muy buen material, vale la pena compartirlo. Felicidades por este aporte.
arcanedev/log-viewer también es muy bueno
Realmente buen artículo, realmente la comunidad de laravel es muy amplia y gracias por compartir sus experiencias que hace que la curva de aprendizaje de los que empezamos aquí sea bastante corta.