2013-02-22 11 views
7

Nieobsługiwane kody błędów w aspx.cs zostaną przechwycone przez procedurę obsługi Application_Error w pliku global.asax.
muszę napisać kilka kodów w Application_Error obsługi zalogować nieobsłużone takie błędy się w aspx.cs
Ale jeśli kody zalogować się nie powiedzie, a także wygenerowany wyjątek. (Być może z powodu wejścia/wyjścia lub plików systemowych problemów I)
Czy powinienem wyrzucić taki wyjątek?
Jeśli wyrzucę to, które wydarzenie powinno otrzymać taki wyjątek?
Czy to nie ma znaczenia, jeśli napiszę składnię "rzucać", czy nie?
Próbki kodu jako następujące
Czy powinienem wyrzucić wyjątek, który ma miejsce w procedurze obsługi Application_Error w pliku Global.asax?

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 ? 
    } 
} 

Odpowiedz

5

Application_Error to ostatnie miejsce, w którym można zarejestrować wyjątek, który wystąpił przed przerwaniem wątku (który aktualnie obsługuje Twoją prośbę).

Nie musisz wyrzucać z niego żadnego wyjątku, ponieważ zrobi to automatycznie po wyjściu funkcji.

Oto uzasadnione implementation tego.

Myślę, że waszym największym zmartwieniem jest to, co zrobić, gdy zawiedzie się mechanizm awaryjny. W tym przypadku jest to twoje logowanie. Jest to ważniejsze pytanie na komputerach, ale budowanie łańcuchowych mechanizmów awaryjnych jest generalnie stratą czasu, ponieważ ostatecznie wszystko może zakończyć się niepowodzeniem (sugestia poboczna dla własnych badań: staraj się, aby wszystko było jak najbardziej bezpaństwowe). Najlepszym rozwiązaniem jest posiadanie bardzo niezawodnego mechanizmu logowania, który będzie skuteczny przez 99,9% czasu. Nie zamierzamy tworzyć takiego mechanizmu (i nie jest to dobry pomysł, aby zrobić to samemu - należy utworzyć własny rejestrator, ponieważ jest wiele sztuczek, aby upewnić się, że rejestrowanie jest wystarczająco wydajne i nie przeszkadza) ale ogólnie polecam użyć elmah, to prawdopodobnie najlepsza struktura rejestrowania dostępna obecnie & będzie służyć twoim celom.

Za bardzo niewielką ilość błędów, które mogą się wydarzyć (co prawdopodobnie nie będzie w rzeczywistej sytuacji), nie straciłbym nad nimi snu.

0
  • Chcesz rzucić Server.GetLastException() po zalogowaniu? To zależy od natury i przyczyny tego wyjątku. Pokażę to w specjalnym miejscu lub popup
  • Jeśli wystąpi wyjątek podczas próby zarejestrowania tego wyjątku? Wtedy zdecydowanie możesz połknąć to
Powiązane problemy