¿Qué es el logging?
El logging de Laravel se diseña en torno al concepto de canales. Un canal es una unidad de configuración que define dónde y cómo se escriben los logs. Se pueden combinar destinos como archivos, Slack, syslog, etc. Internamente utiliza la librería Monolog, lo que permite aprovechar sus numerosos handlers y formatters.Por defecto se usa el canal
stack. Es un canal “padre” que agrupa varios canales.Configuración
La configuración se centraliza enconfig/logging.php. La variable de entorno LOG_CHANNEL permite cambiar el canal por defecto.
Drivers de canal disponibles
| Driver | Descripción |
|---|---|
single | Escribe todos los logs en un único archivo |
daily | Divide los archivos por día (con rotación) |
slack | Envía mensajes al Incoming Webhook de Slack |
stack | Canal padre que agrupa varios canales |
syslog | Escribe en el syslog del sistema |
errorlog | Escribe en el error log de PHP |
monolog | Permite especificar un handler de Monolog directamente |
custom | Permite personalizar completamente el canal mediante una clase factory |
Niveles de log
Laravel soporta los ocho niveles definidos en la RFC 5424. Ordenados de mayor a menor gravedad:| Nivel | Ejemplos de uso |
|---|---|
emergency | El sistema no está operativo. Respuesta inmediata |
alert | Situación que requiere intervención humana inmediata (por ejemplo, corte de BD) |
critical | Fallo grave que detiene funciones principales |
error | Error en tiempo de ejecución. Requiere acción, no siempre inmediata |
warning | Problema potencial (uso de APIs deprecadas, datos inesperados…) |
notice | Funcionamiento normal pero relevante |
info | Operaciones habituales (login del usuario, confirmación de pedido…) |
debug | Información detallada durante el desarrollo |
level del canal indica el nivel mínimo.
Por ejemplo, con level = error solo se escriben error y niveles superiores (critical, alert, emergency).
Uso básico
Fachada Log
Escribe mensajes de cada nivel con la fachadaIlluminate\Support\Facades\Log.
Función helper log()
Con el helperlog() puedes registrar sin importar la fachada Log.
Añadir contexto
Puedes pasar contexto (un array) junto al mensaje para registrar información relacionada.withContext() — contexto común para todo el canal
Para que todas las entradas siguientes del canal lleven un contexto común, usawithContext().
Es adecuado para información que quieras incluir en todos los logs, como un ID de solicitud.
shareContext() — contexto común a todos los canales
withContext() solo afecta al canal en cuestión, pero shareContext() añade el contexto común a todos los canales.
Configuración de canales
Canal stack — escribir en varios canales a la vez
Con el canalstack puedes escribir en varios canales con una única llamada de log.
debug y superiores se escriben en daily (archivo), y solo los critical y superiores se envían también a slack.
Canal daily — rotación de logs
El canaldaily separa los archivos por fecha y borra automáticamente los antiguos.
Notificaciones de error a Slack
Obtén el Incoming Webhook URL de Slack y configúralo en.env.
slack en el canal stack y establece LOG_CHANNEL=stack para notificar automáticamente los errores.
Escribir en un canal concreto
ConLog::channel() puedes indicar explícitamente el canal.
Canales on-demand
ConLog::build() puedes crear un canal personalizado en el momento, sin definirlo en el archivo de configuración.
Útil para pruebas o destinos de salida temporales.
Casos prácticos
Añadir un ID de solicitud desde un middleware
Añadir a todos los logs un ID de solicitud común facilita el seguimiento del flujo de una solicitud.
Tras esta configuración, todos los logs incluirán automáticamente
request-id.
Registro de avisos de deprecación
Puedes dejar en el log los avisos de uso de funciones deprecadas de PHP o Laravel..env.
Laravel Pail — observación de logs en tiempo real
Laravel Pail es una herramienta de desarrollo que te permite ver los logs de la aplicación en tiempo real desde la terminal.Pail requiere la extensión PCNTL de PHP.
Instalación
Uso básico
Filtrado de logs
Resumen
Cómo elegir el nivel de log
Cómo elegir el nivel de log
| Nivel | Cuándo usarlo |
|---|---|
emergency | Fallo catastrófico que detiene todo el sistema |
alert | Situación que requiere intervención humana inmediata |
critical | Fallo grave con funciones principales caídas |
error | Error en tiempo de ejecución inesperado. Requiere acción |
warning | Uso de APIs deprecadas o datos inesperados |
notice | Operación normal pero relevante de registrar |
info | Operaciones del usuario o eventos de negocio |
debug | Información detallada durante el desarrollo (innecesaria en producción) |
Guía para elegir canal
Guía para elegir canal
- Desarrollo: escribe en un archivo con
singleodaily. - Producción: usa
stackcombinandodaily(guardado en archivo) yslack(notificaciones de error). - Logs de tareas concretas: crea un canal on-demand con
Log::build()para escribir en un archivo independiente. - Observación en tiempo real: consúltalos desde la terminal con
php artisan pail.
Consideraciones para producción
Consideraciones para producción
- Los logs
debugpueden contener información sensible. En producción se recomiendaLOG_LEVEL=erroro superior. - Rota los archivos regularmente para no saturar el disco (ajuste
daysdel canaldaily). - Ten en cuenta el rate limit de servicios externos como Slack. Configura el nivel para notificar solo errores importantes.