Serilog 3.1.0+如何将@tr/@sp改为TraceId/SpanId输出?
如何将Serilog的TraceId/SpanId从缩写@tr/@sp改为全称输出
Serilog 3.1.0及以上版本默认会将TraceId和SpanId以@tr、@sp的缩写形式输出到JSON日志中。要改为使用全称TraceId和SpanId,可以通过配置JsonFormatter的属性映射来实现,以下是两种常见场景的配置方法:
代码配置(直接在Logger初始化时设置)
在构建LoggerConfiguration时,为JsonFormatter指定propertyNameMap字典,将缩写映射为全称:
Log.Logger = new LoggerConfiguration() .WriteTo.Console(new JsonFormatter( propertyNameMap: new Dictionary<string, string> { { "@tr", "TraceId" }, { "@sp", "SpanId" } })) // 按需添加其他配置(如Enrich、MinimumLevel等) .CreateLogger();
如果是ASP.NET Core项目,在Program.cs中配置:
var builder = WebApplication.CreateBuilder(args); builder.Host.UseSerilog((context, config) => { config.WriteTo.Console(new JsonFormatter( propertyNameMap: new Dictionary<string, string> { { "@tr", "TraceId" }, { "@sp", "SpanId" } })); }); // 后续项目配置...
配置文件(appsettings.json)方式
如果使用Serilog.Settings.Configuration包读取配置文件,可以在appsettings.json中添加如下配置:
{ "Serilog": { "MinimumLevel": "Information", "WriteTo": [ { "Name": "Console", "Args": { "formatter": { "type": "Serilog.Formatting.Json.JsonFormatter, Serilog", "propertyNameMap": { "@tr": "TraceId", "@sp": "SpanId" } } } } ] } }
配置完成后,生成的JSON日志就会将原@tr字段替换为TraceId,@sp替换为SpanId,符合你需要的输出格式。
内容的提问来源于stack exchange,提问作者congcong he
相关产品推荐
相关产品推荐

