禁用单个 .Net Core 控制器端点的日志记录

Posted

技术标签:

【中文标题】禁用单个 .Net Core 控制器端点的日志记录【英文标题】:Disable logging for single .Net Core controller endpoint 【发布时间】:2022-01-18 11:29:51 【问题描述】:

我有一个托管在 Azure 上的简单 .Net Core 3.1 Web API,并且对应用程序的索引路由进行了过多的运行状况检查,这些消息使日志泛滥:

INFO  2021-12-15 09:48:57,710 [22   ] Microsoft.AspNetCore.Hosting.Diagnostics - Request starting HTTP/1.1 GET http://localhost:21021/  
INFO  2021-12-15 09:48:57,714 [22   ] ft.AspNetCore.Routing.EndpointMiddleware - Executing endpoint '<RedactedApplicationName>.Web.Host.Controllers.HomeController.Index (<RedactedApplicationName>.Web.Host)'
INFO  2021-12-15 09:48:57,718 [22   ] c.Infrastructure.ControllerActionInvoker - Route matched with action = "Index", controller = "Home", area = "". Executing controller action with signature Microsoft.AspNetCore.Mvc.IActionResult Index() on controller <RedactedApplicationName>.Web.Host.Controllers.HomeController (<RedactedApplicationName>.Web.Host).
INFO  2021-12-15 09:48:57,735 [22   ] c.Infrastructure.ControllerActionInvoker - Executing action method <RedactedApplicationName>.Web.Host.Controllers.HomeController.Index (<RedactedApplicationName>.Web.Host) - Validation state: Valid
INFO  2021-12-15 09:48:57,736 [22   ] c.Infrastructure.ControllerActionInvoker - Executed action method <RedactedApplicationName>.Web.Host.Controllers.HomeController.Index (<RedactedApplicationName>.Web.Host), returned result Microsoft.AspNetCore.Mvc.RedirectResult in 0.0337ms.
INFO  2021-12-15 09:48:57,738 [22   ] vc.Infrastructure.RedirectResultExecutor - Executing RedirectResult, redirecting to /swagger.
INFO  2021-12-15 09:48:57,740 [22   ] c.Infrastructure.ControllerActionInvoker - Executed action <RedactedApplicationName>.Web.Host.Controllers.HomeController.Index (<RedactedApplicationName>.Web.Host) in 20.0366ms
INFO  2021-12-15 09:48:57,741 [22   ] ft.AspNetCore.Routing.EndpointMiddleware - Executed endpoint '<RedactedApplicationName>.Web.Host.Controllers.HomeController.Index (<RedactedApplicationName>.Web.Host)'
INFO  2021-12-15 09:48:57,744 [22   ] Microsoft.AspNetCore.Hosting.Diagnostics - Request finished in 33.7378ms 302 
INFO  2021-12-15 09:48:57,749 [19   ] Microsoft.AspNetCore.Hosting.Diagnostics - Request starting HTTP/1.1 GET http://localhost:21021/swagger/index.html  
INFO  2021-12-15 09:48:57,758 [6    ] Microsoft.AspNetCore.Hosting.Diagnostics - Request finished in 9.0414ms 200 text/html;charset=utf-8

我仍然希望保留信息级别的日志,因为我正在记录我希望在其他地方看到的其他信息。端点如下所示:

public IActionResult Index()

    return Redirect("/swagger");

是否有一个注释可以用来禁用这个单一控制器端点的日志记录?

【问题讨论】:

添加运行状况检查中间件并将 Azure 的运行状况检查指向该路径不是更有意义吗?重定向到招摇页面进行健康检查是浪费资源恕我直言 @CamiloTerevinto 这听起来是个好主意。我有一个 Azure Front Door,它发送这些运行状况探测来检查后端运行状况。您知道如何更改它将运行状况探测发送到的端点吗?我找不到前门的那个选项。 转到 Front Door Designer > 选择后端池 > 启用运行状况探测 > 更改路径(状态正下方) 【参考方案1】:

我认为您可以使用 appsetting.json 中的 logLevel 配置部分并执行以下操作:

    
      "Logging": 
      "IncludeScopes": false,
      "LogLevel": 
        "Default": "Trace",
        "System": "Information",
        "Acme.Controllers.IndexController": "None"
       
      
    

【讨论】:

我在主帖的 cmets 中继续使用 @CamiloTerevinto 的替代方法,并且不需要这个。如果有人可以对此进行测试并确认它可以工作,我可以选择它作为 awnser。

以上是关于禁用单个 .Net Core 控制器端点的日志记录的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 端点 + 全局 CORS

Asp.Net Core API 禁用启动完成消息

来自静态类的 ASP.NET Core Web API 日志记录

如何使用 LoggerFactory 和 Microsoft.Extensions.Logging 使用 C# 进行 .NET Core 控制台日志记录

.NET Core使用Nlog记录日志

通过 HttpClient 禁用单个 url 的请求日志记录