Изменение уровня логирования root Logback программно в Java

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы хотите программно изменить уровень логирования Logback в реальном времени, для этого подойдёт следующий фрагмент кода:

Java
Скопировать код
// Устанавливаем уровень логирования корневого логгера на INFO, чтобы уменьшить количество выводимых сообщений
((LoggerContext) LoggerFactory.getILoggerFactory())
  .getLogger(Logger.ROOT_LOGGER_NAME).setLevel(Level.INFO);

Вместо Level.INFO впишите нужный вам уровень: Level.DEBUG для подробной отладки или Level.ERROR для отслеживания ошибок. Таким образом, вы сможете контролировать уровень логирования корневого логгера в Logback.

Кинга Идем в IT: пошаговый план для смены профессии

Мини-словарик

  • LoggerContext: Это ядро логирования, отвечающее за управление контекстами.
  • LoggerFactory: Фабрика для создания инстанций логгеров.
  • Logger.ROOT_LOGGER_NAME: Имя корневого логгера, настройка которого влияет на логирование в целом.
  • setLevel(Level.INFO): Метод, позволяющий устанавливать требуемый уровень логирования.

Изучение манипуляции уровнем логирования на примерах

Прямое изменение уровня логирования

Для оперативного реагирования на изменения в приложении достаточно просто обновить уровень логирования:

Java
Скопировать код
Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
rootLogger.setLevel(Level.WARN); // Ограничиваем число сообщений, отсекая "шум"

Введение конфигураций в реальном времени

Позвольте Logback регулярно сканировать файл конфигурации:

xml
Скопировать код
<configuration scan="true" scanPeriod="30 seconds">
  ...
</configuration>

Переключение уровней логирования в зависимости от событий приложения

Java
Скопировать код
if (alienInvasionDetected()) {
  rootLogger.setLevel(Level.ERROR); // Поднимаем уровень логирования при возникновении ошибки
}

Освоение продвинутых техник логирования

Контекстно-ориентированное логирование с помощью MDC

Разграничьте логи по контексту, сделав их более индивидуализированными.

Java
Скопировать код
MDC.put("userId", "PeterParker");

Тестирование логирования

Чтобы проверить, как работают логгеры, воспользуйтесь mockAppender:

Java
Скопировать код
rootLogger.addAppender(mockAppender);
// Теперь все логи будут перехвачены mockAppender
rootLogger.detachAppender(mockAppender); // Не забудьте освободить занимаемые ресурсы

Настройка Logger в Scala

В Scala конфигурирование логгера также легко и изящно:

scala
Скопировать код
import org.slf4j.LoggerFactory
import ch.qos.logback.classic.{Level, Logger}
object LoggerConfigurer {
  def setRootLevel(level: Level): Unit = {
    val rootLogger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME).asInstanceOf[Logger]
    rootLogger.setLevel(level) // Элегантная установка уровня
  }
}

Визуализация

Можно провести аналогию между изменением уровня логирования и корректировкой настроек охранника:

Markdown
Скопировать код
До: [DEBUG, INFO, WARN, ERROR]
     // Охранник пропускает всех без испытаний

Измените его настройки!

После: [INFO, WARN, ERROR]
      // Охранник становится более внимательным и допускает меньше "посетителей"

Так, логи с указанным уровнем и более важные будут зафиксированы.

Java
Скопировать код
// Реконфигурация логгера
logger.setLevel(Level.INFO); // Задаём логгеру пропускать только сообщения уровня INFO и более критичные.

Полезные материалы

  1. Программное изменение уровня логирования в Log4j2 – Stack Overflow
  2. Глава 3: Конфигурация – Logback
  3. Logger (Logback-Parent 1.3.0 API)
  4. Пример конфигурации Logback в XML – Mkyong.com
  5. Без названия
  6. Глава 3: Программная конфигурация – Logback