Logback 重复记录

Posted

技术标签:

【中文标题】Logback 重复记录【英文标题】:Logback duplicates records 【发布时间】:2013-12-31 09:30:49 【问题描述】:

我的 logback 配置有问题。这是我的 logback.xml:

<configuration>

<appender name="EMS" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>../logs/ems.log</file>
    <append>true</append>
    <encoder>
        <pattern>[%dISO8601] %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>[%dISO8601] %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

我预计,就根记录器的“关闭”级别而言,应该没有问题...

有人可以帮忙吗?

【问题讨论】:

谢谢,我已经编辑了问题。 【参考方案1】:

我认为问题在于,尽管 root 级别具有“OFF”级别,但您将以“a.b.c”开头的记录器的有效日志记录级别更改为 DEBUG,如下所示:

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

您可以阅读有关此here 的更多信息。

只有名称不以“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。

【讨论】:

感谢您的解释!删除根记录器有效!【参考方案2】:

另请注意:“记录器的可加性标志默认设置为真。” -- 来源:http://logback.qos.ch/manual/architecture.html#effectiveLevel

【讨论】:

我想这应该是链接:logback.qos.ch/manual/configuration.html#cumulative

以上是关于Logback 重复记录的主要内容,如果未能解决你的问题,请参考以下文章

为web项目添加logback

查询及删除重复记录

sql查询重复记录删除重复记录方法大全

sql查询重复记录删除重复记录方法大全

几个删除重复记录的SQL语句

查重 查重复记录 删除重复记录