【问题标题】:How to prevent log4j logs from being redirected to root logger如何防止 log4j 日志被重定向到根记录器
【发布时间】:2013-10-02 00:23:45
【问题描述】:

我只定义了两个记录器:一个是根记录器,另一个是普通记录器。 我认为普通记录器成为根记录器的直接子级,对吗? 如果是,那么如何防止 common logger 的 appender 打印的日志冒泡到 root logger 的 appender?

根据文档:

但是,如果记录器 C 的祖先说 P,则设置了可加性标志 为 false,则 C 的输出将被定向到 C 中的所有 appender 及其祖先直到并包括 P 但不包括任何 P的祖先。

表示加性设置为 false 的记录器将使其所有日志冒泡到 它的父级但不高于此。我说的对吗?

如果是,那么设置我的通用记录器的可加性标志将无济于事(实际上它没有:))并且日志仍会打印到通用记录器和根记录器。如何预防?

【问题讨论】:

  • 你用的是什么服务器?
  • 我正在使用 Tomcat,特别是 tomcat 7
  • 我帮不了你...但也许你可以在 serverFault 询问。对不起。

标签: java logging log4j


【解决方案1】:

有了这个配置

<appender name="a2" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="common %m%n" />
    </layout>
</appender>
<appender name="a1" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="root %m%n" />
    </layout>
</appender>
<logger name="common" additivity="false">
    <appender-ref ref="a2" />
</logger>
<root>
    <priority value="debug" />
    <appender-ref ref="a1" />
</root>

这个

Logger.getLogger("common").debug("1111");

打印

common 1111

【讨论】:

  • 我猜你的配置转换为以下 .property 配置:#root logger config starts log4j.rootLogger=DEBUG, a1 log4j.appender.a1=org.apache.log4j.ConsoleAppender log4j.appender.a1。 layout=org.apache.log4j.PatternLayout log4j.appender.a1.layout.ConversionPattern=%p %t %c - %m%n # 根配置记录器结束 #common 记录器配置开始 log4j.logger.common=a2 log4j.appender .a2=org.apache.log4j.ConsoleAppender log4j.additivity.a2=false log4j.appender.a2.layout=org.apache.log4j.PatternLayout log4j.appender.a2.layout.ConversionPattern=[%x]%p %t %c - %m%n
  • 我有类似的配置,除了我使用了文件附加程序并且在两个记录器上都将日志级别(优先级)设置为 INFO。 Hoeever,它不起作用。它打印到两个文件
  • 对不起@Evgeniy Dorofeev 它有效。我的配置有一个小错误。我在可加性标志之后使用附加程序名称而不是使用记录器的名称
【解决方案2】:
#root logger config starts
log4j.rootLogger=INFO, RA
log4j.appender.RA=org.apache.log4j.RollingFileAppender
log4j.appender.RA.File=/Data/var/logs/root.log
log4j.appender.RA.MaxFileSize=100KB
# Keep one backup file
log4j.appender.RA.MaxBackupIndex=1
log4j.appender.RA.layout=org.apache.log4j.PatternLayout
log4j.appender.RA.layout.ConversionPattern=%p %d - %m%n
# root config logger ends

#ico common logger config starts
log4j.logger.com=INFO, COMMONA
log4j.appender.COMMONA=org.apache.log4j.RollingFileAppender
log4j.additivity.com=false
log4j.appender.COMMONA.File=/Data/var/logs/common_ico.log
log4j.appender.COMMONA.MaxFileSize=100KB
# Keep one backup file
log4j.appender.COMMONA.MaxBackupIndex=1
log4j.appender.COMMONA.layout=org.apache.log4j.PatternLayout
log4j.appender.COMMONA.layout.ConversionPattern=[%x]%p %d - %m%n
#ico common logger config ends

以上配置有效。我使用的是log4j.additivity.COMMONA=false 而不是log4j.additivity.com=false

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2011-01-08
    • 2016-02-26
    • 2014-06-08
    相关资源
    最近更新 更多