Изменение уровня логирования root Logback программно в Java
Быстрый ответ
Если вы хотите программно изменить уровень логирования Logback в реальном времени, для этого подойдёт следующий фрагмент кода:
// Устанавливаем уровень логирования корневого логгера на INFO, чтобы уменьшить количество выводимых сообщений
((LoggerContext) LoggerFactory.getILoggerFactory())
  .getLogger(Logger.ROOT_LOGGER_NAME).setLevel(Level.INFO);
Вместо Level.INFO впишите нужный вам уровень: Level.DEBUG для подробной отладки или Level.ERROR для отслеживания ошибок. Таким образом, вы сможете контролировать уровень логирования корневого логгера в Logback.

Мини-словарик
- LoggerContext: Это ядро логирования, отвечающее за управление контекстами.
- LoggerFactory: Фабрика для создания инстанций логгеров.
- Logger.ROOT_LOGGER_NAME: Имя корневого логгера, настройка которого влияет на логирование в целом.
- setLevel(Level.INFO): Метод, позволяющий устанавливать требуемый уровень логирования.
Изучение манипуляции уровнем логирования на примерах
Прямое изменение уровня логирования
Для оперативного реагирования на изменения в приложении достаточно просто обновить уровень логирования:
Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
rootLogger.setLevel(Level.WARN); // Ограничиваем число сообщений, отсекая "шум"
Введение конфигураций в реальном времени
Позвольте Logback регулярно сканировать файл конфигурации:
<configuration scan="true" scanPeriod="30 seconds">
  ...
</configuration>
Переключение уровней логирования в зависимости от событий приложения
if (alienInvasionDetected()) {
  rootLogger.setLevel(Level.ERROR); // Поднимаем уровень логирования при возникновении ошибки
}
Освоение продвинутых техник логирования
Контекстно-ориентированное логирование с помощью MDC
Разграничьте логи по контексту, сделав их более индивидуализированными.
MDC.put("userId", "PeterParker");
Тестирование логирования
Чтобы проверить, как работают логгеры, воспользуйтесь mockAppender:
rootLogger.addAppender(mockAppender);
// Теперь все логи будут перехвачены mockAppender
rootLogger.detachAppender(mockAppender); // Не забудьте освободить занимаемые ресурсы
Настройка Logger в 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) // Элегантная установка уровня
  }
}
Визуализация
Можно провести аналогию между изменением уровня логирования и корректировкой настроек охранника:
До: [DEBUG, INFO, WARN, ERROR]
     // Охранник пропускает всех без испытаний
Измените его настройки!
После: [INFO, WARN, ERROR]
      // Охранник становится более внимательным и допускает меньше "посетителей"
Так, логи с указанным уровнем и более важные будут зафиксированы.
// Реконфигурация логгера
logger.setLevel(Level.INFO); // Задаём логгеру пропускать только сообщения уровня INFO и более критичные.


