You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NLog使用动态文件名时归档删除旧日志功能失效问题

问题原因

你当前的配置存在3个核心错误,导致NLog无法识别旧日志并执行删除逻辑:

  • 未配置archiveFileName归档文件命名规则:你在fileName中直接使用了${shortdate}动态变量,每天生成的日志文件名不固定,NLog默认无法将历史日期的日志文件识别为需要纳入归档计数的文件。
  • 归档触发条件不匹配:仅配置archiveOldFileOnStartup="true"只会在程序启动时对当前正在写入的固定文件名日志执行归档,而你每次启动时因为fileName带当日日期,生成的是全新文件名的日志,NLog不会关联到历史旧文件。
  • maxArchiveFiles参数未和匹配的归档规则绑定:该参数仅对符合archiveFileName格式的归档文件生效,没有明确归档规则的情况下参数不会生效。

修正后的配置

如果你需要按天生成日志,且自动删除超过指定天数的旧日志,可参考以下配置(示例为保留最近7天日志,可自行调整maxArchiveDays数值;如果要仅保留1个最新日志,替换为maxArchiveFiles="1"即可):

<target name="All_File" xsi:type="File" 
        fileName="${basedir}/Log/${shortdate}-${machinename}-PROGRAM.log"
        archiveFileName="${basedir}/Log/${shortdate}-${machinename}-PROGRAM.log"
        archiveEvery="Day"
        maxArchiveDays="7"
        layout="${longdate}|${level:uppercase=true:padding=-5}|${callsite:includeNamespace=false:padding=-45}: ${message}"
        archiveOldFileOnStartup="true"/>

配置说明

  • 明确指定archiveFileName和fileName格式一致,让NLog可以扫描目录下所有符合该命名格式的日志文件,纳入归档计数范围
  • 增加archiveEvery="Day"配置,触发按天归档逻辑,匹配你使用${shortdate}按日命名的需求
  • 用maxArchiveDays替代maxArchiveFiles更贴合按天数删除旧日志的需求,如果你需要按文件数量保留,可替换回maxArchiveFiles参数
  • NLog 4.7.5版本原生支持maxArchiveDays参数,无需额外扩展

内容的提问来源于stack exchange,提问作者To Wa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:48:00