【问题标题】:Serilog with a custom template and JSON formatter带有自定义模板和 JSON 格式化程序的 Serilog
【发布时间】:2018-12-15 02:32:36
【问题描述】:

我正在使用带有 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 数据呢?

【问题讨论】:

  • 你好@Ionix:我几乎有同样的问题,在任何地方都找不到如何同时使用格式化程序和自定义模板。你找到解决办法了吗?
  • @kbaccouche 对不起,我的朋友是一个旧项目,我不记得了 :-( 我记得 github repo 上有一些相关的东西......你可能想在那里检查一下。祝你好运!

标签: asp.net-core serilog asp.net-core-2.1


【解决方案1】:

我不确定自从提出问题后发生了什么变化,但现在我确实得到了 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 级别,因为它被视为默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2012-04-10
    相关资源
    最近更新 更多