Freigeben über


HTTP: Von IHttpClientFactory erstellte HttpClient-Instanzen protokollieren Ganzzahl-Statuscodes

HttpClient Instanzen, die von IHttpClientFactory erstellt wurden, protokollieren HTTP-Statuscodes als ganze Zahlen statt mit Namen der Statuscodes.

Eingeführte Version

5.0 Vorschau 1

Altes Verhalten

Die Protokollierung verwendet die Textbeschreibungen von HTTP-Statuscodes. Berücksichtigen Sie die folgenden Protokollmeldungen:

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

Neues Verhalten

Die Protokollierung verwendet die ganzzahligen Werte von HTTP-Statuscodes. Berücksichtigen Sie die folgenden Protokollmeldungen:

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

Grund für Änderung

Das ursprüngliche Verhalten dieser Protokollierung ist inkonsistent mit anderen Teilen von ASP.NET Core, die immer ganze Zahlenwerte verwendet haben. Die Inkonsistenz erschwert das Abfragen von Protokollen über strukturierte Protokollierungssysteme wie Elasticsearch. Weitere Informationen finden Sie unter dotnet/extensions#1549.

Die Verwendung ganzzahliger Werte ist flexibler als Text, da Abfragen für Wertebereiche zulässig sind.

Das Hinzufügen eines weiteren Protokollwerts zum Erfassen des ganzzahligen Statuscodes wurde berücksichtigt. Leider würde dies eine weitere Inkonsistenz mit dem Rest von ASP.NET Core einführen. HttpClient-Protokollierung und HTTP-Server/Hostingprotokollierung verwenden bereits denselben StatusCode Schlüsselnamen.

Die beste Option besteht darin, Protokollierungsabfragen zu aktualisieren, um die ganzzahligen Werte von Statuscodes zu verwenden. Diese Option kann probleme beim Schreiben von Abfragen in mehreren ASP.NET Core-Versionen verursachen. Die Verwendung ganzzahliger Zahlen für diesen Zweck ist jedoch wesentlich flexibler für die Abfrage von Protokollen.

Wenn Sie die Kompatibilität mit dem alten Verhalten erzwingen und Textstatuscodes verwenden müssen, ersetzen Sie die IHttpClientFactory Protokollierung durch Ihre eigenen:

  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 Microsoft.Extensions.Http NuGet-Paket zu vermeiden.

  3. Ersetzen Sie die integrierte Implementierung von LoggingHttpMessageHandlerBuilderFilter mit Ihrer eigenen in der Startup.ConfigureServices-Methode des Projekts. 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