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

Serilog配置问题:如何实现每小时生成单个日志文件?

如何配置Serilog实现每小时仅生成单个日志文件?

当前使用Serilog的File Sink时,日志按小时滚动但同一小时内生成了多个拆分文件(如log-2024080512_001.txt、log-2024080512_002.txt),希望每小时仅生成一个日志文件。原配置如下:

{
  "Serilog": {
    "Using": ["Serilog.Sinks.File"],
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "./logs/log-.txt",
          "rollingInterval": "Hour",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
        }
      }
    ],
    "Enrich": ["FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId"]
  }
}

解决方案

问题出在Serilog File Sink的默认行为:它会同时按时间间隔和文件大小触发滚动。当单小时内的日志文件达到默认1GB的大小限制时,就会生成带序号的拆分文件。要实现每小时仅一个文件,只需禁用按大小拆分的逻辑:

在WriteTo的Args中添加"rollOnFileSizeLimit": false配置项,修改后的完整配置如下:

{
  "Serilog": {
    "Using": ["Serilog.Sinks.File"],
    "MinimumLevel": "Information",
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "./logs/log-.txt",
          "rollingInterval": "Hour",
          "rollOnFileSizeLimit": false,
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
        }
      }
    ],
    "Enrich": ["FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId"]
  }
}

说明

添加该配置后,Serilog会忽略文件大小限制,仅按rollingInterval: "Hour"配置的小时间隔滚动日志,同一小时内的所有日志都会写入同一个文件,不会生成带序号的拆分文件。

如果你的业务场景中单小时日志量极大,担心文件体积过大,也可以通过fileSizeLimitBytes参数设置一个更大的阈值(例如设为10737418240即10GB),同时保持rollOnFileSizeLimit: false,只要确保单小时内日志不会超过这个阈值,就能保证每小时仅生成一个文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:50:00