C# Log4net有时会创建两个日志,一个为空

C# Log4net有时会创建两个日志,一个为空,c#,log4net,log4net-appender,fileappender,C#,Log4net,Log4net Appender,Fileappender,使用下面的配置,大约有一半的时间,我会得到两个日志,一个是空的。它们的文件名相差一秒钟(log.2015-03-09_11-50-25与log.2015-03-09_11-50-26) 我试图在每次运行控制台应用程序时都有一个日志 <log4net> <appender name="Log" type="log4net.Appender.FileAppender"> <file type="log4net.Util.PatternString" val

使用下面的配置,大约有一半的时间,我会得到两个日志,一个是空的。它们的文件名相差一秒钟(log.2015-03-09_11-50-25与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>

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

为什么会这样?我怎么修理它


编辑:原来我在代码中实例化了第二个记录器。当实例化发生在另一秒时,会创建第二个日志。追加器工作正常。

我以前见过类似的情况-这是因为文件名中指定了第二个文件,写入操作在一秒钟结束和另一秒钟开始时发生

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

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

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
删除上述行解决了我的问题。顺便说一下,my program.cs看起来像:

public static class Program
{
    static Program()
    {
        // Initialize logging
        log4net.Config.XmlConfigurator.Configure();
    }

    private static readonly ILog log =
        LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    ...
}

删除文件名中的第二个说明符。您的方法可能不太理想。尝试使用username/pid/其他对日志来说足够小的时间段所特有的东西作为日志文件的“主键”-naming@swe时间戳对日志文件名很有用-允许容易读取的文件名并将它们放在上下文中。当实例化发生在另一秒时,会创建第二个日志。追加器工作正常。我不想覆盖或追加到上一个日志。我希望每次运行都有一个单独的文件。您的建议会导致日志在同一天被追加。问题与我的原始帖子相同,但请注意,当第二个文件在同一秒时,它仍然会创建两个,其中一个文件名追加了“.1”
<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>
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
public static class Program
{
    static Program()
    {
        // Initialize logging
        log4net.Config.XmlConfigurator.Configure();
    }

    private static readonly ILog log =
        LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    ...
}