如果在Log4Net配置中减少了maxSizeRollBackups,则不会删除多余的日志文件

时间:2019-07-15 12:20:53

标签: c# log4net

maxSizeRollBackups减小(假设4到2)时,可以预期仅应保留2个文件,而应删除多余的文件,但是这种情况不会发生。 但是,如果我增加了maxSizeRollBackups值,它会根据计数起作用。

Log4Net设置:

<?xml version="1.0"?>
<configuration>
<log4net>
<logger name="ConsoleLog">
  <level value="FATAL" />
  <level value="ERROR" />
  <level value="WARN" />
  <level value="INFO" />
  <level value="DEBUG" />
  <appender-ref ref="ConsoleLogFile" />
</logger>
<appender name="ConsoleLogFile" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="%property{ConsoleSetup}" />
  <appendToFile value="true" />
  <maxSizeRollBackups value="4" />
  <maximumFileSize value="1KB" />
  <rollingStyle value="Composite" />
  <datePattern value="yyyyMMdd" />
  <staticLogFileName value="true" />
  <Encoding value="UTF-8" />
  <layout type="log4net.Layout.PatternLayout">
    <!-- %d:DateTime, %t:Thread, %-5p:Categories, %c:LoggerName, %m:ADKMessage, %n:line sepalator-->
    <param name="ConversionPattern" value="%d ,%-5p, %m%n" />
  </layout>
</appender>

在C#中通过日志配置监视程序:

log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(sPath));

根据上面的maxSizeRollBackups设置(4),存在以下文件。

  

“ Application_ConsoleSetup.log”

     

“ Application_ConsoleSetup.log.1”

     

“ Application_ConsoleSetup.log.2”

     

“ Application_ConsoleSetup.log.3”

     

“ Application_ConsoleSetup.log.4”

然后我将maxSizeRollBackups设置为2,然后我认为应该删除以下文件,但不要删除它们。 我想找出导致此问题的原因

  

“ Application_ConsoleSetup.log.3”

     

“ Application_ConsoleSetup.log.4”

注意,如果我将maxSizeRollBackups设置为6,则将按预期生成以下文件。

  

“ Application_ConsoleSetup.log.5”

     

“ Application_ConsoleSetup.log.6”

1 个答案:

答案 0 :(得分:0)

原因是Log4net并未完整记录其日志文件,而是根据当前配置删除了不应该存在的日志文件。它只是在日志记录时观察配置设置。查看RollingFileAppender.cs中的方法RollOverRenameFiles,可以看到如果发生日志文件翻转,则最早的文件将被删除,而其他文件将被重命名。 “最旧的文件”是指根据 current 配置的最旧的文件。如果您的配置指出应该只有2个备份,则最早的文件是<baseFilename>.2Log4net永远不会检查是否由于配置不同而创建了其他文件(.3.4等)。

相关问题