Настройка Logback: разделение логов по файлам в Java

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

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

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

Если вы хотите разделять лог-сообщения по разным файлам при использовании Logback, то стоит настроить несколько аппендеров и логгеров в файле logback.xml. Каждый аппендер будет отвечать за запись логов в отдельный файл. Привязывая аппендеры к определённым классам, вы достигнете разделения логов. Вот пример такого конфигурационного файла:

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" на имя пакета в вашем приложении.

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

Избавляемся от дублирования логов с помощью ненаследуемых логгеров

Дублирование файла логов — плохая практика, особенно когда дело касается логов программ. Чтобы избежать попадания системных событий в глобальный логгер, установите атрибут additivity в значение false.

xml
Скопировать код
<logger name="com.app.First" additivity="false"> <!-- Скажем "нет" дублированию! -->
  <appender-ref ref="FILE_1" />
</logger>

Управляем большими объёмами логов с помощью RollingFileAppender

RollingFileAppender — ваш вспомогательный инструмент в управлении большим объемом лог-файлов, предотвращая их нерегулируемое увеличение.

Уровни логирования для настройки вывода информации

Настройте индивидуальные уровни логирования для каждого логгера, чтобы регулировать количество выводимых сообщений.

xml
Скопировать код
<logger name="com.app.debug" level="debug"> <!-- Больше деталей для разработчиков -->
  ...
</logger>
<logger name="com.app.error" level="error"> <!-- Только критические ошибки -->
  ...
</logger>

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

Допустим, вы работаете в офисе и у вас есть два ящика:

Ящик 1 (🗂 A): Для регулярных отчётов Ящик 2 (🗂 B): Для срочной информации

Ориганизация Logback подобна помощнику (🤖), который тщательно распределяет записи по крайне важным категориям:

properties
Скопировать код
logback.xml

📃 Рядовые сообщения ➡️ 🗂 A
📈 Сообщения об ошибках ➡️ 🗂 B

Адекватное распределение сообщений облегчает поиск необходимой информации.

Конфигурим шаблоны codecs

Дайте логам более изысканный вид, добавив в них временные метки, уровни логирования и названия классов при помощи encoder.

xml
Скопировать код
<encoder>
  <pattern>%d{"HH:mm:ss.SSS"} [%thread] %-5level %logger{36} – %msg%n</pattern> <!-- Больше информации для анализа! -->
</encoder>

Общие логгеры позволяют поддерживать порядок и согласованность

Группируйте классы по тематике и используйте общие логгеры для лучшей организации и поддержания стандартов разработки.

Логирование на уровне класса

Используйте директиву <appender-ref>, чтобы назначить логи конкретному аппендеру и управлять этими логами сразу после их создания.

Давайте логгерам осмысленные имена

Называйте логгеры так, чтобы была понятна их принадлежность к определённой части кода.

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

  1. Глава 3: Конфигурация — Обзор основных концепций настройки Logback.
  2. Глава 4: Аппендеры — Рассмотрение различных типов аппендеров и советы по их использованию.
  3. Глава 7: Фильтры — Продвинутое руководство по управлению логами с помощью фильтров Logback.
  4. FAQ Logback — Ответы на часто задаваемые вопросы по работе с Logback.
  5. Глава 4: Аппендеры – SiftingAppender — Как динамически разделить логи с помощью SiftingAppender.
  6. DZone – Лучшие практики логирования — Зачем соблюдать лучшие практики в области логирования.