我读了一篇文章说:
rollingStyle可以是Date,Size或Composite。默认设置Composite,使用大小和日期设置的组合。因此,如果将datePattern设置为“.yyyy-MM-dd”并将maxSizeRollBackups设置为10,那么它将为每天维护10个日志备份。 如果将DatePattern设置为“.yyyy-MM-dd HH:mm”并且maxSizeRollbackups = 10,那么它将每分钟维护10个日志文件备份
它说:
staticLogFileName指示是否需要始终将(log)写入同一文件。当使用Date作为滚动样式并且您有大量备份时,您需要将其设置为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
,因此它应该每分钟在单独的文件上记录三个日志,但它不会!有什么问题?
注意:这是文章的Link
编辑:我在windowsservice
中使用它,它只给我一个日志文件!
答案 0 :(得分:4)
问题是你在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>
结果如下:
答案 1 :(得分:0)
也许您没有指定maximumFileSize
,它使用的默认值大于日志的大小。仅在日期滚动时设置maxSizeRollBackups
没有意义。它不知道如何拆分日志。此外,当您检查时,它不会在几秒钟内滚动。
我建议使用Composite滚动并调整大小,这样每分钟就有3个日志文件。
否则你可以尝试创建自己的appender,看起来像下面的东西。
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();
}
}
}
您可以从here下载log4net.Appender.RollingFileAppender
的源代码。