2010-01-12 41 views
3

以下是我想要做的事情:我想要2个日志文件:第一个日志INFO级别和应用程序的所有部分,同时还记录DEBUG和一些软件包。第二个只记录错误和所有包。我相信这可能是微不足道的,但我无法弄清楚。这里是我目前使用的配置文件:在使用类别时在log4j中配置多个日志文件

log4j.rootLogger=INFO,console,R 

#console appender 
log4j.appender.console = org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout = org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern = %t %-5p %c{2} - %m%n 

#file appender 
log4j.appender.R = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.R.DatePattern = '.'yyyy-MM-dd 
log4j.appender.R.File = log/log.txt 
log4j.appender.R.layout = org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern = [%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n 

#Specific log levels 
log4j.category.com.mypackage1=DEBUG 
log4j.category.com.mypackage2=DEBUG 

显然没有错误日志部分。我的基本想法是添加另一个appender,并将其日志级别设置为ERROR,但类别似乎覆盖它和他们的信息,这不是我想要的。他们之所以这样做,是因为其他软件包转储了大量我们在调试时不需要的信息,这就是我们如何解决这个问题。我在想这可能是一个更好的整体方法,但这是我的第一个log4j配置文件。

更新:一名同事建议使用2个伐木工人,因为在他的评论(Different log4j layout for debug and error?)中kdgregory链接到的帖子中提到。那里的人们似乎认为这是一个坏主意,但没有人解释过为什么。它看起来有点冒险,但它做我们需要的。不使用该方法的主要原因是什么(除了需要维护2个不同的记录器)?

+0

这个问题可能会帮助你(不确定它是否符合“完全重复”的条件):http://stackoverflow.com/questions/1008122/different-log4j-layout-for-debug-and-error – kdgregory 2010-01-12 17:01:59

回答

8

这里是我最终来到了该诀窍:

log4j.rootLogger=INFO,console,stdLog,errorLog 

#console appender 
log4j.appender.console = org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout = org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern = %t %-5p %c{2} - %m%n 

#file appender 
log4j.appender.stdLog=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.stdLog.DatePattern = '.'yyyy-MM-dd 
log4j.appender.stdLog.File = log/log.txt 
log4j.appender.stdLog.layout = org.apache.log4j.PatternLayout 
log4j.appender.stdLog.layout.ConversionPattern = [%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n 

#file appender 
log4j.appender.errorLog = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.errorLog.DatePattern = '.'yyyy-MM-dd 
log4j.appender.errorLog.File = log/errorlog.txt 
log4j.appender.errorLog.layout = org.apache.log4j.PatternLayout 
log4j.appender.errorLog.layout.ConversionPattern = [%d{ISO8601}]%5p%6.6r[%t]%x(%F:%L) - %m%n 
log4j.appender.errorLog.Threshold=ERROR 

#Specific log levels 
log4j.category.com.mypackage1=DEBUG 
log4j.category.com.mypackage2=DEBUG 

这使得2的对数,其中一个在警告或以上,加上其DEBUG或以上的标准日志指定的包记录一切并且仅在错误日志中的所有软件包处于ERROR及更高版本。

相关问题