HTTP: wystąpienia httpclient utworzone przez kody stanu liczby całkowitej dziennika IHttpClientFactory

HttpClient wystąpienia utworzone przez IHttpClientFactory kody stanu HTTP dziennika jako liczby całkowite zamiast z nazwami kodów stanu.

Wprowadzona wersja

5.0 (wersja zapoznawcza 1)

Stare zachowanie

Rejestrowanie używa tekstowych opisów kodów stanu HTTP. Rozważ następujące komunikaty dziennika:

Received HTTP response after 56.0044ms - OK
End processing HTTP request after 70.0862ms - OK

Nowe zachowanie

Rejestrowanie używa wartości całkowitych kodów stanu HTTP. Rozważ następujące komunikaty dziennika:

Received HTTP response after 56.0044ms - 200
End processing HTTP request after 70.0862ms - 200

Przyczyna wprowadzenia zmiany

Oryginalne zachowanie tego rejestrowania jest niezgodne z innymi częściami ASP.NET Core, które zawsze używały wartości całkowitych. Niespójność sprawia, że dzienniki są trudne do wykonywania zapytań za pośrednictwem systemów rejestrowania strukturalnego, takich jak Elasticsearch. Aby uzyskać więcej informacji na temat kontekstu, zobacz dotnet/extensions#1549.

Użycie wartości całkowitych jest bardziej elastyczne niż tekst, ponieważ umożliwia wykonywanie zapytań dotyczących zakresów wartości.

Rozważono dodanie innej wartości dziennika w celu przechwycenia kodu stanu liczby całkowitej. Niestety, w ten sposób wprowadzonoby kolejną niespójność z resztą ASP.NET Core. Rejestrowanie httpClient i rejestrowanie serwera HTTP/hostingu używają już tej samej StatusCode nazwy klucza.

Najlepszą opcją jest zaktualizowanie zapytań rejestrowania w celu użycia wartości całkowitych kodów stanu. Ta opcja może spowodować trudności z pisaniem zapytań w wielu wersjach ASP.NET Core. Jednak użycie liczb całkowitych w tym celu jest znacznie bardziej elastyczne w przypadku wykonywania zapytań dotyczących dzienników.

Jeśli musisz wymusić zgodność ze starym zachowaniem i użyć kodów stanu tekstowego, zastąp IHttpClientFactory rejestrowanie własnym:

  1. Skopiuj do projektu wersje platformy .NET Core 3.1 z następujących klas:

  2. Zmień nazwy klas, aby uniknąć konfliktów z typami publicznymi w pakiecie NuGet Microsoft.Extensions.Http .

  3. Zastąp wbudowaną implementację LoggingHttpMessageHandlerBuilderFilter własnymi metodami projektu Startup.ConfigureServices . Na przykład:

    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>();
    }
    

Dotyczy interfejsów API

System.Net.Http.HttpClient