HTTP: HttpClient-instanser som skapats av IHttpClientFactory-logg heltalsstatuskoder
HttpClient instanser som skapats av IHttpClientFactory HTTP-loggstatuskoder som heltal i stället för med statuskodnamn.
Version introducerad
5.0 Förhandsversion 1
Gammalt beteende
Loggning använder textbeskrivningar av HTTP-statuskoder. Överväg följande loggmeddelanden:
Received HTTP response after 56.0044ms - OK
End processing HTTP request after 70.0862ms - OK
Nytt beteende
Loggning använder heltalsvärdena för HTTP-statuskoder. Överväg följande loggmeddelanden:
Received HTTP response after 56.0044ms - 200
End processing HTTP request after 70.0862ms - 200
Orsak till ändringen
Det ursprungliga beteendet för den här loggningen är inkonsekvent med andra delar av ASP.NET Core som alltid har använt heltalsvärden. Inkonsekvensen gör loggarna svåra att köra frågor mot via strukturerade loggningssystem som Elasticsearch. Mer kontext finns i dotnet/extensions#1549.
Att använda heltalsvärden är mer flexibelt än text eftersom det tillåter frågor om intervall med värden.
Att lägga till ett annat loggvärde för att samla in heltalsstatuskoden övervägdes. Tyvärr skulle detta medföra en annan inkonsekvens med resten av ASP.NET Core. HttpClient-loggning och HTTP-server/värdloggning använder redan samma StatusCode
nyckelnamn.
Rekommenderad åtgärd
Det bästa alternativet är att uppdatera loggningsfrågor för att använda heltalsvärdena för statuskoder. Det här alternativet kan orsaka problem med att skriva frågor i flera ASP.NET Core-versioner. Det är dock mycket mer flexibelt att använda heltal för det här ändamålet för att köra frågor mot loggar.
Om du behöver framtvinga kompatibilitet med det gamla beteendet och använda textstatuskoder ersätter du loggningen IHttpClientFactory
med din egen:
Kopiera .NET Core 3.1-versionerna av följande klasser till projektet:
Byt namn på klasserna för att undvika konflikter med offentliga typer i NuGet-paketet Microsoft.Extensions.Http .
Ersätt den inbyggda implementeringen av
LoggingHttpMessageHandlerBuilderFilter
med din egen i projektetsStartup.ConfigureServices
metod. Till exempel: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>(); }