Вопрос с собеседования · Java

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

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

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

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

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

Подробно

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

  • 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 как фасад — плюс.

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

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

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

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

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

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования