Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Saat Anda mencoba menghasilkan pesan diagnostik yang bermakna untuk pengecualian, mempertahankan penyertaan informasi yang bersangkutan dapat menimbulkan tantangan. Pesan pengecualian standar sering kali tidak memiliki detail penting yang menyertai pengecualian, sambil memanggil Exception.ToString metode menghasilkan kelebihan informasi status.
Artikel ini bergantung pada paket NuGet Microsoft.Extensions.Diagnostics.ExceptionSummarization .
Tujuan ringkasan pengecualian
Tag metrik biasanya mendukung sejumlah nilai berbeda yang terbatas, dan dengan demikian tag tersebut tidak cocok untuk mewakili nilai yang sangat variabel, seperti hasil .Exception.ToString() Ringkasan pengecualian mewakili versi kardinalitas rendah dari informasi pengecualian, cocok untuk kasus tersebut.
Tujuan ringkasan pengecualian adalah dua tujuan:
- Untuk mengurangi kardinalitas yang terkait dengan status pengecualian sehingga pengecualian dapat dihitung dengan andal dalam metrik. Ini penting karena dimensi metrik memiliki kardinalitas terbatas.
- Untuk menghilangkan informasi sensitif privasi dari status pengecualian sehingga beberapa informasi pengecualian yang bermakna dapat ditambahkan ke log.
API untuk merangkum pengecualian
Antarmuka IExceptionSummarizer menawarkan metode untuk mengekstrak detail penting dari jenis pengecualian yang dikenal, sehingga menyediakan string tunggal yang berfungsi sebagai fondasi untuk menghasilkan pesan diagnostik berkualitas tinggi.
Metode ini IExceptionSummarizer.Summarize secara sistematis melintasi daftar ringkasan terdaftar sampai mengidentifikasi ringkasan yang mampu menangani jenis pengecualian tertentu. Jika tidak ada ringkasan yang mampu mengenali jenis pengecualian, ringkasan pengecualian default yang bermakna disediakan sebagai gantinya.
Hasil metode Summarize mengembalikan ExceptionSummary struct, dan berisi properti berikut:
- ExceptionSummary.Description: Deskripsi ringkasan pengecualian.
- ExceptionSummary.AdditionalDetails: Ditujukan untuk penggunaan diagnostik tingkat rendah, properti ini berisi detail tambahan tentang pengecualian dan memiliki kardinalitas yang relatif tinggi. Properti ini mungkin berisi informasi sensitif privasi.
- ExceptionSummary.ExceptionType: Jenis pengecualian, kecuali jika ada pengecualian dalam, maka jenis luar dan dalam akan ditampilkan.
Contoh penggunaan ringkasan pengecualian
Contoh berikut menunjukkan cara menggunakan IExceptionSummarizer antarmuka untuk mengambil ringkasan pengecualian.
using System.Net;
using System.Net.Sockets;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.ExceptionSummarization;
// Add exception summarization services.
var services = new ServiceCollection()
.AddExceptionSummarizer(static builder => builder.AddHttpProvider());
var provider = services.BuildServiceProvider();
// Get the exception summarizer.
IExceptionSummarizer summarizer = provider.GetRequiredService<IExceptionSummarizer>();
// Define exceptions to summarize.
Exception[] exceptions =
[
new OperationCanceledException("Operation cancelled..."),
new TaskCanceledException("Task cancelled..."),
new SocketException(10_024, "Too many sockets open..."),
new WebException("Keep alive failure...",
WebExceptionStatus.KeepAliveFailure)
];
foreach (var exception in exceptions)
{
// Summarize the exception.
ExceptionSummary summary = summarizer.Summarize(exception);
Console.WriteLine(summary);
}
Console.ReadLine();
Kode sebelumnya:
- Membuat instans baru ServiceCollection , menautkan panggilan ke AddExceptionSummarizer metode ekstensi.
- Metode ekstensi
AddExceptionSummarizermenerima deleget yang digunakan untuk mengonfigurasi instanceExceptionSummarizerBuilder. -
builderdigunakan untuk menambahkan penyedia HTTP, yang menangani pengecualian jenis:
- Metode ekstensi
- Membangun instans baru
ServiceProviderdariServiceCollectioninstans. - Mendapatkan instans
IExceptionSummarizerantarmuka dariServiceProviderinstans. - Melakukan iterasi atas kumpulan pengecualian, memanggil
Summarizemetode pada setiap pengecualian dan menampilkan hasilnya.
Nota
Fokus utama dalam desain semua implementasi ringkasan pengecualian adalah untuk memberikan kenyamanan diagnostik, daripada memprioritaskan perlindungan informasi pengidentifikasi pribadi (PII). ExceptionSummary.Description tidak berisi informasi sensitif, tetapi ExceptionSummary.AdditionalDetails mungkin berisi informasi sensitif tergantung pada implementasinya.