Конфиг канала
Канал — это именованный экземпляр Monolog со своим уровнем, форматом и выводом. Каждая запись
в массиве channels у LoggerManager — это конфиг вида, показанного ниже.
Форма конфига
'http' => [
'level' => \Monolog\Level::Info,
'format' => 'line',
'output' => 'stderr',
'file_path' => null,
'file_max' => 30,
'syslog_ident' => 'winter',
],| Ключ | Тип | Обязателен | По умолчанию | Описание |
|---|---|---|---|---|
level |
Monolog\Level |
да | — | Минимальный уровень; записи ниже отбрасываются. |
format |
'line' | 'json' |
да | — | Формат вывода. См. ниже. |
output |
см. цели | да | — | Куда пишутся записи. |
file_path |
string|null |
когда output=file |
null |
Абсолютный путь к файлу лога. |
file_max |
int |
нет | 30 |
Максимум ротируемых файлов для хранения. |
syslog_ident |
string |
нет | 'winter' |
Идентификатор процесса в syslog. |
Конфиг передаётся, а не выводится
Библиотека никогда не выводит эти значения из окружения. Фреймворк строит конфиг и передаёт
его в LoggerManager. См. Интеграцию с фреймворком.
Цели вывода
Значение output выбирает обработчик Monolog (строится
HandlerFactory):
output |
Обработчик | Заметки |
|---|---|---|
stdout |
SafeStreamHandler('php://stdout') |
Swoole, CLI. |
stderr |
SafeStreamHandler('php://stderr') |
FPM — безопасен от broken pipe. |
syslog |
SyslogHandler |
Централизованное логирование Docker / Kubernetes. Facility LOG_USER. |
file |
RotatingFileHandler |
Требует file_path; ротация ежедневная (Y-m-d), хранит file_max файлов, использует блокировку. |
null |
NullHandler |
Отбрасывает всё — полезно в тестах. |
Неизвестный output или output=file без file_path бросают InvalidArgumentException.
FPM + stdout = риск broken pipe
Под PHP-FPM php://stdout — это поток ответа FastCGI к nginx/Apache. Если клиент отключился,
запись в него может послать SIGPIPE воркеру. Используйте stderr для FPM — он идёт в
error_log FPM, независимо от клиента. Полное объяснение:
Вывод и broken pipe.
Форматы
Выбираются по format (строятся FormatterFactory):
format |
Форматтер | Использование |
|---|---|---|
line |
SpringLineFormatter |
Читаемая одна строка — терминалы, разработка, слежение за логами. |
json |
JsonFormatter из Monolog |
JSON с разделением по строкам — Loki, Elasticsearch, Datadog. |
Точная анатомия строки и метки уровней — в Формате логов.
Syslog и завершающие переводы строк
Когда output равен syslog, менеджер строит форматтер с appendNewline = false — syslog
сам обрамляет каждое сообщение, поэтому лишний завершающий перевод строки породил бы ложную
пустую запись. Для любого другого вывода форматтер добавляет \n. Это делается автоматически;
настраивать не нужно.
Пример — несколько каналов
use Monolog\Level;
$channels = [
'sys' => ['level' => Level::Warning, 'format' => 'line', 'output' => 'stderr',
'file_path' => null, 'file_max' => 30, 'syslog_ident' => 'winter'],
'http' => ['level' => Level::Info, 'format' => 'json', 'output' => 'syslog',
'file_path' => null, 'file_max' => 30, 'syslog_ident' => 'winter'],
'job' => ['level' => Level::Debug, 'format' => 'line', 'output' => 'file',
'file_path' => '/var/log/app/job.log', 'file_max' => 7, 'syslog_ident' => 'winter'],
];Связанное
- Справочник API → LoggerManager
- Формат логов — анатомия строки, метки уровней, форма JSON
- Динамические каналы — добавление каналов в рантайме