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

lon*_*nix 6 serilog asp.net-core asp.net-core-2.1

我在 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"
Run Code Online (Sandbox Code Playgroud)

那么如何获得JSON输出,同时获得SourceContext我需要的数据呢?

lon*_*nix 2

我不确定自提出问题以来发生了什么变化,但现在我确实得到了变量SourceContext。我在 ASP.NET Core 5 上使用Serilog.AspNetCoreversion 。3.4.0

这有效:

{
  "Name": "File",
  "Args": {
    // ...
    //"outputTemplate": "",                          // DO NOT USE THIS
    "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
  }
}
Run Code Online (Sandbox Code Playgroud)

只是不要同时使用outputTemplateand 。formatter

这个配置给了我变量@t, @mt, @l, SourceContext

@l级别不包含注释Information,因为该级别被视为默认值。