/ / Obsługa błędów ASP.NET - asp.net, obsługa błędów

Obsługa błędów ASP.NET - asp.net, obsługa błędów

W moich aplikacjach ASP.NET zazwyczaj używam globalnej procedury obsługi zdarzeń Application_Error, aby zarejestrować błąd i przekierować użytkownika na przyjazną dla użytkownika stronę błędu.

Jednak przeczytałem o tym ELMAH i chociaż wydaje się to interesujące, Application_Error wydaje się być prostszym podejściem.

Czytałem inne pytania, w których ludzie, w tym ja, zasugerowali jeden lub drugi sposób. Zastanawiam się, czy istnieje jakaś znacząca korzyść z używania jednego z nich i dlaczego?

Odpowiedzi:

8 dla odpowiedzi № 1

Elmah to fantastyczny projekt i używamy go do wszystkich naszych aplikacji ASP.NET. Nie tylko rejestruje nieobsługiwane błędy, ale także chwyta całość oryginalny stronę, którą zobaczył użytkownik, która zawiera wiele szczegółów dla Ciebie.

Posiada wsparcie e-mail, kanały RSS (zarówno wyszczególnione i trawione) i ma atrakcyjną konsolę.

Dla 3 linii w config i odniesienie do dll, powiedziałbym, że jest to slam dunk.


1 dla odpowiedzi nr 2

Sądzę, że główną wadą ELMAH jest to, że tomoże być przesadą dla tego, czego potrzebujesz. Jeśli logujesz się i przechowujesz więcej informacji niż we własnej implementacji, jest to niepotrzebne obciążenie związane z przechowywaniem i przetwarzaniem. Musisz także zastanowić się, w jaki sposób zabezpieczyć dostęp do konsoli ELMAH, ponieważ szczegóły tego wyjątku mogą zawierać soczyste szczegóły twojej aplikacji (to nie musi być trudne, ale martwi cię to, czego wcześniej nie miałeś).

Z drugiej strony, twoja własna implementacja będzieprawdopodobnie rośnie, aby zarejestrować wszystkie te dodatkowe informacje, gdy zdecydujesz, że wymaga tego uporczywy błąd, i czy naprawdę zależy ci na ułamkach ułamków sekundy od czasu, który zajmuje wyświetlenie strony błędu? Możliwe, że ostatecznie zbudujesz własną wersję ELMAH, więc dlaczego nie po prostu użyć ELMAH i oszczędzić sobie czasu.

Polecam, jeśli chcesz napisać swojewłasne rejestrowanie błędów zamiast używania ELMAH, przynajmniej umieściłeś go w module, a nie bezpośrednio w Application_Error w global.asax. Wystarczy zasubskrybować zdarzenie Error zdarzenia w module Init metody, a można łatwo ponownie użyć kodu obsługi błędów w innej aplikacji z linii w web.config.

Uważam też, że użyteczne jest zajmowanie się każdym wyjątkiemlogowanie poprzez monitorowanie zdrowia ASP.NET, dzięki czemu można łatwo kontrolować typ i poziom logowania w web.config, a także pozwala na rejestrowanie wyjątków, które były obsługiwane przy próbie ... catch, bez przechodzenia aż do Application_Error. Utwórz niestandardową klasę HandledExceptionEvent, która rozszerza WebRequestErrorEvent, i możesz tworzyć i przenosić te zdarzenia w dowolnym bloku catch, w którym naprawdę chcesz wiedzieć, że wyjątek się zdarzył, mimo że został obsłużony.