Изменение уровня логирования 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 и более критичные.