2013-02-22 8 views
7

Die nicht behandelten Fehlercodes in aspx.cs werden vom Application_Error-Handler in global.asax abgefangen.
Ich habe einige Codes in Application_Error Handler schreiben solche nicht behandelte Fehler in aspx.cs
passiert loggt Aber wenn die Codes selbst nicht auch anmelden und eine Ausnahme generiert. (Vielleicht wegen I/O oder Dateien Systemprobleme)
Soll ich eine solche Ausnahme rauswerfen?
Wenn ich es rausschmeiße, welches Ereignis sollte eine solche Ausnahme erhalten?
Oder es macht keinen Unterschied, wenn ich "werfen" -Syntax schreibe oder nicht?
Die Codebeispiele wie folgt
Soll ich eine Ausnahme auslösen, die im Application_Error-Handler in Global.asax passiert?

protected void Application_Error(object sender, EventArgs e) 
{ 
    try 
    { 
     // my codes to log exception to Database System here.... 
    } 
    catch(Exception) 
    { 
     throw; //Should I write "throw" syntax here ? 
    } 
} 

Antwort

5

Application_Error schlucken wollen, ist der letzte Ort, an dem Sie die Ausnahme anmelden können, die vor dem Thread aufgetreten (die Ihre Anfrage im Moment verbüßt) abgebrochen wird.

Sie müssen keine Ausnahme auslösen, da dies automatisch nach dem Beenden der Funktion erfolgt.

Hier ist eine vernünftige implementation davon.

Ich denke, Ihre größte Sorge ist, was zu tun ist, wenn Ihr Failover-Mechanismus fehlschlägt. In diesem Fall ist es Ihre Protokollierung. Dies ist eine größere Frage in Computern, aber Gebäude Chained Failover-Mechanismen ist in der Regel eine Zeitverschwendung, weil am Ende alles scheitern kann (Seitenvorschlag für Ihre eigene Forschung: versuchen, alles so zustandslos wie möglich zu halten). Am besten ist es, einen sehr zuverlässigen Logging-Mechanismus als letzten Ausweg zu haben, der in 99,9% der Fälle erfolgreich sein wird. Ich werde nicht darauf eingehen, wie man einen solchen Mechanismus erstellt (und es ist keine gute Idee, es selbst zu tun - erstellen Sie trotzdem Ihren eigenen Logger, da es viele Tricks zu wissen gibt, um sicherzustellen, dass Ihre Protokollierung leistungsfähig genug und nicht aufdringlich ist) aber insgesamt würde ich Ihnen empfehlen, elmah zu verwenden, es ist wahrscheinlich das beste Logging-Framework derzeit & es wird Ihren Zweck dienen.

Für die sehr kleine Anzahl von Fehlern, die durchkommen können (die sie wahrscheinlich in der realen Lebenssituation nicht haben werden), würde ich nicht Schlaf über ihnen verlieren.

0
  • Haben Sie Server.GetLastException() nach der Anmeldung werfen wollen? Es hängt von der Art und Ursache dieser Ausnahme ab. Ich würde es in speziellen Platzhalter oder Popup zeigen
  • Wenn eine Ausnahme ausgelöst wurde versuchen, diese Ausnahme zu protokollieren? Dann auf jeden Fall können Sie es
Verwandte Themen