如果在 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>.2
。 Log4net
从不检查是否有其他文件(.3
、.4
等)由于配置不同而较早创建。
当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>.2
。 Log4net
从不检查是否有其他文件(.3
、.4
等)由于配置不同而较早创建。