ASP.Net Core 2中通过appsettings配置Serilog JsonFormatter无效
解决ASP.NET Core 2中通过appsettings.json配置Serilog输出JSON格式的问题
我之前在ASP.NET Core 2项目里也踩过这个坑,折腾了好久才找到正确的配置方式,给你分享两个亲测有效的方案:
首先,先确认你已经安装了对应的NuGet包:
- 用标准JSON格式化器:安装
Serilog.Formatting.Json - 用紧凑JSON格式化器:安装
Serilog.Formatting.Compact - 别忘了核心包
Serilog.AspNetCore,这是ASP.NET Core集成Serilog必须的
方案一:配置标准JSON输出(JsonFormatter)
直接在appsettings.json里按下面的结构配置,重点是WriteTo节点里的formatter参数要指定完整的类型名和程序集:
{ "Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Formatting.Json" ], "MinimumLevel": "Information", "WriteTo": [ { "Name": "Console", "Args": { "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog.Formatting.Json" } } ], "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ] } }
方案二:配置紧凑JSON输出(CompactJsonFormatter)
和上面类似,只是换一下格式化器的类型:
{ "Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Formatting.Compact" ], "MinimumLevel": "Information", "WriteTo": [ { "Name": "Console", "Args": { "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact" } } ], "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ] } }
关键注意事项
Using数组里必须包含格式化器对应的程序集名称,不然Serilog找不到格式化器类型- 如果是输出到文件而不是控制台,只需要把
WriteTo里的Name改成File,并补充path参数,formatter配置不变 - 最后要确保在
Program.cs里正确加载Serilog配置,代码如下:
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseSerilog((hostingContext, loggerConfig) => loggerConfig.ReadFrom.Configuration(hostingContext.Configuration)) .UseStartup<Startup>() .Build();
我当时就是因为漏加了Using里的程序集引用,导致格式化器一直不生效,按照上面的配置应该就能解决你的问题了。
内容的提问来源于stack exchange,提问作者Stuart Northcott
相关产品推荐
相关产品推荐

