我有一个循环遍历100,000多个项目的进程,并在关于它们的日志中进行了大量写入,而且由于log4net无法正常工作,因此我无法保留所需的所有日志。
我的配置如下:
<appender name="debug" type="log4net.Appender.RollingFileAppender">
<file value="logs\" />
<datePattern value="yyyyMMdd'_DEBUG.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline[%date]-%level-%logger[%M]- Linea:%L - %message%newline"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="debug"/>
<param name="LevelMax" value="debug"/>
</filter>
</appender>
使用该设置,我希望只要第一个文件已满,就会创建第二个文件,然后创建第三个文件等,每天最多10个文件。我假设覆盖任何以前的日志的唯一方法是拥有10个完整文件,接下来的条目必须从第一个重写现有的文件。然而,正在发生的事情是我在第一个文件已满(并转为第一个备份)之后创建了一个文件,但在第二个文件已满后,而不是将其转换为另一个备份并转到第三个文件,它开始覆盖原始文件。
所以我最终得到了
20171005_DEBUG.log
20171005_DEBUG.log.1
并没有别的,20171005_DEBUG.log被覆盖了。
我可以通过将最大文件大小更改为100MB或任何非常大的内容来“修复”此问题,但我宁愿知道我在这里做错了什么。任何人
答案 0 :(得分:2)
更改
<rollingStyle value="Composite" />
到
<rollingStyle value="Date" />
或
<rollingStyle value="Size" />
应该给你想要的行为。
Composite
同时考虑日期和大小。
请参阅RollingFileAppender.RollingModes
既然您说过处理100.000+行日志,您是否考虑过登录数据库?