junior
Какие уровни логирования существуют?
Уровни логирования — это иерархия важности сообщений, позволяющая фильтровать вывод. Установка уровня INFO означает, что логируются INFO, WARN и ERROR, а TRACE и DEBUG отбрасываются.
Стандартные уровни (SLF4J / Logback)
От наименее до наиболее критичного:
| Уровень | Назначение | Пример | Когда включать |
|---|---|---|---|
| TRACE | Максимально детальная трассировка | Входящие/исходящие параметры каждого метода | Только при глубокой отладке |
| DEBUG | Диагностическая информация | SQL-запросы, состояние кэша, промежуточные вычисления | Разработка, диагностика в production |
| INFO | Значимые события нормальной работы | Запуск сервиса, подключение к БД, обработка запроса | Всегда в production |
| WARN | Потенциальная проблема, не мешающая работе | Устаревший API, fallback на default, retry | Всегда |
| ERROR | Ошибка, требующая внимания | Недоступен внешний сервис, неожиданное исключение | Всегда |
Иерархия фильтрации
Пример
TRACE < DEBUG < INFO < WARN < ERROR
В production стандартный уровень — INFO. DEBUG и TRACE включаются временно для диагностики конкретных проблем.
Пример использования уровней
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OrderService {
private static final Logger log = LoggerFactory.getLogger(OrderService.class);
public void processOrder(Order order) {
log.trace("Вход в processOrder, order={}", order);
log.debug("Обработка заказа: {}", order.getId());
try {
// бизнес-логика
log.info("Заказ {} успешно обработан", order.getId());
} catch (TemporaryException e) {
log.warn("Временная ошибка при обработке заказа {}, retry", order.getId(), e);
} catch (Exception e) {
log.error("Ошибка обработки заказа {}", order.getId(), e);
}
}
}
Правила выбора уровня
- ERROR — ситуация требует реакции (алерт), что-то сломалось
- WARN — потенциальная проблема, система справилась сама (retry, fallback)
- INFO — нормальное бизнес-событие, полезное для понимания поведения системы
- DEBUG — информация для разработчика при отладке
- TRACE — пошаговая трассировка для глубокой диагностики
Частые ошибки
- Все на уровне INFO — теряется возможность фильтрации; DEBUG-информация засоряет production-логи
- ERROR для бизнес-ошибок — “пользователь ввёл неверный пароль” — это INFO или WARN, но не ERROR
- WARN для нормальных ситуаций — если retry всегда успешен, это штатное поведение
- Третий аргумент
log.error("msg", id, exception)— исключение, Logback автоматически выводит стек-трейс. Не используйтеexception.getMessage()
Как используется в 2026
- Spring Boot позволяет менять уровни логирования на лету через Actuator:
POST /actuator/loggers/com.example - В Kubernetes уровни можно менять через ConfigMap без перезапуска пода
На собеседовании: покажите, что понимаете разницу между WARN и ERROR. ERROR — когда нужна реакция человека или алерт. WARN — система справилась сама, но ситуация нештатная. Частая ошибка — ставить ERROR на все исключения, включая NotFoundException.