Настройка log4j: вывод логов конкретного класса в файл
Быстрый ответ
Для перенаправления логов конкретного класса в отдельный файл с помощью log4j нужно настроить логгер с полным наименованием класса и связать его с указанным файлом. Для примера что это может выглядеть так в файле log4j.properties
:
# В log4j Appenders выполняют функцию доставки ваших логов.
log4j.appender.CUSTOM=org.apache.log4j.FileAppender
log4j.appender.CUSTOM.File=particular.log
# Логгер контролирует логи вашего класса аналогично тому, как Бэтмен следит за Готэмом.
log4j.logger.com.yoursite.YourClass=INFO, CUSTOM
# Логгер не должен отображать повторяющиеся сообщения, поэтому стоит отключить additivity.
log4j.additivity.com.yoursite.YourClass=false
Здесь CUSTOM
— это название вашего Appender'а, com.yoursite.YourClass
— полное имя целевого класса. В итоге логи из YourClass
будут записываться только в файл particular.log
.
Организация логгеров и файлов
Настройки логгеров и файлов для организации логирования можно структурировать в конфигурационном файле log4j
, представив их в XML-формате для удобства чтения:
<!-- Корректная перенаправление логов в файлы с помощью log4j сводится к управлению логами, как Человек-паук пользуется паутиной между зданиями. -->
<appender name="FileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="specific.log"/>
<param name="MaxFileSize" value="10MB"/>
<param name="MaxBackupIndex" value="5"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n"/>
</layout>
</appender>
<!-- Логгеры — это аналог джарвиса, который осуществляет сортировку и контроль логов. -->
<logger name="com.yoursite.YourClass" additivity="false">
<level value="INFO"/>
<appender-ref ref="FileAppender"/>
</logger>
Применение правильной политики логирования
Сформулируйте политику логирования, чтобы избежать переполнения жёсткого диска. Быть может, вы захотите использовать TimeBasedTriggeringPolicy и стратегии для автоматического удаления устаревших записей.
Как улучшить и использовать логи
Регулируйте уровни логирования, чтобы увеличить информативность логов и сделать фильтрацию ненужной информации более эффективной. Разделите категории логов по классам и пакетам для более удобной отладки.
Визуализация
Настройка Log4j напоминает настройку радиоприёмника на ваш любимый канал логирования. Если классы настроены на разные «частоты» (файлы и уровни логгера), это поможет вам оставаться «на волне» логов:
// 🎵 Входим на нужную волну...
log4j.logger.SpecificClass=DEBUG, AppenderFM984
log4j.appender.AppenderFM984=org.apache.log4j.FileAppender
log4j.appender.AppenderFM984.File=specific.log
Такой подход позволит вам легко «вылавливать» необходимую информацию из разных «волн» логов.
Улучшение функционала логирования
Использование свойства log4j.logger
Установка связи логгера с классом через свойство log4j.logger позволяет точно организовывать логи, генерируемые каждым классом.
Противодействие дублированию логов
Свойство additivity ключевым образом помогает предотвратить дублирование логов и гарантирует уникальность каждой записи.
Консистентное форматирование логов
Используйте формат ConversionPattern для консистентной и чёткой записи информации в логах. Это обеспечит порядок и упрощает анализ данных.
Эффективное использование LogManager
Метод LogManager.getLogger()
позволяет создавать специализированные логгеры в процессе работы программы, что дает возможность динамически управлять различными типами логов без нарушения общих принципов настройки.
Полезные материалы
- Log4j – Конфигурирование Log4j 2 — официальное руководство по настройке Log4j 2.
- Log4j – Appenders Log4j 2 — детализированная документация по Appenders в Log4j 2.
- DZone: Детальное управление логами с Log4j 2 — стратегии для детального контроля логов в Log4j 2.
- Log4j2 Пример обучающего руководства – Конфигурация, уровни, Appenders — практическое руководство по использованию Log4j 2.