使用RollingFileAppender时,为什么log4net会创建两个单独的日志文件?

时间:2013-08-30 10:29:45

标签: log4net log4net-configuration log4net-appender

我正在尝试使log4net RollingFileAdapter工作,以便我的日志文件按日期滚动。然而,我发现即使我复制example code,我也没有得到我期望的行为。它不是获取今天日期和时间的单个文件,而是将日志消息分成两个不同的文件。一个文件称为“log”,第二个文件服从配置,将被称为“log20130830-1115.txt”。

如果我在配置文件中使用<log4net debug="true">,我会在Trace输出中看到后续内容:

log4net: Initial roll over to [c:\inetpub\wwwroot\QuartzTest\ScheduleTest\bin\Debug\log20130830-1115.txt]
log4net: Moving [c:\inetpub\wwwroot\QuartzTest\ScheduleTest\bin\Debug\log] -> [c:\inetpub\wwwroot\QuartzTest\ScheduleTest\bin\Debug\log20130830-1115.txt]

注意第二行......为什么它首先创建一个名为“log”的文件?为什么它似乎没有采取它所谈论的举动? “log”中的条目始终在正确命名的文件中的任何条目之后加上时间戳,即使该文件首先出现。

这里发生了什么?我搞乱了配置还是log4net RollingFileAppender中有错误?

这是我的配置:

<log4net debug="true">
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="[log4net] %d [%t] %-5p %l - %m%n" />
        </layout>
    </appender>

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="log" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="yyyyMMdd-HHmm'.txt'" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>

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

1 个答案:

答案 0 :(得分:1)

您正在滚动日期,这意味着每当您指定更改的datePattern时,log4net将滚动日志文件。您已指定了每分钟更改的日期模式,因此您应该每分钟都要进行一次新的日志滚动。

这些滚降将使用您指定的日期模式命名。但是,活动日志文件将命名为“log”并在rolloff期间重命名。也就是说,使用您的配置log4net将始终写入名为“log”的文件,并在datePattern值更改后将其复制。

如果我理解正确,那么您希望使用配置中的日期模式命名您的活动日志文件。试试这个:

 <appender name="RollingFileDateAppender" type="log4net.Appender.RollingFileAppender">
  <file value="log.txt" />
  <appendToFile value="true" />
  <preserveLogFileNameExtension value="true" />
  <staticLogFileName value="false" />

  <rollingStyle value="Date" />
  <datePattern value="yyyyMMdd-HHmm" />

  <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

staticLogFileName设置控制“活动”日志文件的名称;当它为假时,log4net将使用datePattern命名活动日志文件。请注意,这意味着不需要执行滚动副本,而是创建新的日志文件(具有适当的名称)。将preserveLogFileNameExtension设置为true会强制log4net在创建文件时使用.txt文件扩展名;通常它只是将日期模式附加到文件名的末尾,导致文件扩展名如.txt20130830-0819,这是非常没用的。