【问题标题】:Duplicate log4j lines in console控制台中的重复 log4j 行
【发布时间】:2015-11-16 15:24:23
【问题描述】:

虽然有人问过类似的问题,但我找不到解决方案。我猜是因为配置不同。

我使用的是第 3 方 jar,但直接使用 log4j 时也遇到了同样的问题。

我正在开发 Eclipse Mars.1

我的log4j.properties如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

 <root>
        <level value="ALL" />
        <appender-ref ref="consoleAppender"/>
        <appender-ref ref="fileAppender"/>
</root>

<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender" additivity="false">
  <param name="Threshold" value="DEBUG" />
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p [%X{ThreadId}] %X{MethodName} - %m%n" />
  </layout>
</appender>

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender" additivity="false">
  <param name="Threshold" value="DEBUG" />
  <param name="append" value="true" />
  <param name="maxFileSize" value="10MB" />
  <param name="maxBackupIndex" value="10" />
  <param name="File" value="c:\Users\administrator\Eclipse workspaces\mylog-${current.date}.log"/>
  <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p [%X{ThreadId}] %X{MethodName} - %m%n" />
  </layout>
</appender>

</log4j:configuration>

下面是我在 Eclipse 控制台中看到的示例:

2015-11-16 17:13:33 DEBUG []  - ConferenceId = 4618311
13082 [main] DEBUG com.log.Log4jWrapperSingleton  - ConferenceId = 4618311
13082 [main] DEBUG com.log.Log4jWrapperSingleton  - ConferenceId = 4618311
13082 [main] DEBUG com.log.Log4jWrapperSingleton  - ConferenceId = 4618311
2015-11-16 17:13:33 INFO  []  - SLEEP_BETWEEN_CREATE_TO_TERMINATE_SEC waiting 2000 ms...
13083 [main] INFO com.log.Log4jWrapperSingleton  - SLEEP_BETWEEN_CREATE_TO_TERMINATE_SEC waiting 2000 ms...
13083 [main] INFO com.log.Log4jWrapperSingleton  - SLEEP_BETWEEN_CREATE_TO_TERMINATE_SEC waiting 2000 ms...
13083 [main] INFO com.log.Log4jWrapperSingleton  - SLEEP_BETWEEN_CREATE_TO_TERMINATE_SEC waiting 2000 ms...

每次代码迭代都会增加一个重复项。如果我现在有 3 个重复的“SLEEP_BETWEEN_CREATE_TO_TERMINATE_SEC 等待”,下一个循环我将有 4 个......

你能建议吗?

谢谢。

【问题讨论】:

  • 请贴出插入这些日志语句的代码部分。
  • 我已经看到之前一遍又一遍地添加附加程序
  • 您的代码是否多次记录调试/信息消息 - 就像在 for 循环中,有类似 for (i = 0 ; i
  • @KLibby 我使用第 3 方包装,所以我不认为发布声明会有帮助。
  • @TR1 这是一个无限循环。

标签: java eclipse log4j


【解决方案1】:

我期望的问题在于您的自定义 Log4j 包装器:com.log.Log4jWrapperSingleton

你应该摆脱它。它很可能每次调用它时都会为它自己提供新实例,有效地将新记录器添加到 ConsoleAppender(我们只能猜测,直到我们看到源代码)

你可以在这里找到推理:Benefits of Log4j singleton wrapper?

【讨论】:

    猜你喜欢
    • 2017-06-10
    • 2012-03-09
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 2018-07-14
    • 2018-12-06
    相关资源
    最近更新 更多