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

.NET 8控制台应用:如何让Serilog控制台日志输出ThreadId?

解决Serilog控制台日志缺失ThreadId的问题

问题原因

你当前的控制台Sink配置同时指定了JsonFormatter和outputTemplate,这会导致行为冲突:JsonFormatter会忽略outputTemplate,但你的控制台输出却呈现出文本模板样式,说明实际生效的是文本格式化逻辑而非JSON格式化。同时你的outputTemplate中没有引用{ThreadId}字段,因此控制台日志无法显示ThreadId;而文件Sink的JSON格式化正常工作,所以能包含ThreadId。

方案1:文本格式输出(带ThreadId)

修改控制台Sink的配置,移除formatter参数,并在outputTemplate中添加{ThreadId}字段:

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Async" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "Async",
        "Args": {
          "configure": [
            {
              "Name": "Console",
              "Args": {
                "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console",
                "outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3} Thread:{ThreadId}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}"
              }
            },
            {
              "Name": "File",
              "Args": {
                "path": "logs/schedular_log_.json",
                "rollingInterval": "Day",
                "shared": true,
                "rollOnFileSizeLimit": true,
                "retainedFileCountLimit": 7,
                "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
              }
            }
          ]
        }
      }
    ],
    "Enrich": [ "WithThreadId", "FromLogContext", "WithExceptionDetails" ],
    "Properties": {
      "Application": "Schedular"
    }
  }
}

修改后控制台日志会显示类似:

[13:29:12 INF Thread:1] {"Id": "bb497c8e-9e92-4981-9c98-d3e94ed1b009", "Name": "Mat0", ...} <s:>

方案2:控制台输出完整JSON(包含ThreadId)

如果你希望控制台也输出和文件一样的完整JSON结构,只需移除控制台Sink的outputTemplate参数(JsonFormatter会忽略该参数):

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Async" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "Async",
        "Args": {
          "configure": [
            {
              "Name": "Console",
              "Args": {
                "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console",
                "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
              }
            },
            {
              "Name": "File",
              "Args": {
                "path": "logs/schedular_log_.json",
                "rollingInterval": "Day",
                "shared": true,
                "rollOnFileSizeLimit": true,
                "retainedFileCountLimit": 7,
                "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
              }
            }
          ]
        }
      }
    ],
    "Enrich": [ "WithThreadId", "FromLogContext", "WithExceptionDetails" ],
    "Properties": {
      "Application": "Schedular"
    }
  }
}

修改后控制台会输出包含ThreadId的完整JSON日志,与文件日志格式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:57:56