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

Serilog配置疑问:如何让最新日志始终保留在trace.log

Serilog日志滚动配置:让最新日志始终保留在主文件

要实现最新日志始终写入trace.log,旧日志自动备份为带序号/日期的文件,你可以按以下方式调整配置:

1. 确保使用新版Serilog.Sinks.File

旧版本(v3.0之前)的Serilog文件接收器滚动逻辑是反向的:达到大小限制后,新日志会写入带序号的文件,主文件留存旧日志。升级到v3.0及以上版本后,默认逻辑改为:将旧的主文件重命名为备份文件,新日志继续写入新的主文件。

2. 调整配置参数

根据你的滚动需求选择对应配置:

仅按文件大小滚动

如果不需要按天分割日志,只按文件大小滚动,将rollingInterval设为"Infinite":

"WriteTo": [
  {
    "Name": "File",
    "Args": {
      "path": "%BASEDIR%/trace.log",
      "shared": true,
      "rollingInterval": "Infinite",
      "rollOnFileSizeLimit": true,
      "fileSizeLimitBytes": 1048576,
      "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] [{MachineName}_{Tenant}] [{EnvironmentUserName}] [{ProcessId}] [{Guid}] [{ClassName}.{MethodName}] {Message:lj}{NewLine}{Exception}"
    }
  }
]

达到大小限制时,trace.log会被重命名为trace_001.log,新日志继续写入新的trace.log。

按天+大小混合滚动

如果需要每天分割日志,同时当天内按大小滚动,保留rollingInterval: "Day"即可:

"WriteTo": [
  {
    "Name": "File",
    "Args": {
      "path": "%BASEDIR%/trace.log",
      "shared": true,
      "rollingInterval": "Day",
      "rollOnFileSizeLimit": true,
      "fileSizeLimitBytes": 1048576,
      "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] [{MachineName}_{Tenant}] [{EnvironmentUserName}] [{ProcessId}] [{Guid}] [{ClassName}.{MethodName}] {Message:lj}{NewLine}{Exception}"
    }
  }
]
  • 每天零点,前一天的trace.log会被重命名为trace_YYYYMMDD.log(比如trace_20240520.log)
  • 当天内达到大小限制时,当前trace.log会被重命名为trace_YYYYMMDD_001.log,新日志继续写入trace.log

3. 修正配置语法错误

你原配置中outputTemplate末尾多了一个逗号,会导致配置解析失败,记得删除这个多余的逗号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:03:32