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

Rya*_*ins 3 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
Run Code Online (Sandbox Code Playgroud)

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

更新:一位同事建议使用2个记录器,如kdgregory在他的评论中链接的帖子中所述(不同的log4j布局用于调试和错误?).那里的人似乎认为这是一个坏主意,但没有人解释过为什么.它似乎有点hacky但它​​做我们需要的.不使用该方法的主要原因是什么(除了必须维护2个不同的记录器)?

Rya*_*ins 10

这是我最终提出的诀窍:

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
Run Code Online (Sandbox Code Playgroud)

这将生成2个日志,其中一个日志记录Warn或更高版本的所有内容以及DEBUG或更高版本的标准日志和ERROR及更高版本的所有软件包中的错误日志.