Monolog para PHP: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Monolog y para qué sirve?

\n\n

Monolog es una biblioteca estándar para el registro de logs en PHP. Proporciona un conjunto de herramientas flexible y potente para escribir logs en varios canales (archivos, bases de datos, correo electrónico, registro del sistema, servicios externos, etc.). Monolog es el estándar de facto para aplicaciones PHP, especialmente en el ecosistema de Symfony, Laravel y otros frameworks modernos.

\n\n

¿Para qué sirve esta biblioteca? En cualquier aplicación es necesario rastrear eventos: errores, advertencias, mensajes informativos, información de depuración. Monolog permite:

\n
    \n
  • Centralizar el registro de logs — escribir logs en un formato único y desde cualquier lugar de la aplicación.
  • \n
  • Configurar canales de forma flexible — enviar errores críticos a Telegram/Slack y mensajes informativos a un archivo.
  • \n
  • Formatear mensajes — agregar fecha, nivel, contexto, traza de llamadas.
  • \n
  • Filtrar logs — procesar solo mensajes de un nivel específico.
  • \n
  • Integrarse con frameworks — en Symfony, Laravel, Yii2 se utiliza precisamente Monolog.
  • \n
\n\n

Instalación

\n

Monolog se instala a través de Composer, el gestor de paquetes estándar para PHP.

\n
composer require monolog/monolog
\n

Si usas PHP 8.0+, se recomienda instalar la última versión estable. Después de la instalación, aparecerán en el proyecto la carpeta vendor y el archivo composer.json con la dependencia.

\n\n

Inicio rápido

\n

El ejemplo más simple: escribir un log en un archivo:

\n
<?php\nrequire 'vendor/autoload.php';\n\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n// Creamos el logger con el nombre del canal 'my_app'\n$log = new Logger('my_app');\n// Agregamos un manejador: escritura en archivo\n$log->pushHandler(new StreamHandler('app.log', Logger::WARNING));\n\n// Ahora podemos registrar logs\n$log->warning('Esto es una advertencia');\n$log->error('Esto es un error');\n\necho "Logs escritos en app.log";\n?>
\n

Después de ejecutar el script, en el archivo app.log aparecerá algo como:

\n
[2025-04-09T10:30:00.123456+00:00] my_app.WARNING: Esto es una advertencia [] []\n[2025-04-09T10:30:00.123789+00:00] my_app.ERROR: Esto es un error [] []
\n\n

Métodos y funciones principales

\n

Veamos los métodos clave de Monolog. Todos forman parte de la clase Monolog\\Logger o clases relacionadas.

\n\n

1. pushHandler(HandlerInterface $handler)

\n

Qué hace: Agrega un manejador (handler) a la pila. El logger puede tener varios manejadores, y cada uno recibirá todos los mensajes (si no se ha configurado un filtro).

\n

Parámetros:

\n
    \n
  • $handler — objeto que implementa Monolog\\Handler\\HandlerInterface (por ejemplo, StreamHandler, FirePHPHandler, SlackHandler).
  • \n
\n

Ejemplo:

\n
$log = new Logger('app');\n$log->pushHandler(new StreamHandler('debug.log', Logger::DEBUG));\n$log->pushHandler(new StreamHandler('errors.log', Logger::ERROR));\n// Ahora los mensajes de nivel ERROR y superiores irán a ambos archivos
\n\n

2. addRecord(int $level, string $message, array $context = [])

\n

Qué hace: Método base para escribir un log. Normalmente no se llama directamente, sino que se usan métodos envoltorio (debug(), info(), etc.).

\n

Parámetros:

\n
    \n
  • $level — nivel de registro (constantes: Logger::DEBUG, Logger::INFO, Logger::WARNING, etc.).
  • \n
  • $message — texto del mensaje.
  • \n
  • $context — array con datos adicionales (por ejemplo, ID de usuario, dirección IP).
  • \n
\n

Ejemplo:

Recommendations