NLog配置日志归档规则后不删除旧文件该如何排查解决?
NLog旧日志不自动删除问题排查与修复方案
根因定位
- 核心问题:
fileName配置使用了动态日期变量,NLog会将每天新生成的日志文件直接识别为独立的活动文件,不会触发归档逻辑,maxArchiveFiles、maxArchiveDays的清理规则仅对归档文件生效,因此这些按天直接生成的日志文件不会被清理逻辑识别。 - 次要问题:4.7.11版本的NLog要求归档文件必须由内置归档流程生成才能被纳入清理队列,你当前配置下生成的日期命名日志不属于归档文件范畴,无法触发自动清理。
修正后的配置方案
调整核心逻辑为:固定活动日志文件名,所有日志先写入同一个活动文件,满足天维度或大小阈值后触发归档,归档生成的文件会被自动纳入清理队列。
<target name="appLogFile" type="File" fileName="d:\my_logs\nlog_test.log" archiveFileName="d:\my_logs\nlog_test-{#}.log" archiveEvery="Day" archiveAboveSize="104857600" archiveNumbering="DateAndSequence" archiveDateFormat="yyyy-MM-dd" maxArchiveFiles="2" maxArchiveDays="2" openFileCacheTimeout="30" concurrentWrites="True" keepFileOpen="True" createDirs="True" layout="${date:format=yyy-MM-dd HH\:mm\:ss.fff K} ${message}" />
补充说明
- 清理逻辑仅在归档触发时执行,即新归档文件生成时才会扫描历史归档并删除超出阈值的旧文件,不会后台定时扫描。
- 现存的历史日志需手动清理,调整配置后新生成的归档文件会自动按照规则清理。
- 如果调整后仍不生效,建议升级到NLog 4.7.15以上稳定版本,该版本修复了部分归档清理的边界bug,且完全兼容上述配置。
内容的提问来源于stack exchange,提问作者Tamás Somogyi
相关产品推荐
相关产品推荐

