有没有一种方法可以配置log4j,使其将不同级别的日志输出到不同的appender中?
我正在尝试设置多个日志文件。主要的日志文件将捕获所有类的INFO及以上消息。(在开发中,它将捕获所有DEBUG及以上消息,并针对特定类捕获TRACE消息)。
然后,我想要一个单独的日志文件。该日志文件将捕获特定子集类的所有DEBUG消息,并忽略任何其他类的消息。
是否有办法实现我的要求?
以下内容可以帮助你入门:
log4j.rootLogger=QuietAppender, LoudAppender, TRACE
# setup A1
log4j.appender.QuietAppender=org.apache.log4j.RollingFileAppender
log4j.appender.QuietAppender.Threshold=INFO
log4j.appender.QuietAppender.File=quiet.log
...
# setup A2
log4j.appender.LoudAppender=org.apache.log4j.RollingFileAppender
log4j.appender.LoudAppender.Threshold=DEBUG
log4j.appender.LoudAppender.File=loud.log
...
log4j.logger.com.yourpackage.yourclazz=TRACE
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- general application log -->
<appender name="MainLogFile" class="org.apache.log4j.FileAppender">
<param name="File" value="server.log" />
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
</layout>
</appender>
<!-- additional fooSystem logging -->
<appender name="FooLogFile" class="org.apache.log4j.FileAppender">
<param name="File" value="foo.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
</layout>
</appender>
<!-- foo logging -->
<logger name="com.example.foo">
<level value="DEBUG"/>
<appender-ref ref="FooLogFile"/>
</logger>
<!-- default logging -->
<root>
<level value="INFO"/>
<appender-ref ref="MainLogFile"/>
</root>
</log4j:configuration>
log4j.threshold=ALL
log4j.rootLogger=,LowLogger
log4j.logger.HighLevel=ALL,Syslog,HighLogger
log4j.additivity.HighLevel=false
对我来说难以理解的部分是'log4j.logger'可以列出多个附加器。我一直试图一行一行地完成它。
希望这能在某个时候帮助到某个人!
.Threshold = INFO
,以将实际记录在附加程序中的内容限制为INFO及以上,无论记录器是否启用了DEBUG、TRACE等。演示链接: https://github.com/RazvanSebastian/spring_multiple_log_files_demo.git
我的解决方案基于使用 spring-boot-starter-log4j
的 XML 配置。这个示例是一个基本的例子,使用了 spring-boot-starter
,并且两个记录器将日志写入不同的日志文件。