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.
Empfohlene Aktion
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:
Kopieren Sie die .NET Core 3.1-Versionen der folgenden Klassen in Ihr Projekt:
Benennen Sie die Klassen um, um Konflikte mit öffentlichen Typen im NuGet-Paket Microsoft.Extensions.Http zu vermeiden.
Ersetzen Sie die integrierte Implementierung von
LoggingHttpMessageHandlerBuilderFilter
in derStartup.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>(); }