HTTP: Instans HttpClient yang dibuat oleh kode status bilangan bulat log IHttpClientFactory
HttpClient instans yang dibuat oleh IHttpClientFactory kode status HTTP log sebagai bilangan bulat alih-alih dengan nama kode status.
Versi yang diperkenalkan
5.0 Pratinjau 1
Perilaku yang lama
Pengelogan menggunakan deskripsi tekstual kode status HTTP. Pertimbangkan pesan log berikut:
Received HTTP response after 56.0044ms - OK
End processing HTTP request after 70.0862ms - OK
Perilaku yang baru
Pengelogan menggunakan nilai bilangan bulat kode status HTTP. Pertimbangkan pesan log berikut:
Received HTTP response after 56.0044ms - 200
End processing HTTP request after 70.0862ms - 200
Alasan untuk berubah
Perilaku asli pengelogan ini tidak konsisten dengan bagian lain dari ASP.NET Core yang selalu menggunakan nilai bilangan bulat. Inkonsistensi membuat log sulit dikueri melalui sistem pengelogan terstruktur seperti Elasticsearch. Untuk konteks selengkapnya, lihat dotnet/extensions#1549.
Menggunakan nilai bilangan bulat lebih fleksibel daripada teks karena memungkinkan kueri pada rentang nilai.
Menambahkan nilai log lain untuk mengambil kode status bilangan bulat dipertimbangkan. Sayangnya, melakukannya akan memperkenalkan inkonsistensi lain dengan sisa ASP.NET Core. Pengelogan HttpClient dan pengelogan server/hosting HTTP sudah menggunakan nama kunci yang sama StatusCode
.
Tindakan yang direkomendasikan
Opsi terbaik adalah memperbarui kueri pengelogan untuk menggunakan nilai bilangan bulat kode status. Opsi ini dapat menyebabkan beberapa kesulitan menulis kueri di beberapa versi ASP.NET Core. Namun, menggunakan bilangan bulat untuk tujuan ini jauh lebih fleksibel untuk mengkueri log.
Jika Anda perlu memaksa kompatibilitas dengan perilaku lama dan menggunakan kode status tekstual, ganti pengelogan IHttpClientFactory
dengan milik Anda sendiri:
Salin versi .NET Core 3.1 dari kelas berikut ke dalam proyek Anda:
Ganti nama kelas untuk menghindari konflik dengan jenis publik dalam paket NuGet Microsoft.Extensions.Http .
Ganti implementasi bawaan
LoggingHttpMessageHandlerBuilderFilter
dengan milik Anda sendiri dalam metode proyekStartup.ConfigureServices
. Misalnya: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>(); }