当maxSizeRollBackups
减少(假设 4 到 2)时,预计只应保留 2 个文件并删除额外的文件,但这并没有发生。 但是,如果我增加maxSizeRollBackups
值,它将根据计数工作。
日志4网络设置:
<?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
的方法,您可以看到,如果发生日志文件滚动更新,则会删除最旧的文件,并重命名其他文件。"最旧的文件"是指根据当前配置的最旧文件。如果您的配置规定只应有 2 个备份,则最旧的文件为<baseFilename>.2
。Log4net
从不检查是否有其他文件(.3
、.4
等)是由于不同的配置而更早创建的。