如何通过IHttpClientFactory阻止HttpClient登录到ILogger?

问题描述 投票:0回答:2

我正在编写一个自定义ILoggerProvider,它使用通过配置的HttpClient获得的IHttpClientFactory实例通过HTTP转发日志消息:

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpClient();
}

当我的ILoggerProvider转发一批日志时,它的HttpClient会生成额外的日志消息,然后转发...导致堆栈溢出。

如何仅抑制在执行转发的方法的有限范围内生成的消息,以便我可以从HttpClient或可能在该范围内记录的任何其他内容中过滤掉日志?

asp.net-core asp.net-core-2.0
2个回答
2
投票

我正在编写一个自定义的ILoggerProvider,它使用通过配置的IHttpClientFactory获得的HttpClient实例通过HTTP转发日志消息:

只是不要这样做,使用另一个与工厂无关的HttpClient。


0
投票

通过HttpClient创建的IHttpClientFactory的命名实例使用包含这些名称的log categories。然后可以过滤掉发送到此转发提供程序的日志。

如果像这样创建一个名为HttpClient

httpClientFactory.CreateClient(nameof(MyForwardingLoggerProvider))))

然后,过滤掉日志的一种可能方法是,当此HttpClient实例尝试使用ILogger中的提供程序名称创建categoryName时,返回“no-op”实例:

ILogger ILoggerProvider.CreateLogger(String categoryName)
{
    if (categoryName.StartsWith($"System.Net.Http.HttpClient.{nameof(MyForwardingLoggerProvider)}."))
    {
        // Ignores all logs
        return NoopLogger.Instance;
    }
    else
    {
        // Performs log forwarding
        return new MyForwardingLogger(categoryName);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.