NLog配置疑问:如何保留最近7天的日志文件?
解决NLog保留最近7天日志的配置问题
我看了你的NLog配置和问题描述,问题出在LogToShare目标的归档参数配置上,导致旧日志被自动删除。下面是具体的修改方案和原因解释:
问题分析
你的原配置中,fileName使用了${shortdate}按天生成新日志文件,但同时设置了archiveEvery="Day"和archiveFileName="${LogSharedFolder}\${machinename}_${shortdate}.{#}.log"。这里的矛盾点在于:
archiveFileName里的${shortdate}会让归档后的文件依然使用当日日期命名,NLog无法识别这些是不同日期的历史日志- 结合
archiveNumbering="Rolling",NLog只会保留最新的7个编号归档文件,而旧的日期日志会被当成冗余文件删除
修改后的配置
把LogToShare的target配置改成下面这样:
<target type="File" name="LogToShare" layout="${time} ${level} ${message}" fileName="${LogSharedFolder}\${machinename}_${shortdate}.log" archiveFileName="${LogSharedFolder}\${machinename}_{#}.log" archiveNumbering="Date" dateFormat="yyyy-MM-dd" maxArchiveFiles="7" keepFileOpen="true" openFileCacheTimeout="5" concurrentWrites="true" encoding="utf-8" writeBom="true" />
关键参数说明
- 移除了
archiveEvery="Day":因为fileName中的${shortdate}已经会让NLog在日期切换时自动创建新的日志文件,不需要额外触发每日归档 - 设置
archiveNumbering="Date"和dateFormat="yyyy-MM-dd":让NLog用日期格式来命名归档文件,和当前日志文件的命名规则保持一致(比如machinename_2024-05-20.log) - 保留
maxArchiveFiles="7":告诉NLog只保留最近7天的日志文件,自动清理更早的文件
这样修改后,\\myserver\logs目录下就会保留最近7天的每日日志文件,不会再删除前一天的日志了。
内容的提问来源于stack exchange,提问作者bitfhacker




