ASP.Net MVC-Ausnahmeprotokollierung kombiniert mit Fehlerbehandlung

Ich bin auf der Suche nach einer einfachen Lösung zu tun Ausnahme der Protokollierung kombiniert mit der Fehlerbehandlung in mein ASP.Net MVC 1.0 Anwendung.

Ich habe gelesen, viele Artikel, einschließlich der Fragen, die hier gepostet auf StackOverflow, die alle bieten verschiedene Lösungen für verschiedene Situationen. Ich bin noch nicht in der Lage zu kommen mit einer Lösung, die passt meine Bedürfnisse.

Hier sind meine Anforderungen:

  1. Nutzen zu können [HandleError] - Attribut (oder etwas äquivalentes) auf meinem Controller, um alle exceptions, die geworfen werden konnte aus irgendwelchen Handlungen oder Ansichten. Dies sollte behandeln alle Ausnahmen, die wurden nicht bearbeitet, die speziell auf die Aktionen (wie beschrieben in Punkt 2). Ich möchte in der Lage sein, um anzugeben, welche Ansicht muss der Benutzer umgeleitet werden, um bei Fehlern, die für alle Aktionen im Controller.

  2. Ich möchte in der Lage sein anzugeben [HandleError] - Attribut (oder etwas gleichwertiges) an der Spitze der spezifischen Maßnahmen, zu fangen spezifische Ausnahmen und umleiten von Benutzern auf einen Blick geeignet, um die Ausnahme. Alle anderen Ausnahmen muss immer noch behandelt werden, indem Sie die [HandleError] - Attribut auf dem Controller.

  3. In beiden Fällen oben, ich will die Ausnahmen werden protokolliert, mit log4net (oder beliebigen anderen logging-Bibliothek).

Wie gehe ich über die Erreichung der oben genannten? Hab ich überlesen, dass alle meine Controller Erben von einem Basis-controller überschrieben OnException-Methode, und worin ich meine Anmeldung. Dies ist allerdings Durcheinander durch umleiten von Benutzern an die entsprechenden Aussicht, oder machen es chaotisch.

Ich gelesen habe zu schreiben, meine eigenen Filter-Aktion, die implementiert IExceptionFilter um dies zu umgehen, aber dies zu einem Konflikt mit der [HandleError] - Attribut.

So weit, meine Gedanken sind, dass die beste Lösung ist, um zu schreiben, meine eigenen Attribut erbt HandleErrorAttribute. So bekomme ich alle die Funktionalität von [HandleError], und kann hinzufügen, meine eigene log4net-logging. Die Lösung ist wie folgt:

    public class HandleErrorsAttribute: HandleErrorAttribute {

      private log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

      public override void OnException(ExceptionContext filterContext)
      {
          if (filterContext.Exception != null)
          {
            log.Error("Error in Controller", filterContext.Exception);
          }

          base.OnException(filterContext);
      }
   }

Wird der obige code funktioniert für meine Anforderungen? Wenn nicht, welche Lösung erfüllt meine Anforderungen?

InformationsquelleAutor der Frage Saajid Ismail | 2009-06-23

Schreibe einen Kommentar