log4net RollingFileAppender不停地输出大量日志,maxSizeRollBackups参数无效。

6
一个我拥有的服务突然开始不断地输出大量日志文件,并且没有限制文件数量。这些日志文件(类似)命名为MyService.2015-01-08.1、MyService.2015-01-08.2、MyService.2015-01-08.3等,一直到目前为止已达到218个。我希望将其限制为每天最多只能输出10个日志文件,而不是像现在无限制一样。以下是之前的日志配置:
<appender name="RollingFileAppender" type="Ourlib.Logging.CustomRollingFileAppender">
  <file value="c:\logs\myservice" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <staticLogFileName value="false" />
  <maxSizeRollBackups value="-1" />
  <countDirection value="1" />
  <maximumFileSize value="5000KB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%utcdate [%thread] %-5level %property{CorrelationId} %property{CallPath} %logger{2} - %message%newline" />
  </layout>
</appender>

我做了一些更改,如下所示。值得注意的是,我将 maxSizeRollBackups 设置为10,我认为这可以解决问题,但似乎没有起到作用。

<appender name="RollingFileAppender" type="Ourlib.Logging.CustomRollingFileAppender">
  <file value="c:\logs\myservice" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <staticLogFileName value="false" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5000KB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%utcdate [%thread] %-5level %property{CorrelationId} %property{CallPath} %logger{2} - %message%newline" />
   </layout>
</appender>

更改已部署,但仍在创建新的日志文件,远远超过新设置的10个文件。

假设我的部署操作正确,可能出了什么问题?我是否误解了我所更改的配置属性,或者还有其他问题?

谢谢大家!


你是不是想要删除 <countDirection value="1" /> - J0e3gan
是的,我也应该提到那个。 - Seventh Helix
你正在使用rollingStyle.Composite,因此文件将根据大小和日期滚动,但是你没有指定DatePattern - 至少在配置中没有,它是否在你的自定义appender中设置?这种按日期滚动是为什么备份文件的数量超过了maxSizeRollBackups设置,因为该设置仅适用于按大小滚动的文件,而不适用于按日期滚动的文件,如文档所述:“不支持在日期/时间边界上滚动时的最大备份文件数。” - stuartd
2个回答

5
尝试添加DatePattern,并保持maxSizeRollBackups值为10,如下所示。
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
     <file value="c:\logs\myservice" />
     <appendToFile value="true" />
     <rollingStyle value="Composite" />
     <datePattern value=".yyyy-MM-dd" />
     <maxSizeRollBackups value="10" />
     <maximumFileSize value="5000KB" />
     <countDirection value="1"/>
     <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
     </layout>
</appender>

这是一个组合滚动文件记录器,每天最多保留10个大小为5000KB的日志备份


-1

试试这个:

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
  <file value=".\App.log" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <appendToFile value="true" />
  <maximumFileSize value="10MB" />
  <maxSizeRollBackups value="5" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
  </layout>
</appender>

另一个例子:

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
  <file value=".\Logs\" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <staticLogFileName value="false" />
  <rollingStyle value="Date" />
  <datePattern value="'On_'yyyy-MM-dd'.log'" />
  <appendToFile value="true" />
  <maximumFileSize value="10MB" />
  <maxSizeRollBackups value="10" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
  </layout>
</appender>

如果您必须使用自定义的内容,那么我猜缺少的是:

  1. 文件值属性末尾需要加上一个斜杠(<file value="c:\logs\myservice\" />)。
  2. 组合文件定义,除非您的自定义 appender 已经实现了它。
  3. 如果在此之前没有 BufferedAppender,请使用 lockingModel。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接