尝试弄清楚如何在 Microsoft
Ilogger
抽象下使用 Serilog。后者读取"Logger"
中appsetting.json
部分下的日志级别设置,而Serilog读取"Serilog"
部分下的日志级别设置。很好。
但是他们如何一起工作?
如果我有使用 Microsoft
ILogger
抽象进行日志记录的代码,我会假设这些抽象将遵循 "Logger"
部分下的设置,并进一步受到 "Serilog"
部分下的设置的限制。 IE。假设这个应用程序设置。 json:
{
"Logging": {
"LogLevel": {
"Default": "Error"
}
},
"Serilog": {
"MinimumLevel": {
"Default": "Information"
}
}
}
我希望
ILogger
事件被过滤为仅包括 Error
及以上,然后也过滤为仅 Information
及以上(在这种情况下这是无操作)。
但这不是我在测试中看到的。相反,
"Logging"
部分的级别设置似乎完全被忽略了。
我认为考虑到
ILogger
是一个接口,它在 Serilog 场景中是由某个使用 Serilog 进行日志记录的类实现的 - 没有执行 Microsoft 代码。
但我想做的是编写一个实用程序包,我们的应用程序可以利用它来直接记录到 ApplicationInsights 跟踪(避免在 C# 和配置中使用样板代码),并且我希望以这样的方式来实现: (尽可能)我们的应用程序仅“看到”Microsoft 日志记录抽象,即并没有真正意识到 util 包使用 Serilog。
但是,如果日志级别(和其他日志记录设置)必须位于
"Serilog"
中的 appsettings.json
部分下,并且还使用 Serilog 名称(Verbose
与 Trace
、MinimumLevel
与 LogLevel
)
...?),那么 Serilog 就必须“闪耀”,不是吗?
有什么方法可以让我在没有 Serilog“闪亮通过”的情况下做到这一点?
(注意:我需要使用 Serilog,因为 Microsoft 的 ApplicationInsights 提供程序不支持日志范围,而我们确实想使用它。至少根据当前文档。)
Logging 配置完全由 Serilog 控制,这是我的配置方式,
{
"Serilog": {
"MinimumLevel": "Information",
"Override": {
"Microsoft.AspNetCore": "Warning"
},
"WriteTo": [
{
"Name": "Console"
}
]
}
}