2009-02-24 27 views
10

In meinen asp.net-Anwendungen habe ich normalerweise den globalen Ereignisprozedur Application_Error verwendet, um den Fehler zu protokollieren und den Benutzer auf eine benutzerfreundliche Fehlerseite umzuleiten.ASP.NET-Fehlerbehandlung

Allerdings habe ich über ELMAH gelesen und während das scheint interessant scheint Application_Error wie der einfachere Ansatz.

Ich habe andere Fragen gelesen, in denen Leute, einschließlich mich, die eine oder andere Weise vorgeschlagen haben. Was ich frage mich ist, ob es einen signifikanten Vorteil für die Verwendung von einem über den anderen gibt und warum?

+1

Noch nie von ELMAH gehört ... das ist ziemlich cool. Ich werde das im Hinterkopf behalten. –

+0

+1 für die Einführung in diese lib –

Antwort

8

Elmah ist ein fantastisches Projekt und wir verwenden es für alle unsere ASP.NET Anwendungen. Nicht nur protokolliert es unbehandelte Fehler für Sie, es ergreift die gesamte Original Seite, die der Benutzer sah, die eine Menge Details für Sie enthält.

Es hat E-Mail-Unterstützung, RSS-Feeds (sowohl Einzel-und Digest) und verfügt über eine attraktive Konsole.

Für 3 Zeilen in der Konfiguration und eine DLL-Referenz, würde ich sagen, das ist ein Slam Dunk.

1

Ich denke, der Hauptnachteil von ELMAH ist, dass es für das, was Sie brauchen, übertrieben sein könnte. Wenn Sie mehr Informationen protokollieren und speichern als in Ihrer eigenen Implementierung, ist dies ein unnötiger Aufwand bei der Speicherung und Verarbeitung. Sie müssen auch darüber nachdenken, wie Sie den Zugriff auf die ELMAH-Konsole sichern, da diese Ausnahmedetails saftige Details Ihrer App enthalten können (das muss nicht schwer sein, aber es ist eine Sorge, die Sie vorher nicht hatten).

Auf der anderen Seite, Ihre eigene Implementierung wird wahrscheinlich wachsen, um alle diese zusätzlichen Informationen zu protokollieren, sobald Sie entscheiden, dass ein hartnäckiger Fehler es erfordert, und Sie wirklich darauf achten, Sekundenbruchteile von der Zeit, die es für die Fehlerseite angezeigt werden? Wahrscheinlich werden Sie am Ende eine eigene Version von ELMAH erstellen, also warum nicht einfach ELMAH verwenden und sich die Zeit sparen.

Ich würde empfehlen, wenn Sie Ihre eigene Fehlerprotokollierung anstatt ELMAH schreiben möchten, Sie es mindestens in ein Modul statt direkt in Application_Error in global.asax einfügen. Abonnieren Sie einfach das Error-Ereignis der Anwendung in der Init-Methode Ihres Moduls, und Sie können Ihren Fehlerbehandlungscode in einer anderen Anwendung mit einer Zeile in web.config problemlos wiederverwenden.

Ich finde es auch nützlich, jede Ausnahme Protokollierung durch ASP.NET Health Monitor zu behandeln. Auf diese Weise können Sie den Typ und die Stufe der Protokollierung in web.config einfach steuern und außerdem Ausnahmen protokollieren, die in einem try ... catch behandelt wurden, ohne bis zu Application_Error zu gelangen. Erstellen Sie eine benutzerdefinierte HandledExceptionEvent-Klasse, die WebRequestErrorEvent erweitert, und Sie können diese Ereignisse in jedem catch-Block erstellen und erhöhen, in dem Sie wirklich wissen möchten, dass die Ausnahme aufgetreten ist, obwohl sie bearbeitet wurde.