[英]Rollover on Log4Net
我读了一篇文章,内容是:
RollingStyle可以是Date,Size或Composite。 默认设置“复合”使用“大小”和“日期”设置的组合。 因此,如果将datePattern设置为“ .yyyy-MM-dd”,并将maxSizeRollBackups设置为10,则它将每天维护10次日志备份。 如果您将DatePattern设置为“ .yyyy-MM-dd HH:mm”并且maxSizeRollbackups = 10,则它将每分钟维护10个日志文件备份
它说:
staticLogFileName指示是否需要一直保持向同一文件写入(日志)。 当使用“日期”作为滚动样式并且您有大量备份时,需要将其设置为false。
所以我在我的App.config
做到了:
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="E:\operativity.log" />
<staticLogFileName value="False" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value=".yyyy-MM-dd HH:mm" />
<maxSizeRollBackups value="3" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{dd/MM/yyyy HH:mm:ss.fff} - %level - %message%newline" />
</layout>
</appender>
如您所见,我将rollingStyle
设置为Date
并将datePattern
为.yyyy-MM-dd HH:mm
,并将maxSizeRollbackups
设置为3
,并且将staticLogFileName
设置为False
,所以它应该每分钟在单独的文件上花费三个日志,但是它确实不!! 问题是什么?
注意:本文链接
编辑:我在windowsservice
使用它,它只给我一个日志文件!
问题在于datePattern中有一个:(冒号),它是文件名的无效字符。
您还必须使用RollingFileAppender而不是FileAppender。
更改
<datePattern value=".yyyy-MM-dd HH:mm" />
至
<datePattern value=".yyyy-MM-dd-HHmm" />
您将得到一个文件,因为第一个文件不包含日期时间。 由于包含:(冒号),因此将无法创建其他文件。
这是经过测试的,它可以工作:
<log4net>
<appender name="Debug" type="log4net.Appender.RollingFileAppender">
<file value="E:\operativity3.log" />
<appendToFile value="true" />
<maxSizeRollBackups value="3" />
<datePattern value=".yyyy-MM-dd-HHmm" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] [%level] %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="Debug" />
</root>
</log4net>
结果如下:
也许您没有指定maximumFileSize
,它使用的默认值大于日志的大小。 仅在Date上滚动时,设置maxSizeRollBackups
没有意义。 它不知道如何拆分日志。 另外,正如您检查的那样,它不会在几秒钟内滚动。
我建议您使用复合滚动并调整大小,以便每分钟有3个以上的日志文件。
否则,您可以尝试创建自己的追加程序,如下所示。
public class MyRollingFileAppender : log4net.Appender.RollingFileAppender
{
override protected void AdjustFileBeforeAppend()
{
if (RollingStyle == RollingMode.Date)
{
// decide if should roll
if (shouldRoll)
{
RollOverTime(true);
}
}
else
{
base.AdjustFileBeforeAppend();
}
}
}
您可以从此处下载log4net.Appender.RollingFileAppender
的源代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.