删除 ASP.NET Core 中的 http 客户端日志处理程序

Ste*_*ier 9 c# httpclient asp.net-core

使用HttpClientFactory.NET Core 时,是否可以以某种方式删除默认值LoggingHttpMessageHandler

我期待像下面这样的东西,但它似乎不存在

services.AddHttpClient("minos")
   .RemoveHttpMessageHandler<LoggingHttpMessageHandler>();
Run Code Online (Sandbox Code Playgroud)

Moi*_*jik 6

您可以通过将 HttpClient 的日志级别设置为none在 appsettings.json 中配置它:

但是,这也将启用来自 System 根命名空间中所有其他组件的信息性消息。因此,最好通过将配置限制为“System.Net.Http.HttpClient”来配置日志记录,以便您仅通过通过 HttpClientFactory 创建的客户端添加来自 HTTP 请求的消息:

    {
      "Logging": {
        "LogLevel": {
          "Default": "Warning",
          "System.Net.Http.HttpClient": "Information"
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)

https://www.stevejgordon.co.uk/httpclientfactory-asp-net-core-logging

  • 谢谢你,但我不想只删除日志,我想从管道中删除整个中间件(或消息处理程序),以便更快。我在 github 上留下了评论,他们给了我一个我还没有尝试过的解决方案 (4认同)
  • 我更喜欢这个解决方案。这样我们就可以将日志记录级别更改为错误。而不是完全删除 httpclient 的所有日志记录 (2认同)

Ste*_*ier 6

对于任何需要这个的人,我在 github repo 上打开了一个问题,其中一位贡献者回复了以下内容(我仍然需要尝试一下)

        foreach (var service in serviceCollection.Where(s => s.ServiceType == typeof(IHttpMessageHandlerFactory)))
        {
            serviceCollection.Remove(service);
        }
Run Code Online (Sandbox Code Playgroud)

更新: 改用以下内容(以上内容不完全有效)

services.RemoveAll<IHttpMessageHandlerBuilderFilter>();
Run Code Online (Sandbox Code Playgroud)

https://github.com/aspnet/HttpClientFactory/issues/196#issuecomment-431440889