如果在 Log4Net 配置中减少 maxSizeRollBackups,它不会删除额外的日志文件

If maxSizeRollBackups is decreased in Log4Net config, it is not deleting extra log files

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"

原因是 Log4net 没有对其日志文件进行完整清点,并删除了那些根据当前配置不应该存在的文件。它只是在记录时观察配置设置。查看RollingFileAppender.cs中的方法RollOverRenameFiles,您可以看到如果发生日志文件翻转,最旧的文件将被删除,其他文件将被重命名。根据当前配置,"Oldest file"指的是最早的文件。如果您的配置声明应该只有 2 个备份,则最旧的文件是 <baseFilename>.2Log4net 从不检查是否有其他文件(.3.4 等)由于配置不同而较早创建。