Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
- Die
AddExceptionSummarizerErweiterungsmethode akzeptiert einen Delegaten, der zum Konfigurieren derExceptionSummarizerBuilderInstanz verwendet wird. - Dies
builderwird verwendet, um den HTTP-Anbieter hinzuzufügen, der Ausnahmen vom Typ behandelt:
- Die
- Erstellt eine neue
ServiceProvider-Instanz aus derServiceCollection-Instanz. - Ruft eine Instanz der
IExceptionSummarizer-Schnittstelle aus derServiceProvider-Instanz ab. - Durchläuft eine Sammlung von Ausnahmen, ruft die
SummarizeMethode 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.