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

如何通过JSON配置Serilog分文件记录不同级别日志?

解决Serilog JSON配置分级别写入不同文件的问题

你之前的配置问题在于:LogEventLevel不是File接收器的合法参数,而RestrictedToMinimumLevel仅设置最低级别(比如设为Information会包含所有≥Information的日志,自然也会混入Error/Fatal),所以两个文件才会写入全量日志。

要实现指定级别范围拆分日志,需要结合Serilog的过滤功能,通过Filter.ByIncludingOnly表达式精准筛选写入的日志级别,具体步骤如下:

1. 安装依赖包

确保项目已安装Serilog.Filters.Expressions(支持级别表达式过滤的必要依赖):

dotnet add package Serilog.Filters.Expressions

2. 修改JSON配置文件

替换原WriteTo节点内容,为每个文件接收器添加Filter配置,指定要包含的日志级别:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Information",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "./logs/log-informacion-.txt",
          "rollingInterval": "Day"
        },
        "Filter": [
          {
            "Name": "ByIncludingOnly",
            "Args": {
              "expression": "Level.Information or Level.Warning"
            }
          }
        ]
      },
      {
        "Name": "File",
        "Args": {
          "path": "./logs/log-errores-.txt",
          "rollingInterval": "Day"
        },
        "Filter": [
          {
            "Name": "ByIncludingOnly",
            "Args": {
              "expression": "Level.Error or Level.Fatal"
            }
          }
        ]
      }
    ]
  }
}

3. 验证效果

保持你的Program.cs代码不变,重新运行项目后:

  • log-informacion-.txt仅写入Information和Warning级别的日志
  • log-errores-.txt仅写入Error和Fatal级别的日志

关键说明

  • Filter.ByIncludingOnly会只保留符合表达式条件的日志,精准控制写入范围
  • 表达式中的Level.XXX对应Serilog的日志级别枚举,支持or/and逻辑组合
  • 全局MinimumLevel仍需保留,它控制Serilog接收的最低日志级别,避免遗漏需要处理的日志

内容的提问来源于stack exchange,提问作者Álvaro García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:32:51