1

我正在尝试让 log4net RollingFileAdapter 工作,以便我的日志文件按日期滚动。但是我发现即使我复制示例代码,我也没有得到我期望的行为。它不是获取今天的日期和时间的单个文件,而是在两个不同的文件之间拆分日志消息。一个文件仅称为“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>
4

1 回答 1

1

您正在滚动日期,这意味着只要您指定的 datePattern 发生更改,log4net 就会滚动日志文件。您已指定每分钟更改的日期模式,因此您应该期望每分钟都有新的日志滚降。

这些滚降将使用您指定的日期模式命名。但是,活动日志文件将被命名为“log”并在滚降期间重命名。也就是说,使用您的配置,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 设置控制“活动”日志文件的名称;当它为 false 时,log4net 将使用 datePattern 来命名活动日志文件。请注意,这意味着不需要进行滚动复制,而是会创建一个新的日志文件(具有适当的名称)。将 preserveLogFileNameExtension 设置为 true 会强制 log4net 在创建文件时使用 .txt 文件扩展名;通常它只会将日期模式附加到文件名的末尾,从而产生像 .txt20130830-0819 这样的文件扩展名,这是非常没用的。

于 2013-08-30T12:20:31.247 回答