如何使用同一个记录器记录不同级别的日志到控制台和日志文件?

7

我有一个log4j记录器,目前将日志同时写入控制台和文件,这很好用。

以后我想将其配置为将INFO + ERROR记录到日志文件中,但仅在控制台上显示ERROR。我需要更改哪些内容才能实现这一点?

log4j.rootLogger=INFO, console, MyFileAppender

log4j.logger.org.apache.cxf=INFO, console
log4j.logger.org.apache.cxf.interceptor.LoggingInInterceptor=INFO, console
log4j.logger.org.apache.cxf.interceptor.LoggingOutInterceptor=INFO, console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out

log4j.appender.MyFileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.MyFileAppender.Append=true
log4j.appender.MyFileAppender.File=c:/logs.log

另外,我希望防止CXF XML请求被记录在文件中。但我仍然希望它们在控制台中显示。怎么做?


尝试将 log4j.logger.org.apache.cxf=INFO, console 更改为 log4j.logger.org.apache.cxf=WARN, MyFileAppender,我认为 rootLogger 自动在两个 appender 上记录所有 INFO 级别的日志。您可以在包级别上覆盖它。 - arajashe
2个回答

10

基于Appender的配置

每个Appender的日志级别需要单独配置,除非与根级别配置相同。下面的log4.properties文件示例将INFO及以上级别的日志记录到控制台,但只将ERROR及以上级别的日志记录到文件中。

log4j.appender.[appender-name].Threshold=[Level]

请看下面这个示例的最后一行(来自"如何将log4j集成到你的Java项目中")。

# root level configurations 
log4j.rootLogger=INFO,console,file   

# configuration for console outputs  
log4j.appender.console=org.apache.log4j.ConsoleAppender  
log4j.appender.console.layout=org.apache.log4j.PatternLayout  

# configuration for file output (into a file named messages.log)  
log4j.appender.file=org.apache.log4j.RollingFileAppender  
log4j.appender.file.File=messages.log  
log4j.appender.file.layout=org.apache.log4j.PatternLayout 

# threshold for file output 
log4j.appender.file.Threshold=ERROR

基于包的日志级别

以下任何一种都会有所帮助。

log4j.logger.[package]=[Level]
log4j.logger.[package]=[Level], [Appender]

作为一个例子:

log4j.logger.org.apache.cxf=INFO, console

4
根据这个 SO 问题(以及它的答案),您需要在附加器上设置一个阈值:
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=ERROR

log4j.appender.MyFileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.MyFileAppender.Append=true
log4j.appender.MyFileAppender.File=c:/logs.log
log4j.appender.MyFileAppender.Threshold=INFO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接