.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
相关产品推荐
相关产品推荐

