Monitorea tu proyecto con Alertas usando Papertrail
Tiempo de lectura: 2.13 minutos
Todo funciona correctamente de manera local.
Pero de pronto los usuarios de tu proyecto empiezan a encontrar errores en producción.
Y te resulta difícil solucionarlos sin información adicional.
¿Te ha pasado?
Hoy vamos a ver cómo usar Logs y Alertas, para estar al tanto de errores en tu proyecto Laravel, y puedas solucionarlos a tiempo.
Laravel Logging
Laravel ofrece varios drivers para canales de logging.
Es decir, varias formas alternativas para escribir logs.
Entre los channel drivers
más usados tenemos:
-
daily
.- Driver basado en Monolog. Escribe sobre archivos, y va rotando cada día. -
single
.- Escribe sobre archivos, pero siempre sobre el mismo. -
null
.- Simplemente descarta todos los mensajes de log. -
slack
.- Permite enviar logs a un canal de Slack. -
papertrail
.- Permite enviar logs a Papertrail. A continuación veremos más sobre esto. -
stack
.- Actúa como wrapper para enviar logs a múltiples canales.
Papertrail
Papertrail es un servicio que nos permite gestionar logs de forma muy sencilla.
Enviamos nuestros logs a Papertrail y luego seremos capaces de buscar logs en base a filtros, y definir alertas.
Cómo configurar un canal de Papertrail
Para escribir logs sobre un canal de Papertrail necesitamos sólo 2 datos: host
y port
.
Para obtener estos datos de configuración necesitas crearte una cuenta de Papertrail.
Puedes [registrarte desde aquí] para obtener espacio de almacenamiento adicional de forma gratuita.
Configurar alertas en Papertrail
Papertrail nos permite ver los mensajes de log entrantes en tiempo real.
Sin embargo, nosotros no vamos a estar pendientes del visor de eventos todo el tiempo.
Es por eso que también podemos definir alertas en Papertrail:
Para crear un alerta indicamos:
- Qué logs nos interesan (en este caso nuestra query nos alerta de error logs)
- La frecuencia con que queremos evaluar nuestro alerta (por ejemplo, cada día, cada hora, etc)
- La condición que disparará el alerta (si no se encontraron coincidencias, si se encontraron al menos X coincidencias)
- Y finalmente nuestra zona horaria
Enviar logs sobre múltiples canales
Si usamos el driver stack podemos definir múltiples canales de logging.
Por ejemplo, en el videotutorial de arriba, definimos una "pila" para enviar logs a 2 canales: daily
y papertrail
, de la siguiente manera.
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['syslog', 'slack'],
],
// ...
],
Niveles de log
Puedes escribir mensajes de log usando los siguientes métodos:
use Illuminate\Support\Facades\Log;
Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);
Cada uno de ellos se corresponde con un log level
determinado.
Información contextual
Los métodos aceptan también un segundo argumento, para agregar información contextual.
Es decir, puedes enviar un arreglo asociativo, para que al revisar logs se entienda mejor el contexto en que ocurrieron.
Por ejemplo, si falló el inicio de sesión para un usuario, nos interesará saber cuál es su id:
Log::info('User failed to login.', ['id' => $user->id]);
Si ocurre un error al procesar un pago, la información contextual sería por ejemplo, el importe a pagar, el concepto del pago (producto o servicio adquirido), a nombre de quién se hace el pago, y cuál es el id de la transacción.
Conclusión
Como puedes ver, configurar logs y alertas en un proyecto Laravel es muy sencillo.
En el video de ejemplo vemos cómo usar el driver stack
, para enviar nuestros logs tanto a daily
como a papertrail
.
- De esta manera nuestros mensajes son escritos en archivos de manera local,
- y adicionalmente son enviados a Papertrail, para que nos envíe alertas en caso que sean frecuentes.
De hecho hicimos pruebas, y recibimos este alerta por correo electrónico: