Короткий ответ
DEBUG — подробности для разработки/диагностики, не нужные в обычной работе; INFO — штатные события (старт сервиса, успешная обработка запроса); WARN — что-то отклонилось от нормы, но сервис продолжает работать; ERROR — операция не выполнена и требует внимания; выбор уровня влияет на то, что будет видно в production-логах по умолчанию.
Как это работает подробнее
каждому сообщению лога присваивается уровень важности, и логгер настраивается на минимальный уровень вывода (например, в проде обычно INFO и выше, DEBUG отключён, чтобы не плодить избыточный объём). Централизованная система логирования может хранить все уровни, но фильтровать по ним при поиске и алертинге.
Пример кода
event.json
{"level":"warn","msg":"retry payment request","attempt":2,"service":"checkout"}
{"level":"error","msg":"payment request failed after 3 retries","service":"checkout","order_id":"a1b2"}Что использовать на практике
- Практика. включать DEBUG постоянно в production нежелательно — это резко увеличивает объём логов и стоимость хранения, а также может случайно залогировать чувствительные данные; DEBUG временно включают точечно при расследовании конкретной проблемы. WARN стоит использовать для ситуаций типа "retry сработал", "конфигурация неоптимальна, но работает", а ERROR — для необработанных исключений и неудачных операций, которые реально требуют внимания человека.
- Практика. Поиск по
level:errorв системе логирования сразу покажет реальные неразрешённые проблемы, тогда какlevel:warnпокажет ситуации, которые система скомпенсировала сама — такое разделение позволяет настраивать алерт именно на рост числа ERROR, не реагируя на штатные retry.
Подводные камни
- Частые ошибки. логировать обычные бизнес-события (например, "пользователь вошёл") как ERROR, из-за чего дашборд ошибок становится бесполезным (слишком много шума); логировать реальные сбои как INFO, из-за чего инцидент остаётся незамеченным; не добавлять контекст (ID запроса, пользователя) к ERROR-сообщению, что делает лог бесполезным для диагностики.