DotNETWeekly-io/DotNetWeekly

【文章推荐】HttpClient 定制化日志

Closed this issue · 1 comments

image

HttpClient 默认的日志格式是这样的

info: System.Net.Http.HttpClient.my-client.LogicalHandler[100]
      Start processing HTTP request GET https://www.google.com

如果想要定制化,可以实现 IHttpClientLogger 接口

public class HttpLogger : IHttpClientLogger
{
    private readonly ILogger<HttpLogger> _logger;

    public HttpLogger(ILogger<HttpLogger> logger)
    {
        _logger = logger
    }

    public void LogRequestFailed(object? context, HttpRequestMessage request, HttpResponseMessage? response, Exception exception, TimeSpan elapsed)
    {
    }

    public object? LogRequestStart(HttpRequestMessage request)
    {
    }

    public void LogRequestStop(object? context, HttpRequestMessage request, HttpResponseMessage response, TimeSpan elapsed)
    {
    }
}

这样可以将它注册到容器中

service.AddSingleton<IHttpClientLogger, HttpLogger>();
service.AddHttpClient("my-client", client =>
{
    client.BaseAddress = new Uri("https://www.google.com");
}).RemoveAllLoggers().AddLogger<IHttpClientLogger>(true);

为了移除默认的日志格式,需要调用 RemoveAllLoggers() 方法。