Log4net有时会创建两个日志,一个是空的

时间:2015-03-09 15:56:51

标签: c# log4net log4net-appender fileappender

使用以下配置,大约一半的时间,我每个人得到两个日志,一个是空的。它们的文件名不同一秒(log.2015-03-09_11-50-25 vs log.2015-03-09_11-50-26)

我正在尝试每次运行控制台应用程序一个日志。

<log4net>

  <appender name="Log" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="C:\env\QA\Logs\consoleapp\log.%date{yyyy-MM-dd_HH-mm-ss}.txt"/>
    <appendToFile value="true"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date    %message%newline"/>
    </layout>
  </appender>

  <root>
    <level value="INFO"/>
    <appender-ref ref="Log"/>
  </root>
</log4net>

后一个日志是唯一一个填充/写入的日志。

为什么会这样?我该如何解决?

编辑:结果我在我的代码中实例化了第二个记录器。当实例化在不同的秒期间发生时,创建了第二个日志。 appender工作正常。

2 个答案:

答案 0 :(得分:3)

之前我见过类似的东西 - 由于文件名中指定了第二个,因此在一秒钟结束和另一秒钟开始时就会发生写入。

<file type="log4net.Util.PatternString" value="C:\env\QA\Logs\consoleapp\log.%date{yyyy-MM-dd_HH-mm-ss}.txt"/>

应该是

<file type="log4net.Util.PatternString" value="C:\env\QA\Logs\consoleapp\log.%date{yyyy-MM-dd}.txt"/>

在我上一份工作中,有人在日志文件名中设置了第二个说明符,并且生产服务器接近崩溃,尝试渲染日志文件夹中包含的150,000个文件。

编辑:

如果要在每次运行时编写一次,可以将以下内容添加到log4net配置中:

<rollingStyle value="Once" />

并且可能需要将appendToFile属性设置为false。

log4net one file per run

所以你的配置看起来像这样:

<appender name="Log" type="log4net.Appender.FileAppender">
    <file type="log4net.Util.PatternString" value="C:\env\QA\Logs\consoleapp\log.%date{yyyy-MM-dd_HH-mm-ss}.txt"/>
    <appendToFile value="false" />    
    <maxSizeRollBackups value="-1" /> <!--infinite-->
    <rollingStyle value="Once" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date    %message%newline"/>
    </layout>
  </appender>

答案 1 :(得分:1)

我使用了user1666620的解决方案,但仍然有一个.log.1文件。 结果我在 AssemblyInfo.cs 文件中有以下行:

{{1}}

删除以上一行解决了我的问题。顺便说一下,我的 program.cs 看起来像:

{{1}}