Зачем в логировании существуют уровни вроде DEBUG и ERROR?
- Какие уровни логирования бывают?
- Что нельзя писать в логи?
- Зачем нужен 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?
- Чем лог отличается от метрики?
Разбор темы
- Тестирование, логирование и базовые паттерны
Unit/integration тесты, уровни логирования, MDC и Singleton без ловушек.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.