Получить доступ

Зачем в логировании существуют уровни вроде DEBUG и ERROR?

JuniorТестирование и логирование
Ещё спрашивают так:
  • Какие уровни логирования бывают?
  • Что нельзя писать в логи?
  • Зачем нужен SLF4J?
  • Что описывают уровни логирования TRACE/DEBUG/INFO/WARN/ERROR?
Коротко

Уровни нужны, чтобы фильтровать записи по важности: в продакшене — только значимое, подробности — для отладки.

  • TRACE, DEBUG — диагностика; INFO — штатные события; WARN — подозрительное; ERROR — сбой
  • Порог меняется настройкой, без правки кода

А ещё В логи не пишут пароли, токены, персональные данные; параметры — через {}, а не конкатенацией

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

  • TRACE и DEBUG — подробности для разработки и разбора;
  • INFO — значимые штатные события: сервис запустился, заказ создан;
  • WARN — подозрительная ситуация, которая пока не сбой: повтор запроса, медленный ответ;
  • ERROR — сбой, требующий внимания, обычно со стектрейсом.

Порог задаётся в конфигурации логгера: в продакшене — INFO или WARN, при разборе инцидента можно временно включить DEBUG для одного пакета.

Практика:

  • SLF4J — фасад, за которым стоит реализация (Logback, Log4j 2): код не зависит от конкретной библиотеки;
  • параметры — через плейсхолдеры: log.debug("user {} loaded", id) — строка не собирается, если уровень выключен;
  • никаких секретов и персональных данных: пароли, токены, номера карт, полные персональные данные;
  • структурированные логи (JSON) и идентификатор запроса (MDC) помогают искать по системе логов.

Пример

private static final Logger log = LoggerFactory.getLogger(OrderService.class);

log.info("order {} created for user {}", order.id(), user.id());
log.warn("payment retry {} for order {}", attempt, order.id());
log.error("payment failed for order {}", order.id(), e);

Что хотят услышать

  • Назначение уровней и их шкала.
  • Порог в конфигурации без правки кода.
  • Плейсхолдеры и запрет на секреты в логах.
  • SLF4J как фасад — плюс.

Частые ошибки

  • Логировать всё подряд на уровне ошибки.
  • Записывать в лог секреты и персональные данные.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Чтобы фильтровать записи по важности: в production включают только значимые, а подробные оставляют для отладки
  • ✗Чтобы распределять записи по разным файлам автоматически
  • ✗Чтобы задавать приоритет выполнения кода
  • ✗Чтобы шифровать наиболее важные записи

Что спросят дальше

  • Почему сообщения собирают через плейсхолдеры, а не конкатенацией?
  • Что обязательно должно быть в записи для расследования инцидента?
  • Что такое MDC?
  • Чем лог отличается от метрики?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем