Это работает автоматически в Log4j, если вы будете следовать соглашению об именах для лесорубов. В своем коде, объявить лесорубов с их именем класса:
Logger logger = LogManager.getLogger(MyClass.class);
Регистратор автоматически присваивается имя fully.qualified.class.name.of.MyClass
. Теперь в вашей конфигурации вы можете использовать это полное имя (или имя пакета или первую часть пакета), чтобы сделать фильтрацию и маршрутизации:
Фильтрация
Ниже пример показывает, как фильтровать журнал события, основанные на пакете класса, выполняющего ведение журнала: все события журнала уровня DEBUG и TRACE по классам в пакете com.other.company
будут проигнорированы, а для классов в пакете com.another.project
будут включены только протоколы ERROR и FATAL.
<Configuration status="warn">
<Appenders>
<File name="MyFile" fileName="logs/my.log">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
</File>
</Appenders>
<Loggers>
<!-- drops all DEBUG and TRACE logging done by any class in this package -->
<Logger name="com.other.company" level="INFO" />
<!-- log only ERROR and FATAL logging by classes in this package -->
<Logger name="com.another.project" level="ERROR" />
<!-- by default, all log events are written to MyFile -->
<Root level="trace">
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
Routing
Ниже пример показывает, как маршрутизировать события для разделения файлов на основе пакета класса, выполняющего ведение журнала журнала журнал: все протоколирование по классам в пакете com.other.company
не будет записана my.log
только other.log
.
<Configuration status="warn">
<Appenders>
<File name="MyFile" fileName="logs/my.log">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
</File>
<File name="OtherFile" fileName="logs/other.log">
<PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
</File>
</Appenders>
<Loggers>
<!-- all logging from this package and subpackages goes to OtherFile -->
<!-- Note: set additivity=false or logging will also go to the root logger -->
<Logger name="com.other.company" additivity="false">
<AppenderRef ref="OtherFile"/>
</Logger>
<Root level="trace">
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>