這會自動在Log4j的,如果你遵循記錄器的命名約定的工作。在代碼中,聲明記錄儀與他們的類名:
Logger logger = LogManager.getLogger(MyClass.class);
該記錄儀自動分配的名稱fully.qualified.class.name.of.MyClass
。現在,在你的配置,你可以使用這個完全限定域名(或包名稱或包的第一部分)做過濾和路由:
過濾
下面的例子說明如何過濾日誌基於類的包進行日誌記錄的事件:包com.other.company
中的所有DEBUG和TRACE級日誌事件將被忽略,並且對於包中的類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>
路由
下面的例子說明了如何將日誌事件,以單獨的日誌根據包裝上的類做日誌的文件:在包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>