我正在编写一个自定义ILoggerProvider
,它使用通过配置的HttpClient
获得的IHttpClientFactory
实例通过HTTP转发日志消息:
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
}
当我的ILoggerProvider
转发一批日志时,它的HttpClient
会生成额外的日志消息,然后转发...导致堆栈溢出。
如何仅抑制在执行转发的方法的有限范围内生成的消息,以便我可以从HttpClient
或可能在该范围内记录的任何其他内容中过滤掉日志?
我正在编写一个自定义的ILoggerProvider,它使用通过配置的IHttpClientFactory获得的HttpClient实例通过HTTP转发日志消息:
只是不要这样做,使用另一个与工厂无关的HttpClient。
通过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);
}
}