如何配置 log4j 以忽略层次结构记录器

Posted

技术标签:

【中文标题】如何配置 log4j 以忽略层次结构记录器【英文标题】:how to configure log4j to ignore hierarchy loggers 【发布时间】:2014-03-17 14:41:20 【问题描述】:

我有一个带有两个记录器和两个特定附​​加程序的 log4j 配置文件。该文件如下所示:

log4j.rootLogger=DEBUG, CONSOLE

Logger to be used with Logger.getLogger(Class) method
log4j.logger.foo.bar=ALL, LOGFILE

Logger to be used with Logger.getLogger(String) method
log4j.logger.foo.bar.dummy.pack.XML=ERROR, LOGERRORXML

log4j.appender.LOGERRORXML=org.apache.log4j.RollingFileAppender
log4j.appender.LOGERRORXML.append=true
log4j.appender.LOGERRORXML.encoding=UTF-8
log4j.appender.LOGERRORXML.file=Log_Error.log
log4j.appender.LOGERRORXML.MaxFileSize=52428800
log4j.appender.LOGERRORXML.MaxBackupIndex=10
log4j.appender.LOGERRORXML.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGERRORXML.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
log4j.appender.LOGERRORXML.Threshold=ERROR

log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.LOGFILE.append=true
log4j.appender.LOGFILE.encoding=UTF-8
log4j.appender.LOGFILE.file=Main_Logger.log
log4j.appender.LOGFILE.MaxFileSize=52428800
log4j.appender.LOGFILE.MaxBackupIndex=10
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
log4j.appender.LOGFILE.Threshold=ERROR

类看起来像这样

包 foo.bar.dummy.pack; 公共课 Foo 私有静态最终 Logger LOG = Logger.getLogger(Foo.class); 私有静态最终 Logger LOG_XML = Logger.getLogger(Foo.class.getPackage().getName()+".XML"); 公共静态无效主要(字符串 [] 参数) LOG.error("你好"); LOG_XML.error("世界!");

这样的结果是:

Main_Logger.log

[忽略 log4j 模式布局] 你好 [忽略 log4j 模式布局] World!

Log_Error.log

[忽略 log4j 模式布局] 世界!

我的想法只是在单独的文件中记录我想要的事件,但是当我调用记录器 LOGERRORXML 时,输出在两个文件中,我的意思是在为 LOGERRORXML appender 和 LOGFILE appender 声明的文件中,即使在我正在使用LOGERRORXML 记录器。我认为是LOGFILE logger的声明中的层次依赖。

我如何配置 log4j 以仅在特定的 appender(在本例中为文件 appender)中打印输出,而不依赖于层次结构?

【问题讨论】:

【参考方案1】:

为避免消息重复,您可能需要:

#Logger to be used with Logger.getLogger(Class) method
log4j.logger.foo.bar=ALL, LOGFILE
log4j.additivity.foo.bar=false

#Logger to be used with Logger.getLogger(String) method
log4j.logger.foo.bar.dummy.pack.XML=ERROR, LOGERRORXML
log4j.additivity.foo.bar.dummy.pack.XML=false

查看更多Log4j Tutorial: Additivity – what and why?

【讨论】:

太棒了!这正是我所需要的。谢谢!

以上是关于如何配置 log4j 以忽略层次结构记录器的主要内容,如果未能解决你的问题,请参考以下文章

log4j详解及log4j.properties配置

如何配置 jetty 7 以使用 syslog 或 log4j

log4j 日志记录层次结构顺序

如何使用 log4j2.xml 配置休眠日志记录?

以编程方式配置 Log4j 记录器

如何配置log4j2日志记录至数据库