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

NLog 2.0.0.0版本中配置archiveNaming实现按日期+滚动大小归档日志的问题

NLog 2.0.0.0版本中配置archiveNaming实现按日期+滚动大小归档日志的问题

嘿,我太懂你这个困扰了——NLog 2.0这个版本确实在归档命名的灵活性上有点受限,尤其是archiveNumbering不支持直接用日期/时间戳来替代序列号。不过咱们完全可以通过调整File Target的配置参数,实现你要的「每日基础日志文件+达到大小后归档为带时间戳的文件」的效果,不用升级版本也能搞定!

给你一个可以直接用的配置片段,我会逐行给你解释为什么这么配:

<target name="dailySizeRollingLog" xsi:type="File"
        <!-- 当前正在写入的日志文件,每日自动切换为新的日期命名文件 -->
        fileName="Logfile_${machinename}_${shortdate}.log"
        <!-- 归档文件的命名格式:原日期文件名 + 精确到100纳秒的时间戳,确保绝对不重复 -->
        archiveFileName="Logfile_${machinename}_${shortdate}_${ticks}.log"
        <!-- 触发归档的文件大小阈值,这里设为10MB(10*1024*1024=10485760字节),你可以按需调整 -->
        archiveAboveSize="10485760"
        <!-- 滚动策略用Composite,同时支持按日期和大小触发滚动 -->
        rollingStyle="Composite"
        <!-- 因为我们用了ticks作为唯一标识,不需要序列号,所以设为None避免自动加_1/_2后缀 -->
        archiveNumbering="None"
        <!-- 强制每天生成新的基础日志文件,即使前一天的文件没达到大小阈值 -->
        archiveEvery="Day"
        <!-- 最多保留多少个归档文件,按需设置,避免磁盘占满 -->
        maxArchiveFiles="60"
        <!-- 开启并发写入支持,多线程写日志也不会出问题 -->
        concurrentWrites="true"
        <!-- 日志内容的格式,你可以根据自己的需求修改 -->
        layout="${longdate} [${level:uppercase=true}] ${message} ${exception:format=ToString}" />

几个关键配置的说明:

  • 为什么用${ticks}而不是普通日期格式?普通的${date:format=yyyyMMddHHmmss}最多精确到秒,如果一秒内触发多次归档,会出现重名覆盖的问题;而${ticks}是从1970年到现在的100纳秒数,绝对唯一,完美解决重名问题。
  • rollingStyle="Composite"是核心,它让NLog同时监听日期变化和文件大小,既保证每天生成新的基础文件,又在文件达到大小后自动归档。
  • archiveNumbering="None"必须设置,要是设成Sequence的话,NLog会自动给归档文件加_1_2的后缀,破坏咱们要的时间戳命名格式。

可选调整项:

  • 如果你觉得ticks的格式太长,也可以换成${date:format=yyyyMMddHHmmssfff}(精确到毫秒),只要你的日志不会在同一毫秒内触发多次归档,这个格式可读性更强,也足够用。
  • 要是不需要强制每天生成新文件(比如某天日志量特别小,不需要切文件),可以把archiveEvery="Day"去掉,只保留rollingStyle="Composite",这样NLog只会在文件达到大小或者日期变化时才滚动。

要是你配置后遇到什么问题,比如归档文件没生成、命名不对,随时告诉我你的具体配置和现象,我再帮你调整!

火山引擎 最新活动