我有一个ASP。. NET Core应用程序。实际上是。NET 5),它以标准的方式使用
实现了运行状况检查端点。services.AddHealthChecks()...
运行状况检查工作正常。问题是它们被频繁调用,因此它们在我们的存储中产生了大量的日志。
Service具有标准的。net日志机制和appsettings中的默认值。json像
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Debug",
"Microsoft.Hosting.Lifetime": "Debug"
}
},
问题是我如何为这个健康检查(以及它的内部实现,如EF)更改冗长级别(例如为Information
)。核心内容或其他内容)而在其他地方保持Debug
?是否有任何参数或设置来帮助解决这个问题?
这里的目标是减少日志存储消耗。
设置文件:
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Debug",
"Microsoft.Hosting.Lifetime": "Debug"
}
},
通过在LogLevel
配置对象中指定"namespace":"LogLevel"
,可以在命名空间级别配置LogLevel。
例如:
你看到很多dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000] Opening connection to database 'some_db' on server 'tcp://localhost:5432'
消息。
从这一行可以看出,它们来自Microsoft.EntityFrameworkCore.Database.Connection
对象,位于Microsoft.EntityFrameworkCore.Database
命名空间内。
所以你可以修改Microsoft
,或Microsoft.EntityFrameworkCore
,甚至Microsoft.EntityFrameworkCore.Database
命名空间的LogLevel为Information
,例如:
"Logging": {
"LogLevel": {
"Default": "Debug",
"Microsoft": "Debug",
"Microsoft.Hosting.Lifetime": "Debug",
"Microsoft.EntityFrameworkCore.Database": "Information"
}
},
现在dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000] Opening connection to database 'some_db' on server 'tcp://localhost:5432'
行不会被记录,因为它的级别是Debug
,最小阈值配置为Information
。
编辑
看起来你正在尝试根据请求的上下文进行过滤,而不是仅仅使用名称空间。
AFAIK, aspnetcore日志包不能这样做。另一方面,Serilog在Serilog的帮助下。表达式可以过滤掉来自特定请求的日志消息。
从Serilog。自述文件:
过滤示例
Serilog。Expressions将byexclude()和byinclingonly()重载添加到接受过滤器表达式的Filter配置对象中:
Log.Logger = new LoggerConfiguration() .Filter.ByExcluding("RequestPath like '/health%'") .CreateLogger();