Настройка Logback: разделение логов по файлам в Java
Быстрый ответ
Если вы хотите разделять лог-сообщения по разным файлам при использовании Logback, то стоит настроить несколько аппендеров и логгеров в файле logback.xml
. Каждый аппендер будет отвечать за запись логов в отдельный файл. Привязывая аппендеры к определённым классам, вы достигнете разделения логов. Вот пример такого конфигурационного файла:
<configuration>
<appender name="FILE_1" class="ch.qos.logback.core.FileAppender">
<file>first.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<appender name="FILE_2" class="ch.qos.logback.core.FileAppender">
<file>second.log</file>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<logger name="com.app.First" level="info">
<appender-ref ref="FILE_1" />
</logger>
<logger name="com.app.Second" level="info">
<appender-ref ref="FILE_2" />
</logger>
</configuration>
Логи класса com.app.First
запишутся в файл first.log
, а логи класса com.app.Second
— в second.log
. Основательно замените "com.app" на имя пакета в вашем приложении.
Избавляемся от дублирования логов с помощью ненаследуемых логгеров
Дублирование файла логов — плохая практика, особенно когда дело касается логов программ. Чтобы избежать попадания системных событий в глобальный логгер, установите атрибут additivity
в значение false
.
<logger name="com.app.First" additivity="false"> <!-- Скажем "нет" дублированию! -->
<appender-ref ref="FILE_1" />
</logger>
Управляем большими объёмами логов с помощью RollingFileAppender
RollingFileAppender
— ваш вспомогательный инструмент в управлении большим объемом лог-файлов, предотвращая их нерегулируемое увеличение.
Уровни логирования для настройки вывода информации
Настройте индивидуальные уровни логирования для каждого логгера, чтобы регулировать количество выводимых сообщений.
<logger name="com.app.debug" level="debug"> <!-- Больше деталей для разработчиков -->
...
</logger>
<logger name="com.app.error" level="error"> <!-- Только критические ошибки -->
...
</logger>
Визуализация
Допустим, вы работаете в офисе и у вас есть два ящика:
Ящик 1 (🗂 A): Для регулярных отчётов Ящик 2 (🗂 B): Для срочной информации
Ориганизация Logback подобна помощнику (🤖), который тщательно распределяет записи по крайне важным категориям:
logback.xml
📃 Рядовые сообщения ➡️ 🗂 A
📈 Сообщения об ошибках ➡️ 🗂 B
Адекватное распределение сообщений облегчает поиск необходимой информации.
Конфигурим шаблоны codecs
Дайте логам более изысканный вид, добавив в них временные метки, уровни логирования и названия классов при помощи encoder
.
<encoder>
<pattern>%d{"HH:mm:ss.SSS"} [%thread] %-5level %logger{36} – %msg%n</pattern> <!-- Больше информации для анализа! -->
</encoder>
Общие логгеры позволяют поддерживать порядок и согласованность
Группируйте классы по тематике и используйте общие логгеры для лучшей организации и поддержания стандартов разработки.
Логирование на уровне класса
Используйте директиву <appender-ref>
, чтобы назначить логи конкретному аппендеру и управлять этими логами сразу после их создания.
Давайте логгерам осмысленные имена
Называйте логгеры так, чтобы была понятна их принадлежность к определённой части кода.
Полезные материалы
- Глава 3: Конфигурация — Обзор основных концепций настройки Logback.
- Глава 4: Аппендеры — Рассмотрение различных типов аппендеров и советы по их использованию.
- Глава 7: Фильтры — Продвинутое руководство по управлению логами с помощью фильтров Logback.
- FAQ Logback — Ответы на часто задаваемые вопросы по работе с Logback.
- Глава 4: Аппендеры – SiftingAppender — Как динамически разделить логи с помощью SiftingAppender.
- DZone – Лучшие практики логирования — Зачем соблюдать лучшие практики в области логирования.