Bagikan melalui


Ringkasan pemberitahuan pengecualian

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:

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.
  • Membangun instans baru ServiceProvider dari ServiceCollection instans.
  • Mendapatkan instans IExceptionSummarizer antarmuka dari ServiceProvider instans.
  • Melakukan iterasi atas kumpulan pengecualian, memanggil Summarize metode 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.