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