更改ASP中运行状况检查端点的日志记录详细程度.. NET Core应用程序



我有一个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();

相关内容

  • 没有找到相关文章