Logback重复记录

4

我有一个与logback配置相关的问题。以下是我的logback.xml文件:

<configuration>

<appender name="EMS" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../logs/ems.log</file>
    <append>true</append>
    <encoder>
        <pattern>[%d{ISO8601}] {%t} [%p] %c - %m%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>../logs/ems.log.%i</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>99</maxIndex>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>50MB</maxFileSize>
    </triggeringPolicy>
</appender>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
     <pattern>[%d{ISO8601}] {%t} [%p] %c - %m%n</pattern>
   </encoder>
</appender>

<logger name="a.b.c" level="DEBUG">
  <appender-ref ref="EMS"/>
</logger>

<logger name="a.b.c.d.SomeServiceImpl" level="INFO">
    <appender-ref ref="EMS"/>
</logger>

<logger name="a.b.c.e.SomeFilter" level="INFO">
    <appender-ref ref="EMS"/>
</logger>

<root level="OFF">
    <appender-ref ref="EMS"/>
</root>

</configuration>

问题出现在我为根记录器设置以下行时:
<appender-ref ref="EMS"/>

在ems.log文件中,每一行都会重复出现:
[2013-12-31 13:16:59,217] {[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'} [DEBUG] a.b.c.f.CallerImpl - qweqweqwe
[2013-12-31 13:16:59,217] {[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'} [DEBUG] a.b.c.f.CallerImpl - qweqweqwe

但是当我设置以下内容时:

<appender-ref ref="STDOUT"/>

一切如预期运行:

[2013-12-31 13:16:59,217] {[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'} [DEBUG] a.b.c.f.CallerImpl - qweqweqwe

我认为只要根记录器设置了“OFF”级别,就不应该有问题......请问有人可以协助吗?

谢谢,我已经编辑了问题。 - Dmitry
2个回答

6

我认为问题在于尽管根级别为"OFF"级别,但您使用以下方式将以"a.b.c"开头的记录器的有效记录级别更改为DEBUG:

<logger name="a.b.c" level="DEBUG">
  <appender-ref ref="EMS"/>
</logger>

您可以在这里了解更多信息。

只有名称不以"a.b.c"开头的日志记录器才不会被打印。所有名称以"a.b.c"开头的日志记录器都将具有DEBUG级别,但"a.b.c.d.SomeServiceImpl"和"a.b.c.e.SomeFilter"除外,它们的有效日志级别将为INFO。

"OFF"日志级别将被忽略,并且不会用于过滤日志事件。相反,在"a.b.c."记录器记录完同一条日志消息后,它将再次记录相同的日志消息。

为解决您的问题,我建议删除此内容:

<root level="OFF">
    <appender-ref ref="EMS"/>
</root>

从您的日志配置中可以看出,它并不会改变日志记录器的有效记录级别,但会将所有日志事件追加到“a.b.c”记录器的log.file中。


谢谢您的解释!移除根记录器起作用了! - Dmitry

3

1
我认为这应该是链接:http://logback.qos.ch/manual/configuration.html#cumulative - leonfs

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