Пакет · logger

Формат логов

Точная форма строки лога: что означает каждый сегмент, метки уровней фиксированной ширины, альтернатива в виде JSON и набор маскируемых по умолчанию ключей.

Строчный формат (SpringLineFormatter)

Форматтер по умолчанию для format: 'line'. Одна запись на строку:

text
[datetime] [LEVEL] -channel- [pid] (ClassName): message {json}
[datetime] [LEVEL] -channel- [pid]: message {json}
Сегмент Источник Заметки
[datetime] дата-время записи Y-m-d H:i:s.
[LEVEL] уровень записи Метка фиксированной ширины в 5 символов — см. ниже.
-channel- канал Monolog Зарегистрированное имя канала (http, cli, sys, …).
[pid] getmypid() Идентификатор процесса-отправителя в ОС — всегда присутствует. Различает форкнутых потомков в демонах/воркерах.
(ClassName) context['class'] Короткое имя класса. Присутствует только когда логгер получен через getLogger(Class::class); отсутствует у сырого channel().
message сообщение лога Как передано.
{json} context + extra Объединены и закодированы в JSON. Опускается, когда пусто.

JSON-хвост объединяет context вызова с влитым extra (контекст запроса), кодируя с JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES. При конфликте ключей побеждает extra.

Примеры

text
[2024-01-01 12:00:00] [INFO ] -http- [4821]: request handled {"request_id":"abc-123"}
[2024-01-01 12:00:00] [DEBUG] -http- [4821] (PpaConnectionPool): FPM connection opened {"class":"App\\Pool\\PpaConnectionPool"}
[2024-01-01 12:00:00] [ERROR] -http- [4821] (UserService): db timeout {"class":"App\\UserService","attempt":3}
[2024-01-01 12:00:00] [WARN ] -sys- [4821]: disk usage high

Метки уровней

Каждый уровень отображается в метку фиксированной ширины в 5 символов (с добивкой, чтобы колонки выравнивались):

Уровень Метка
Debug DEBUG
Info INFO
Notice NOTIC
Warning WARN
Error ERROR
Critical CRIT
Alert ALERT
Emergency EMERG

Завершающий перевод строки

Форматтер добавляет \n по умолчанию. Для output: 'syslog' менеджер строит его с appendNewline = false, потому что syslog сам обрамляет каждое сообщение. Делается автоматически.

Формат JSON (JsonFormatter)

Для format: 'json'JsonFormatter из Monolog в режиме построчной пачки, один JSON-объект на строку. Подходит для агрегаторов логов (Loki, Elasticsearch, Datadog). Пустые context и extra не опускаются, а трассировки стека включаются.

json
{"message":"user created","context":{"id":42,"class":"App\\Service\\UserService"},"level":200,"level_name":"INFO","channel":"http","datetime":"2024-01-01T12:00:00+00:00","extra":{"request_id":"abc-123"}}

Маскируемые ключи

Ключи, маскируемые по умолчанию SensitiveMaskingProcessor (регистронезависимо, рекурсивно). Каждое совпавшее значение становится ***:

text
password       passwd         secret
token          access_token   refresh_token
api_key        apikey         authorization
auth           cookie         set-cookie
credit_card    card_number    cvv
ssn            pin

Добавьте свои через конструктор — см. Маскирование данных.

Связанное