2016-05-16 3 views
3

Ich möchte viele Hinweise zu einem globalen HandleErrorAttribute folgen, aber dieses Attribut scheint direkt auf die Error Ansicht anzuzeigen, so dass ich keinen Ort, um die Ausnahme zu protokollieren . Ich glaube nicht, dass die Aussicht der richtige Ort für Logging und andere Geschäftslogik ist.Wo oder wann Ausnahmen in einer MVC 5-Anwendung protokollieren möchten

Ich habe auch die Möglichkeit, OnException in meinem BaseController zu überschreiben, aber bin besorgt über einen Konflikt mit HandleErrorAttribute. Wenn ich OnException wie folgt überschreibe und die Ausnahme unbehandelt belasse, wird es weiter bis HandleErrorAttribute?

protected override void OnException(ExceptionContext filterContext) 
{ 
    Exception exception = filterContext.Exception; 
    var controller = filterContext.RouteData.Values["controller"].ToString(); 
    var action = filterContext.RouteData.Values["action"].ToString(); 
    logger.Error(exception, "Exception in controller '{0}': action '{1}'.", controller, action); 
    filterContext.Exception = exception; 
    //filterContext.ExceptionHandled = true; 
} 

Oder wie sonst gehe ich über das Protokollieren der Ausnahme? Ich glaube, dass die oben genannten zwei Methoden es mir ersparen, einen "Versuch-Fang" bei jeder Aktionsmethode zu implementieren, und mit dem Abfangen spezifischer Ausnahmen könnte dies eine ziemlich mühsame Aufgabe sein. Ich möchte auch die Möglichkeit haben, die Anwendung neu zu starten oder etwas, sollte eine wirklich katastrophale Ausnahme auftreten, und wieder HandleErrorAttribute lässt nicht viel Platz dafür.

Antwort

3

Normalerweise ist Global.asax ein guter Ort, das zu tun:

protected void Application_Error(object sender, EventArgs e) 
{ 
    // Get the exception object. 
    Exception exception = Server.GetLastError(); 

    // Handle Exception 

    // Call Server.ClearError() if the exception is properly handled 
} 
+0

Die Dokumentation für das heißt hier: https://msdn.microsoft.com/en-us/library/system.web.httpapplication.error (v = vs.110) .aspx –

1

Ja verwenden Global.asax

protected void Application_Error(object sender, EventArgs e) 
{ 
    System.Web.HttpRuntime.UnloadAppDomain(); 
} 
+0

Das Herunterfahren der App war nur ein Ausnahmefall. Der Hauptpunkt meiner Frage war, wo Exception Logging zu machen ist. Aber danke, ich wusste nicht, wie man einen Shutdown macht. – ProfK

Verwandte Themen