Gymterview
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.