【问题标题】:Log4j logging two times in logging fileLog4j 在日志文件中记录两次
【发布时间】:2016-12-09 06:46:12
【问题描述】:

这是我的 log4j.xml

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
      <appender name="mylog" class="org.apache.log4j.DailyRollingFileAppender">
       <param name="File" value="myLogfile.log" />
       <param name="DatePattern" value="'.'yyyy-MM-dd" />
       <param name="append" value="true"/>
       <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>          
       </layout>
    </appender>
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>
        <logger name="com.mypackage1">
        <level value="DEBUG" />
        <appender-ref ref="mylog" />
        <appender-ref ref="console" />
    </logger>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="console" />
    </root> 

</log4j:configuration>

在 myLogfile.log 文件中,我两次从“com.mypackage1”获取日志记录。

请帮忙解决问题

【问题讨论】:

  • 可能是因为您多次复制粘贴内容。可能是因为您多次复制粘贴内容。可能是因为您多次复制粘贴内容。
  • 感谢您告知我的错误。这是我的第一篇文章。反正我已经编辑过了。
  • 尝试删除
  • 该日志记录配置文件不会导致 myLogfile.log 文件重复。它导致控制台输出重复,但这是不同的。如果您在文件中看到重复项,那么您可能调用了两次日志语句,或者您加载了两次配置文件而没有重置。

标签: java log4j


【解决方案1】:

如果您将控制台输出从 shell 重定向到相同的日志文件,就像您在评论中提到的那样,那么是的,您的日志文件将有重复的条目。一种解决方案是在您的程序中使用以下 log4j 配置并将控制台输出重定向到不同的文件 - 例如console.out,这将使您的日志和标准输出分开。如果您必须在同一个文件中有标准输出,则将标准输出重定向到同一个文件。

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
      <appender name="mylog" class="org.apache.log4j.DailyRollingFileAppender">
       <param name="File" value="myLogfile.log" />
       <param name="DatePattern" value="'.'yyyy-MM-dd" />
       <param name="append" value="true"/>
       <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>          
       </layout>
    </appender>
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>

    <logger name="com.mypackage1">
        <level value="DEBUG" />
        <appender-ref ref="mylog" />
    <!-- <appender-ref ref="console" />  -->    
    </logger>

    <root>
        <level value="DEBUG" />
    <!--  <appender-ref ref="console" />  -->
          <appender-ref ref="myLog" />
    </root> 

</log4j:configuration>

【讨论】:

  • console appender 不会导致 myLogfile.log 文件中的重复条目由 mylog appender 写入。
  • 是的,我的错。我误读了这个问题,我认为控制台上有重复的条目。对于文件中的重复项,这个 log4j 不会这样做。但是,我怀疑这可能是程序可能已执行的方式 - 例如从 shell 启动并将输出重定向到文件,可能吗?我猜这可能会导致文件重复。我已经编辑了我的答案以反映这一点。
  • 是的,我的程序是从 shell 启动的,但是有什么办法可以解决这个问题
  • 使用我上面回答中的配置,您可以继续将程序的输出重定向到同一个日志文件 - 不过,我建议将 std out 重定向到与日志文件不同的文件。跨度>
猜你喜欢
  • 2010-09-22
  • 2017-11-09
  • 1970-01-01
  • 2011-06-12
  • 2011-06-17
  • 2011-12-06
  • 2013-11-08
  • 2020-12-07
相关资源
最近更新 更多