Share via


HTTP:IHttpClientFactory 記錄整數狀態碼所建立的 HttpClient 執行個體

IHttpClientFactory 所建立的 HttpClient 執行個體會將 HTTP 狀態碼記錄為整數,而不是狀態碼名稱。

導入的版本

5.0 Preview 1

舊的行為

記錄會使用 HTTP 狀態碼的文字描述。 請考慮下列記錄訊息:

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

新的行為

記錄會使用 HTTP 狀態碼的整數值。 請考慮下列記錄訊息:

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

變更原因

此記錄的原始行為與一律使用整數值的 ASP.NET Core 其他部分不一致。 不一致會難以透過 Elasticsearch 這類結構化記錄系統來查詢記錄。 如需詳細內容,請參閱 dotnet/extensions#1549

使用整數值會比文字更具彈性,因為其允許查詢值的範圍。

考慮過新增另一個記錄值來擷取整數狀態碼。 可惜的是,這樣做會導致另一個與 ASP.NET Core 其餘部分的不一致。 HttpClient 記錄和 HTTP 伺服器/裝載記錄已經使用相同的 StatusCode 機碼名稱。

最佳選項是更新記錄查詢,以使用狀態碼的整數值。 此選項可能會導致撰寫跨多個 ASP.NET Core 版本的查詢時發生困難。 不過,基於此目的而使用整數,記錄的查詢會更具彈性。

如果您需要強制與舊行為相容,並使用文字狀態碼,則請將 IHttpClientFactory 記錄取代為您自己的記錄:

  1. 將下列類別的 .NET Core 3.1 版本複製至您的專案:

  2. 重新命名類別,以避免與 Microsoft.Extensions.Http NuGet 套件中的公用類型衝突。

  3. LoggingHttpMessageHandlerBuilderFilter 的內建實作取代為專案 Startup.ConfigureServices 方法中您自己的實作。 例如:

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

受影響的 API

System.Net.Http.HttpClient