Share via


HTTP: IHttpClientFactory günlüğü tamsayı durum kodları tarafından oluşturulan HttpClient örnekleri

HttpClient http durum kodları tarafından IHttpClientFactory oluşturulan örnekler, durum kodu adları yerine tamsayılar olarak günlüğe kaydedilir.

Sürüm kullanıma sunulmuştur

5.0 Önizleme 1

Eski davranış

Günlüğe kaydetme, HTTP durum kodlarının metinsel açıklamalarını kullanır. Aşağıdaki günlük iletilerini göz önünde bulundurun:

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

Yeni davranış

Günlüğe kaydetme, HTTP durum kodlarının tamsayı değerlerini kullanır. Aşağıdaki günlük iletilerini göz önünde bulundurun:

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

Değişiklik nedeni

Bu günlüğün özgün davranışı, ASP.NET Core'un her zaman tamsayı değerleri kullanan diğer bölümleriyle tutarsız. Tutarsızlık, elasticsearch gibi yapılandırılmış günlük sistemleri aracılığıyla günlükleri sorgulamayı zorlaştırır. Daha fazla bağlam için bkz . dotnet/extensions#1549.

Tamsayı değerlerinin kullanılması, değer aralıklarında sorgulara izin verdiğinden metinden daha esnektir.

Tamsayı durum kodunu yakalamak için başka bir günlük değeri eklenmesi göz önünde bulunduruldu. Ne yazık ki bunu yapmak, ASP.NET Core'un geri kalanıyla başka bir tutarsızlığa neden olabilir. HttpClient günlüğü ve HTTP sunucusu/barındırma günlüğü zaten aynı StatusCode anahtar adını kullanır.

En iyi seçenek, günlük sorgularını durum kodlarının tamsayı değerlerini kullanacak şekilde güncelleştirmektir. Bu seçenek, birden çok ASP.NET Core sürümünde sorgu yazmakta zorlanabilir. Ancak, bu amaç için tamsayıları kullanmak günlükleri sorgulamak için çok daha esnektir.

Eski davranışla uyumluluğu zorlamanız ve metinsel durum kodları kullanmanız gerekiyorsa, günlüğü kendinizle değiştirin IHttpClientFactory :

  1. Aşağıdaki sınıfların .NET Core 3.1 sürümlerini projenize kopyalayın:

  2. Microsoft.Extensions.Http NuGet paketindeki genel türlerle çakışmaları önlemek için sınıfları yeniden adlandırın.

  3. projesinin Startup.ConfigureServices yönteminde yerleşik uygulamasını LoggingHttpMessageHandlerBuilderFilter kendi uygulamanızla değiştirin. Örneğin:

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

Etkilenen API’ler

System.Net.Http.HttpClient