You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动