log4net没有保留正确数量的备份文件

时间:2017-10-05 17:23:00

标签: c# .net file logging log4net

我有一个循环遍历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或任何非常大的内容来“修复”此问题,但我宁愿知道我在这里做错了什么。任何人

1 个答案:

答案 0 :(得分:2)

更改

<rollingStyle value="Composite" />

<rollingStyle value="Date" />

<rollingStyle value="Size" />

应该给你想要的行为。

Composite同时考虑日期和大小。

请参阅RollingFileAppender.RollingModes

既然您说过处理100.000+行日志,您是否考虑过登录数据库?