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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:16:43