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

如何在ASP.Net Core中为每个类或任务创建独立的Serilog日志

实现单任务独立日志文件配置方案

1. 安装依赖包

先安装NuGet包 Serilog.Sinks.Map,该包支持按日志上下文属性拆分不同输出目标。

2. 修改Serilog JSON配置

替换原有File sink为Map sink,按任务ID拆分日志文件,配置示例如下:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Map" ],
    "MinimumLevel": {
      "Default": "Warning",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
    "WriteTo": [
      {
        "Name": "Map",
        "Args": {
          "keyProperty": "TaskId",
          "defaultIfKeyMissing": "common",
          "configure": [
            {
              "Name": "File",
              "Args": {
                "rollingInterval": "Day",
                "fileSizeLimitBytes": 10485760,
                "path": "c://logs/RDJOBS_{TaskId}_{Date}_{Level}.json",
                "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
              }
            }
          ]
        }
      },
      {
        "Name": "Seq",
        "Args": {
          "serverUrl": "http://localhost:5421"
        }
      }
    ]
  }
}

3. 业务代码注入任务标识

每个任务启动时,通过LogContext写入唯一的任务ID属性,该属性会自动关联到对应日志文件:

// yourTaskUniqueId为当前任务的唯一标识,可自定义为任务编号、任务名称、GUID等值
using (LogContext.PushProperty("TaskId", yourTaskUniqueId))
{
    // 此处放置任务执行逻辑,内部输出的所有日志都会归属到当前TaskId对应的日志文件
}

注意说明

  • 配置中Enrich节点必须保留FromLogContext,否则无法识别上下文的TaskId属性
  • 没有携带TaskId属性的日志会默认写入common开头的公共日志文件,不需要公共日志可调整defaultIfKeyMissing配置关闭对应输出
  • 原有Seq sink的输出逻辑不受影响,所有日志仍会正常上报到Seq服务

内容的提问来源于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.06 00:45:00