我正在尝试使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>
答案 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,这是非常没用的。