使用类别时在log4j中配置多个日志文件

时间:2010-01-12 16:47:07

标签: log4j

以下是我要做的事情:我想要2个日志文件:第一个为应用程序的所有部分记录INFO级别,然后记录DEBUG和一些软件包。第二个只在所有包中记录ERROR和up。我敢肯定这可能是微不足道的,但我无法弄明白。这是我目前使用的配置文件:

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个记录器,如kdgregory在其评论(Different log4j layout for debug and error?)中链接的帖子中所述。那里的人似乎认为这是一个坏主意,但没有人解释过为什么。它似乎有点hacky但它​​做我们需要的。不使用该方法的主要原因是什么(除了必须维护2个不同的记录器)?

1 个答案:

答案 0 :(得分:9)

这是我最终提出的诀窍:

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个日志,其中一个记录Warn或更高版本的所有内容以及DEBUG或更高版本,并且在标准日志的指定包上以及ERROR及更高版本中仅记录错误日志的所有包。