Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les instances HttpClient créées par IHttpClientFactory journalisent les codes d'état HTTP sous forme d'entiers plutôt qu'avec des noms de codes d'état.
Version introduite
5.0 Préversion 1
Ancien comportement
La journalisation utilise les descriptions textuelles des codes d’état HTTP. Tenez compte des messages de journal suivants :
Received HTTP response after 56.0044ms - OK
End processing HTTP request after 70.0862ms - OK
Nouveau comportement
La journalisation utilise les valeurs entières des codes d’état HTTP. Tenez compte des messages de journal suivants :
Received HTTP response after 56.0044ms - 200
End processing HTTP request after 70.0862ms - 200
Raison de la modification
Le comportement d’origine de cette journalisation est incohérent avec d’autres parties de ASP.NET Core qui ont toujours utilisé des valeurs entières. L’incohérence rend les journaux difficiles à interroger via des systèmes de journalisation structurés tels que Elasticsearch. Pour plus de contexte, consultez dotnet/extensions#1549.
L’utilisation de valeurs entières est plus flexible que le texte, car elle autorise les requêtes sur des plages de valeurs.
L’ajout d’une autre valeur de journal pour capturer le code d’état entier a été pris en compte. Malheureusement, cela introduireait une autre incohérence avec le reste de ASP.NET Core. La journalisation HttpClient et la journalisation du serveur HTTP/hébergement utilisent déjà le même StatusCode nom de clé.
Action recommandée
La meilleure option consiste à mettre à jour les requêtes de journalisation pour utiliser les valeurs entières des codes d’état. Cette option peut entraîner des difficultés lors de l’écriture de requêtes sur plusieurs versions ASP.NET Core. Toutefois, l’utilisation d’entiers à cet effet est beaucoup plus flexible pour consulter les fichiers de log.
Si vous devez forcer la compatibilité avec l’ancien comportement et utiliser des codes d’état textuels, remplacez la IHttpClientFactory journalisation par votre propre :
Copiez les versions .NET Core 3.1 des classes suivantes dans votre projet :
Renommez les classes pour éviter les conflits avec les types publics dans le package NuGet Microsoft.Extensions.Http .
Remplacez l’implémentation intégrée de
LoggingHttpMessageHandlerBuilderFilterpar votre propre méthode dans la méthodeStartup.ConfigureServicesdu projet. Par exemple: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>(); }