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.
Noch nie von ELMAH gehört ... das ist ziemlich cool. Ich werde das im Hinterkopf behalten. –
+1 für die Einführung in diese lib –