带有自定义模板和 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"
}
}
只是不要同时使用 outputTemplate
和 formatter
。
此配置为我提供了变量 @t
、@mt
、@l
、SourceContext
。
请注意 @l
不包含在 Information
级别中,因为这被视为默认级别。
我在 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"
}
}
只是不要同时使用 outputTemplate
和 formatter
。
此配置为我提供了变量 @t
、@mt
、@l
、SourceContext
。
请注意 @l
不包含在 Information
级别中,因为这被视为默认级别。