Log4net - 根据日期删除旧的日志文件

时间:2015-12-05 13:04:07

标签: c# .net log4net

目前我正在使用log4net 1.2.10.0版为我的.net窗口应用程序编写日志。如果滚动样式基于日期,即使我设置了以下语句,也不会自动删除旧的日志文件:

RollingFileAppender rollingFileAppender = new RollingFileAppender();
rollingFileAppender.MaxSizeRollBackups = 2;

如果是,如何通过在编码中编写一些语句来自动删除那些旧的日志文件?

1 个答案:

答案 0 :(得分:1)

如何设置appender的示例片段:

  <appender name="ContextLogAppender" type="log4net.Appender.RollingFileAppender">
    <file value="..\Logs\ContextLog\context.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="100" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true"/>
    <countDirection value="1"/>
    <PreserveLogFileNameExtension value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss,fff} [%-5level][thread: %thread][%logger] %message%newline" />
    </layout>
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="PRODUCTION" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="CONTEXT" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="INFO" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="WARN" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="ERROR" />
    </filter>
    <filter type="log4net.Filter.LevelMatchFilter">
      <levelToMatch value="FATAL" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
  </appender>

此appender将一堆类别记录到日志文件中。您最感兴趣的属性(我认为)

    <appendToFile value="true" />

如果为真,则附加到最后一个日志文件

    <rollingStyle value="Size" />

滚动样式可以是大小,日期或复合。我认为你正在寻找复合材料。在此示例中,它设置为“大小”,这意味着滚动定义会查看所有生成的日志文件的数量。如果达到最大文件数,则将覆盖最旧的日志文件。

    <maxSizeRollBackups value="100" />

这是此appender的最大允许日志文件的定义。

    <maximumFileSize value="10MB" />

此appender创建的每个日志文件都定义了最大限制大小限制;每个文件10MB。 (所以在这种情况下:100 * 10 MB = 1GB的日志文件是我们允许的最大日志记录量;对于这个appender而言。

    <staticLogFileName value="true"/>

这确保我始终写入同一个日志文件,这样我可以相信,当我查看context.log时,我会查看最新的日志记录。如果您想依赖日期滚动,这将无效。

  

引用:   每天的文件大小不同,我想要实现的是一个   文件将被删除每天,以便相同的日志量   文件将在几天内存储

你不是在寻找一个&#34;滚动&#34;登录窗口。您正在寻找&#34;备份记录&#34;每一天。我不认为通过配置log4net很容易实现。可以将滚动样式设置为Composite,以便它既可以查找日期时间模式,也可以查找最大数量的文件。

E.g。您可以将log4net配置为每天写入10个日志文件,每个生成的日志文件具有最大大小。

<rollingStyle value="Composite" />
<datePattern value=".yyyyMMdd" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />

这将导致每天最多100MB的记录。但那仍然没有回答你的问题......

虽然HTH有点......