Как я могу предотвратить вход HttpClient через IHttpClientFactory в ILogger? - PullRequest
0 голосов
/ 29 августа 2018

Я пишу пользовательский ILoggerProvider, который пересылает сообщения журнала по HTTP с использованием экземпляра HttpClient, полученного с помощью настроенного IHttpClientFactory:

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

Когда мой ILoggerProvider пересылает партию журналов, его HttpClient генерирует дополнительные сообщения журнала, которые затем перенаправляются ..., что приводит к переполнению стека.

Как я могу подавить только сообщения, которые генерируются в ограниченной области метода, который выполняет пересылку, чтобы я мог отфильтровывать журналы из HttpClient или что-либо еще, что может регистрироваться во время что сфера?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Именованные экземпляры HttpClient, созданные с помощью IHttpClientFactory, используют категории журнала , содержащие эти имена. Журналы, отправленные этому поставщику, могут быть отфильтрованы.

Если имя HttpClient создано так:

httpClientFactory.CreateClient(nameof(MyForwardingLoggerProvider))))

Тогда один из возможных способов отфильтровать журналы - вернуть экземпляр «no-op», когда этот экземпляр HttpClient пытается создать ILogger с именем поставщика в categoryName:

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);
    }
}
0 голосов
/ 29 августа 2018

Я пишу пользовательский ILoggerProvider, который пересылает сообщения журнала по HTTP с использованием экземпляра HttpClient, полученного через настроенный IHttpClientFactory:

Только не делайте этого, используйте другой HttpClient, который не привязан к фабрике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...