Freigeben über


Zusammenfassung der Ausnahme

Wenn Sie versuchen, aussagekräftige Diagnosemeldungen für Ausnahmen zu generieren, kann die Aufrechterhaltung der Einbeziehung relevanter Informationen eine Herausforderung darstellen. In der Standard-Ausnahmemeldung fehlen häufig kritische Details, die die Ausnahme begleiten, während das Aufrufen der Exception.ToString Methode zu einem Übermaß an Zustandsinformationen führt.

Dieser Artikel basiert auf dem NuGet-Paket "Microsoft.Extensions.Diagnostics.ExceptionSummarization ".

Das Ziel der Zusammenfassung der Ausnahme

Metriktags unterstützen in der Regel eine begrenzte Anzahl unterschiedlicher Werte, und sie eignen sich nicht zum Darstellen von Werten, die sehr variabel sind, z. B. das Ergebnis von Exception.ToString(). Eine Ausnahmezusammenfassung stellt eine Version mit niedriger Kardinalität der Informationen einer Ausnahme dar, die für solche Fälle geeignet ist.

Das Ziel der Ausnahmezusammenfassung ist zweifach:

  • Um die Kardinalität zu verringern, die dem Ausnahmezustand zugeordnet ist, sodass Ausnahmen zuverlässig in Metriken gezählt werden können. Dies ist wichtig, da die Metrikdimensionen eingeschränkte Kardinalität aufweisen.
  • Um datenschutzrelevante Informationen aus Ausnahmestatus zu entfernen, sodass einige aussagekräftige Ausnahmeinformationen zu Protokollen hinzugefügt werden können.

Zusammenfassungs-API für Ausnahmen

Die IExceptionSummarizer-Schnittstelle bietet Methoden zum Extrahieren von wichtigen Details aus anerkannten Ausnahmetypen, wodurch eine einzelne string eingerichtet wird, die als Grundlage für die Herstellung hochwertiger Diagnosemeldungen dient.

Die IExceptionSummarizer.Summarize Methode durchläuft systematisch die Liste der registrierten Zusammenfassungen, bis ein Zusammenfassungselement identifiziert wird, das den spezifischen Ausnahmetyp verarbeiten kann. Wenn kein Zusammenfassungselement in der Lage ist, den Ausnahmetyp zu erkennen, wird stattdessen eine aussagekräftige Standard-Ausnahmezusammenfassung bereitgestellt.

Das Ergebnis der Summarize Methode gibt eine ExceptionSummary Struktur zurück und enthält die folgenden Eigenschaften:

  • ExceptionSummary.Description: Eine zusammenfassende Beschreibung der Ausnahme
  • ExceptionSummary.AdditionalDetails: Diese Eigenschaft ist für diagnostische Zwecke auf niedrigem Niveau vorgesehen, enthält zusätzliche Details zur Ausnahme und hat eine recht hohe Kardinalität. Diese Eigenschaft kann privatsphärenempfindliche Informationen enthalten.
  • ExceptionSummary.ExceptionType: Der Typ der Ausnahme, es sei denn, interne Ausnahmen sind vorhanden, in diesem Fall werden sowohl äußere als auch innere Typen wiedergegeben.

Beispiel für die Verwendung von Ausnahmezusammenfassungen

Im folgenden Beispiel wird veranschaulicht, wie die IExceptionSummarizer Schnittstelle zum Abrufen einer Zusammenfassung einer Ausnahme verwendet wird.

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

Der vorherige Code:

  • Instanziiert eine neue ServiceCollection-Instanz, wobei Aufrufe der AddExceptionSummarizer-Erweiterungsmethode verkettet werden.
  • Erstellt eine neue ServiceProvider-Instanz aus der ServiceCollection-Instanz.
  • Ruft eine Instanz der IExceptionSummarizer-Schnittstelle aus der ServiceProvider-Instanz ab.
  • Durchläuft eine Sammlung von Ausnahmen, ruft die Summarize Methode für jede Ausnahme auf und zeigt das Ergebnis an.

Hinweis

Der Hauptfokus bei der Gestaltung aller Implementierungen der Ausnahmezusammenfassung ist die Bereitstellung von Diagnosekomfort, anstatt den Schutz personenbezogener Informationen (PII) zu priorisieren. Das ExceptionSummary.Description enthält keine vertraulichen Informationen, aber das ExceptionSummary.AdditionalDetails könnte vertrauliche Informationen enthalten, je nach Implementierung.