Настройка Logback: запись разных уровней логирования в Logback
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для того чтобы в Logback поделить логи различных уровней по разным местам вывода, следует настроить два аппендера, которые будут обрабатывать конкретные уровни логирования. Допустим, вы хотите, чтобы логи уровня INFO выводились на консоль, а логи уровня DEBUG сохранялись в файл. В этом случае каждому из аппендеров потребуется свой <filter>
. Пример подобной конфигурации:
<configuration>
<!-- Аппендер для консоли, который обрабатывает уровень INFO -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<!-- Указание кодировщика опущено -->
</appender>
<!-- Аппендер для файла, обрабатывающий уровень DEBUG -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<!-- Указание деталей кодировщика и политики ротации файлов опущено -->
</appender>
<!-- Настройка логгера -->
<logger name="com.yourpackage" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>
</configuration>
Значение name
в <logger>
следует заменить на имя вашего пакета. Таким образом, уровень INFO будет выводиться на консоль, а DEBUG будет записываться в log-файл.
Завершение
Описанная выше базовая настройка позволит разделить вывод логов уровней INFO и DEBUG. Однако на практике во многих проектах требуются более сложные схемы логирования, например, направление логов уровня ERROR в STDERR или интеграция с внешними системами вроде Slack или email. Все эти потребности можно удовлетворить с помощью Logback, который предлагает соответствующие подходы и специальные фильтры.
Разделение потоков вывода между STDOUT и STDERR
Чтобы перенаправлять логи уровня ERROR в STDERR, а логи уровня INFO — в STDOUT, следует использовать два объекта ConsoleAppender с разными значениями target
:
<appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender">
<target>System.err</target>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- Кодировщик опущен -->
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- Кодировщик опущен -->
</appender>
Установка шаблонов кодирования
Эффективное логирование начинается с правильно выбранного шаблона кодирования. Он обеспечивает единообразие форматирования выводимых сообщений:
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} – %msg%n</pattern>
</encoder>
Регулирование логирования с помощью фильтров и порогов
Создание набора фильтров и порогов позволяет управлять детализацией логирования, распределяя сообщения в соответствии с установленными критериями.
Визуализация
Настройку Logback можно интерпретировать как организацию движения на перегруженном перекрёстке. Вы расставляете светофоры (🚦) для каждого уровня логов:
🚦 INFO направляется на Консоль (🖥️)
🚦 DEBUG перенаправляется в Файл (📁)
🚦 ERROR отправляется на Уведомления (🚨)
Такая конфигурация обеспечивает чёткий и упорядоченный поток данных в системе логирования.
Учёт контекста в масштабных проектах
В крупномасштабных проектах важно учитывать контекст логирования для различных частей приложения. Это реализуется с помощью параметра ContextName:
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<contextName>myAppName</contextName>
<!-- Здесь идут настройки аппендеров -->
</configuration>
Использование Groovy для гибкой настройки
Вместо XML Logback позволяет использовать Groovy для более гибкой и динамичной настройки, адаптируемой под различные условия рабочей среды.
Внутренний статус для диагностики проблем
Logback способен предоставлять информацию о своём внутреннем состоянии, что бывает критически важно при отладке конфигурации:
<configuration>
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
<!-- Продолжение конфигурации -->
</configuration>
Полезные материалы
Вот список полезных источников для более глубокого изучения и расширения знаний о Logback: от основ конфигурации до создания пользовательских аппендеров и эффективной работы с фильтрами.