有没有办法配置log4j,以便它输出不同级别的日志记录到不同的appender?
我正在尝试设置多个日志文件。主日志文件将捕获所有类的所有INFO及以上消息。 (在开发过程中,它会捕获所有DEBUG及以上的消息,以及特定类的TRACE。)
然后,我想有一个单独的日志文件。该日志文件将捕获特定类的子集的所有DEBUG消息,并忽略任何其他类的所有消息。
有没有办法让我得到的东西?
谢谢, 丹
答案 0 :(得分:70)
这应该让你开始:
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
答案 1 :(得分:26)
也许是这样的?
<!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>
因此,所有信息消息都写入server.log;相比之下,foo.log只包含com.example.foo消息,包括调试级消息。
答案 2 :(得分:7)
我有这个问题,但有一点麻烦 - 我试图将不同的内容记录到不同的文件中。我有一个LowLevel调试日志和HighLevel用户日志的信息。我希望LowLevel只能转到一个文件,HighLevel转到一个文件和一个syslogd。
我的解决方案是配置3个appender,然后像这样设置日志记录:
log4j.threshold=ALL
log4j.rootLogger=,LowLogger
log4j.logger.HighLevel=ALL,Syslog,HighLogger
log4j.additivity.HighLevel=false
我难以弄清楚的部分是'log4j.logger'可以列出多个appender。我试图一次做一行。
希望这会在某些时候帮助某人!
答案 3 :(得分:3)
对于主日志文件/ appender,设置.Threshold = INFO
以限制appender中实际记录到INFO及以上的内容,无论记录器是否启用了DEBUG,TRACE等。
至于捕捉DEBUG而且没有任何东西......你可能不得不写一个自定义的appender。
但是我建议不要这样做,因为它听起来很难进行故障排除和分析:
答案 4 :(得分:0)
演示链接:https://github.com/RazvanSebastian/spring_multiple_log_files_demo.git
我的解决方案基于使用spring-boot-starter-log4j
的XML配置。该示例是使用spring-boot-starter
的基本示例,两个Logger将写入不同的日志文件。