我正在编写一个自定义ILoggerProvider,它使用通过配置的IHttpClientFactory获得的HttpClient实例在HTTP上转发日志消息
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
}当我的ILoggerProvider转发一批日志时,它的HttpClient生成额外的日志消息,然后转发.导致堆栈溢出。
如何仅禁止--仅--在执行转发的方法的有限范围内生成的消息,以便从HttpClient或其他可能在该范围内记录的日志中筛选出日志?
发布于 2018-08-29 20:47:30
通过HttpClient创建的命名实例使用包含这些名称的日志类别。然后,发送到此转发提供程序的日志可以被过滤掉。
如果像这样创建了一个命名的HttpClient:
httpClientFactory.CreateClient(nameof(MyForwardingLoggerProvider))))然后,筛选出日志的一种可能方法是,当这个HttpClient实例试图在categoryName中创建具有提供程序名称的ILogger时,返回一个"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);
}
}发布于 2018-08-29 18:18:37
我正在编写一个自定义ILoggerProvider,它使用通过配置的IHttpClientFactory获得的HttpClient实例在HTTP上转发日志消息:
不要这样做,使用另一个与工厂无关的HttpClient。
https://stackoverflow.com/questions/52083818
复制相似问题