HTTP: экземпляры HttpClient, созданные кодами состояния целочисленного числа журнала IHttpClientFactory
Экземпляры HttpClient, создаваемые IHttpClientFactory, регистрируют коды состояния HTTP как целые числа вместо имен кодов состояния.
Представленные версии
5.0 Предварительная версия 1
Старое поведение
Ведение журнала использует текстовые описания кодов состояния HTTP. Рассмотрим следующее сообщение журнала:
Received HTTP response after 56.0044ms - OK
End processing HTTP request after 70.0862ms - OK
Новое поведение
Ведение журнала использует целочисленные значения кодов состояния HTTP. Рассмотрим следующее сообщение журнала:
Received HTTP response after 56.0044ms - 200
End processing HTTP request after 70.0862ms - 200
Причина изменения
Исходная настройка такого ведения журнала не согласуется с другими частями ASP.NET Core, которые всегда использовали целые значения. Несогласованность усложняет запросы к журналам с помощью структурированных систем ведения журналов, таких как Elasticsearch. Дополнительный контекст см. в dotnet/extensions#1549.
Целочисленные значения дают больше гибкости по сравнению с текстом, так как позволяют выполнять запросы к диапазонам значений.
Рассматривалось добавление еще одного значения журнала для записи целочисленного кода состояния. К сожалению, это могло привести к несогласованности с остальной частью ASP.NET Core. При ведении журнала HttpClient и сервера/хостинга HTTP уже используется одно и то же имя ключа StatusCode
.
Рекомендуемое действие
Лучшим вариантом является обновление запросов журнала для использования целочисленных значений кодов состояния. Этот вариант может вызвать некоторые трудности при записи запросов в нескольких версиях ASP.NET Core. Однако использование целых чисел для этой цели предоставляет больше возможностей для запросов журналов.
Если необходимо обеспечить совместимость со старым поведением и использовать текстовые коды состояния, замените IHttpClientFactory
собственными:
Скопируйте в проект версии .NET Core 3.1 следующих классов:
Переименуйте классы, чтобы избежать конфликтов с открытыми типами в пакете NuGet Microsoft.Extensions.Http.
Замените встроенную реализацию
LoggingHttpMessageHandlerBuilderFilter
собственной в методеStartup.ConfigureServices
проекта. Например:public void ConfigureServices(IServiceCollection services) { // Other service registrations go first. Code omitted for brevity. // Place the following after all AddHttpClient registrations. services.RemoveAll<IHttpMessageHandlerBuilderFilter>(); services.AddSingleton<IHttpMessageHandlerBuilderFilter, MyLoggingHttpMessageHandlerBuilderFilter>(); }