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

ASP.NET Core中通过appsettings.json配置Serilog按类/任务生成独立日志文件

Serilog 按类/任务拆分独立日志文件的appsettings.json配置方案

前置依赖

你需要先在项目中安装以下NuGet包,确保配置过滤功能正常工作:

  • Serilog.Settings.Configuration:Serilog读取配置文件的核心包
  • Serilog.Filters.Expressions:支持在配置文件中编写过滤表达式

完整配置示例

所有拆分逻辑均在appsettings.json中完成,无需修改C#初始化代码(需保证原有Serilog初始化代码包含.ReadFrom.Configuration(configuration)调用):

"Serilog": {
  "Using": [ "Serilog.Sinks.File", "Serilog.Filters.Expressions" ],
  "MinimumLevel": {
    "Default": "Warning",
    "Override": {
      "Microsoft": "Warning",
      "System": "Warning"
    }
  },
  "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
  "WriteTo": [
    // 公共Seq上报sink,所有日志都会上报,不需要可删除
    {
      "Name": "Seq",
      "Args": {
        "serverUrl": "http://localhost:5421"
      }
    },
    // 特定类独立日志示例:匹配MyApp.Services.UserService类产生的日志
    {
      "Name": "Logger",
      "Args": {
        "configureLogger": {
          "Filter": [
            {
              "Name": "ByIncludingOnly",
              "Args": {
                "expression": "SourceContext = 'MyApp.Services.UserService'"
              }
            }
          ],
          "WriteTo": [
            {
              "Name": "File",
              "Args": {
                "rollingInterval": "Day",
                "fileSizeLimitBytes": 10485760,
                "path": "c://logs/user_service_{Date}.json",
                "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
              }
            }
          ]
        }
      }
    },
    // 特定任务独立日志示例:匹配携带TaskName=ImportDataTask属性的日志
    {
      "Name": "Logger",
      "Args": {
        "configureLogger": {
          "Filter": [
            {
              "Name": "ByIncludingOnly",
              "Args": {
                "expression": "TaskName = 'ImportDataTask'"
              }
            }
          ],
          "WriteTo": [
            {
              "Name": "File",
              "Args": {
                "rollingInterval": "Day",
                "fileSizeLimitBytes": 10485760,
                "path": "c://logs/import_data_task_{Date}.json",
                "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
              }
            }
          ]
        }
      }
    },
    // 剩余通用日志输出,不需要可删除
    {
      "Name": "File",
      "Args": {
        "rollingInterval": "Day",
        "fileSizeLimitBytes": 10485760,
        "path": "c://logs/common_{Date}.json",
        "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
      }
    }
  ]
}

使用说明

  • 按类拆分场景:正常通过构造函数注入ILogger<T>即可,Serilog会自动为日志添加SourceContext属性,属性值为对应类的全限定名,匹配配置中的过滤规则后会输出到独立文件。
  • 按任务拆分场景:执行目标任务前调用LogContext.PushProperty("TaskName", "你的任务标识"),该上下文内产生的所有日志都会携带对应TaskName属性,匹配规则后输出到独立文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:00:00