【问题标题】:Set Log Levels for Microsoft.* , System, and AspNet when using Serilog使用 Serilog 时为 Microsoft.*、System 和 AspNet 设置日志级别
【发布时间】:2022-11-12 05:15:01
【问题描述】:
我一直以为
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
会将我的项目代码的日志级别设置为调试,并使 Microsoft.* 命名空间在信息级别或更高级别进行日志记录。似乎没有。使用此配置,AspNetCore 基础架构会在调试级别进行日志记录。
如何将 Microsoft.* 定位为不使用默认级别?
我正在使用 Serilog,但注入的 Logger 都是 Microsoft.Extensions.Logging.ILogger 所以我希望 Microsoft.Extensions.Logging 配置能够启动。
这是一个错误的假设吗?
【问题讨论】:
标签:
asp.net-core
microsoft-extensions-logging
serilog-filter
【解决方案1】:
是的,Serilog 在与 Extensions.Logging 一起使用时会尊重 Logging.LogLevel 部分的假设是错误的。它没有。
要从配置中读取 serilog 级别,一些选项是:
var defaultLogLevel = configuration.GetLogLevel("Default");
var aspNetCoreLogLevel = configuration.GetLogLevel("Microsoft.AspNetCore");
var microsoftLogLevel = configuration.GetLogLevel("Microsoft");
var logger = new LoggerConfiguration()
.MinimumLevel.Is(defaultLogLevel)
.MinimumLevel.Override("Microsoft.AspNetCore", aspNetCoreLogLevel)
.MinimumLevel.Override("Microsoft", microsoftLogLevel)
// ... etc ...
// ...
static LogEventLevel GetLogLevel(this IConfiguration configuration, string @namespace, string fallbackLevel = "Information")
{
return Enum.Parse<LogEventLevel>(configuration["Logging:LogLevel:" + @namespace] ?? fallbackLevel);
}
但是最低级别的配置方法的优点是您可以使用 reloadOnChange