HTTP: HttpClient-Instanzen, die von IHttpClientFactory erstellt wurden, protokollieren Integerstatuscodes

HttpClient-Instanzen, die durch IHttpClientFactory erstellt werden, protokollieren HTTP-Statuscodes als Integerwerte anstatt als Statuscodenamen.

Eingeführt in Version

5.0 Preview 1

Altes Verhalten

Bei der Protokollierung werden die Textbeschreibungen der HTTP-Statuscodes verwendet. Sehen Sie sich die folgenden Protokollmeldungen an:

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

Neues Verhalten

Bei der Protokollierung werden die Integerwerte der HTTP-Statuscodes verwendet. Sehen Sie sich die folgenden Protokollmeldungen an:

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

Grund für die Änderung

Das ursprüngliche Verhalten dieser Protokollierung ist nicht mit anderen Komponenten von ASP.NET Core konsistent, die standardmäßig Integerwerte verwenden. Die Inkonsistenz bewirkt, dass Protokolle über strukturierte Protokollierungssysteme wie Elasticsearch schwierig abgefragt werden können. Weitere Informationen finden Sie unter dotnet/extensions#1549.

Die Verwendung von Integerwerten bietet mehr Flexibilität als die Verwendung von Textwerten, da so Abfragen für Wertebereiche möglich sind.

Wir haben auch überlegt, einen weiteren Protokollwerts zum Erfassen des Integerstatuscodes hinzuzufügen. Leider würde das zu einer weiteren Inkonsistenz mit dem Rest von ASP.NET Core führen. Die HttpClient-Protokollierung und die HTTP-Server- und -Hostingprotokollierung verwenden bereits den gleichen StatusCode-Schlüsselnamen.

Die beste Option besteht darin, Protokollierungsabfragen zu aktualisieren, damit die Integerwerte der Statuscodes verwendet werden. Diese Methode kann das Schreiben von Abfragen für mehrere ASP.NET Core-Versionen erschweren. Die Verwendung von Integerwerten für diesen Zweck ist jedoch viel flexibler für das Abfragen von Protokollen.

Wenn Sie die Kompatibilität mit dem alten Verhaltensweisen erzwingen und Textstatuscodes verwenden müssen, ersetzen Sie die IHttpClientFactory-Protokollierung durch ihre eigene:

  1. Kopieren Sie die .NET Core 3.1-Versionen der folgenden Klassen in Ihr Projekt:

  2. Benennen Sie die Klassen um, um Konflikte mit öffentlichen Typen im NuGet-Paket Microsoft.Extensions.Http zu vermeiden.

  3. Ersetzen Sie die integrierte Implementierung von LoggingHttpMessageHandlerBuilderFilter in der Startup.ConfigureServices-Methode des Projekts durch ihre eigene. Zum Beispiel:

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

Betroffene APIs

System.Net.Http.HttpClient