如果您遵循记录器的命名约定,这将在 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>
路由
下面的示例显示了如何根据执行日志记录的类的包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>