带有自定义模板和 JSON 格式化程序的 Serilog

Serilog with a custom template and JSON formatter

我在 ASP.NET Core 2.1 中使用 Serilog,并通过 appsettings.json.

配置它

默认模板不包含 {SourceContext},所以我使用包含它的自己的模板。但我还想要使用 JSON.

进行结构化日志记录

我在 Serilog wiki 的某处读到我无法同时指定 formatter(对于 JSON 输出)和 outputTemplate

所以我不能这样做,例如:

"outputTemplate": "{Timestamp:yyyy-MM-dd} {Level:u3} {SourceContext} {Message:lj}{NewLine}{Exception}",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"

那么我怎样才能得到 JSON 输出,同时又得到我需要的 SourceContext 数据呢?

我不确定在提出问题后发生了什么变化,但现在我确实得到了 SourceContext 变量。我在 ASP.NET Core 5.

上使用 Serilog.AspNetCore 版本 3.4.0

这个有效:

{
  "Name": "File",
  "Args": {
    // ...
    //"outputTemplate": "",                          // DO NOT USE THIS
    "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
  }
}

只是不要同时使用 outputTemplateformatter

此配置为我提供了变量 @t@mt@lSourceContext

请注意 @l 不包含在 Information 级别中,因为这被视为默认级别。