Перейти к содержанию

Использование Monolog

В конструктор передаётся название канала. Канал определяет стек обработчиков — набор методов, через которые проходит лог.

  • logger — основной объект, используемый для записи. Сам логгер ничего не пишет. Он управляет хендлерами
  • handler — занимается записью логов. В одном логгере можно указать множество хандлеров. Они будут вызываться по очереди. Примеры.
    • StreamHandler пишет лог в стрим (в файл, в STDOUT)
    • SyslogHandler пишет лог в syslog
  • processor — позволяет изменять лог: добавлять дополнительные данные (timestamp, название машины, ip адрес)
  • formatter позволяет форматировать лог. Например, преобразовать в json
  • level — уровень ошибки. Монолог поддерживает уровни ошибок, описанные в RFC 5424
    • \Monolog\Logger::DEBUG — 100
    • ...
    • \Monolog\Logger::EMERGENCY — 600
  • bubble — всплытие. Хендлеры работают по очереди. Этот процесс называется Всплытие. Если отключить всплытие - передача следующему хендлеру не произойдёт
  • Последний добавленный хендлер запустится самым первым

Ссылки на документацию

<?php
use Monolog\Handler\StreamHandler;
use Monolog\Logger;

$stdOutHandler = new StreamHandler(STDOUT);
$logger = new Logger('my-channel');
$logger->pushHandler($stdOutHandler);
$logger->info('Message', ['user' => 'user name']);

Структура сообщения

  • message — сообщение
  • level — важность лога — числовое значение
  • level_name — важность лога — строковое значение
  • context — то что послали вторым параметром
  • channel — имя канала
  • datetime — время срабатывания лога
  • extra — сюда процессоры могут складывать данные

Фильтрация логов по уровню ошибки

Необходимо к стандартному обработчику добавить ещё один обработчик, который будет отдельно логгировать только error логи. Отличие от параметра $level в конструкторе хендлера в том, что такой обработчик позволяет ограничить уровень с двух сторон.

<?php
$logger = new \Monolog\Logger('logger');
$commonHandler = new \Monolog\Handler\StreamHandler('logger.log');

// второй параметр позволяет указать минимальный уровень лога
// третий параметр позволяет указать максимальный уровень лога
$onlyErrorLog = new \Monolog\Handler\FilterHandler(
    new \Monolog\Handler\StreamHandler('error.log'),
    \Monolog\Logger::ERROR,
    \Monolog\Logger::ERROR,
);