用log4j创build不同内容的多个日志文件

有没有办法configurationlog4j,以便输出不同级别的日志logging到不同的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> 

因此,所有的信息都被写入server.log; 相比之下,foo.log仅包含com.example.foo消息,包括debugging级消息。

我有这个问题,但有一个转折 – 我试图将不同的内容logging到不同的文件。 我有一个LowLeveldebugging日志和一个HighLevel用户日志的信息。 我希望LowLevel只转到一个文件,HighLevel转到一个文件和一个syslogd。

我的解决scheme是configuration3 appender,然后像这样设置日志logging:

 log4j.threshold=ALL log4j.rootLogger=,LowLogger log4j.logger.HighLevel=ALL,Syslog,HighLogger log4j.additivity.HighLevel=false 

对我来说很困难的部分是'log4j.logger'可能有多个appender列出。 我试图一次只做一行。

希望这有助于某些人!

对于主日志文件/ appender,无论logging器是否启用了DEBUG,TRACE等,设置一个.Threshold = INFO来限制appender中实际logging到INFO和上面的内容。

至于捕捉DEBUG和没有以上的东西…你可能不得不写一个自定义的appender。

不过,我build议不要这样做,因为它听起来像会使问题排查和分析非常困难:

  1. 如果你的目标是有一个文件,你可以在这里查找某些东西,那么跨日志数据跨越不同的文件就会很烦人 – 除非你有一个非常严格的日志logging策略,否则你可能需要DEBUG和INFO的内容来能够有效地跟踪有问题的代码的执行。
  2. 通过仍然logging所有的debugging消息,通过减less日志logging(方法),您将失去通常在生产系统中获得的任何性能提升。