【问题标题】:log4net RollingFileAppender spewing tons of logs, maxSizeRollBackups has no effectlog4net RollingFileAppender 喷出大量日志,maxSizeRollBackups 没有效果
【发布时间】:2015-03-07 08:15:56
【问题描述】:

我拥有的一项服务突然涌出大量日志文件,并且没有限制写入的文件数量。这些日志(有点)命名为 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。

假设我的部署正确完成,可能有什么问题?我误解了我更改的配置属性,还是这里发生了其他事情?

谢谢大家!

【问题讨论】:

  • 您的意思是删除&lt;countDirection value="1" /&gt;
  • 是的,我也应该提到这一点。
  • 您正在使用 rollingStyle.Composite,因此文件将根据大小和日期滚动,但您没有指定 DatePattern - 至少没有在配置中,它是否在您的自定义附加程序中设置?这种按日期滚动是备份文件数量超过 maxSizeRollBackups 设置 sa 的原因,该设置仅适用于按大小滚动的文件,而不是按日期滚动的文件,如 the documentation 中所述:“在日期/时间边界滚动时的最大备份文件数不支持。”

标签: c# .net logging log4net log4net-appender


【解决方案1】:

尝试添加 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>

这是一个复合 RollingFileAppender,每天最多保留 10 个 5000KB 日志备份

【讨论】:

    【解决方案2】:

    试试这个:

    <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. 文件值属性末尾的重击 (&lt;file value="c:\logs\myservice\" /&gt;)。
    2. 复合文件定义,除非您的自定义附加程序已经这样做了。
    3. 如果前面没有 BufferedAppender,请使用lockingModel。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      相关资源
      最近更新 更多