Jak rejestrować błędy (wyjątki) w swoim ASP.NET aplikacje?

Szukam najlepszego sposobu na rejestrowanie błędów w ASP.NET podanie. Chcę otrzymywać wiadomości e-mail, gdy w mojej aplikacji pojawią się błędy, ze szczegółowymi informacjami o wyjątku i bieżącym żądaniu.

W mojej firmie mieliśmy kiedyś własnego Errormailera, który łapał wszystko na świecie.ASAX Application_Error. To było "Ok", ale nie bardzo elastyczne ani konfigurowalne.

Przełączyliśmy się ostatnio na NLog. Jest znacznie bardziej konfigurowalny, możemy zdefiniować różne cele w przypadku błędów filtruj je, buforuj (jeszcze nie próbowano). To bardzo dobra poprawa.

Ale odkryłem ostatnio, że istnieje cała przestrzeń nazw w. Net framework do tego celu: System.Www.Zarządzanie i może być skonfigurowane w sekcji internetowej healthMonitoring .config.

Czy kiedykolwiek pracowałeś z. Net health monitoring? Jakie jest twoje rozwiązanie do rejestrowania błędów?

Author: Mark Amery, 2008-08-15

8 answers

Używam elmah . Ma kilka naprawdę fajnych funkcji i oto CodeProject artykuł na ten temat. Myślę, że zespół StackOverflow również korzysta z elmah!

 29
Author: Dale Ragan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 04:34:49

Używam Log4net, skonfigurowanego do wysyłania e-maili o błędach krytycznych. Jest również skonfigurowany do logowania wszystkiego do pliku dziennika, co jest nieocenione podczas próby debugowania problemów. Inną korzyścią jest to, że jeśli ta standardowa funkcjonalność nie robi tego, co chcesz, dość łatwo jest napisać niestandardowy appender, który może przetwarzać informacje logowania zgodnie z wymaganiami.

Powiedziawszy to, używam tego w połączeniu z niestandardowym handlerem błędów, który wysyła e-mail html z nieco więcej informacji niż w standardowych wiadomościach log4net-strona, zmienne sesji, pliki cookie, zmienne serwera http itp.

Są one zarówno połączone w zdarzeniu Application_OnError, gdzie wyjątek jest rejestrowany jako wyjątek krytyczny w log4net (co powoduje wysłanie go na podany adres e-mail), jak i obsługiwane za pomocą niestandardowego programu obsługi błędów.

Pierwszy raz usłyszałem oElmah z wpisu na blogu Coding Horror, Crash i chociaż wygląda obiecująco, to jeszcze nie zrealizowałem żadnych projektów.

 9
Author: Mun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 06:31:07

Używam obiektów rejestrujących Biblioteki Enterprise. Pozwala na korzystanie z różnych rodzajów logowania (plik płaski, e-mail i/lub baza danych). Jest dość konfigurowalny i ma całkiem dobry interfejs do aktualizacji sieci.config do konfiguracji logowania. Zwykle wywołuję moje logowanie z błędu On w globalnym.asax.

Oto link do MSDN

 2
Author: Brian Childress,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 06:11:57

Używam log4net i tam, gdzie kiedykolwiek oczekuję wyjątku, loguję go do odpowiedniego poziomu. Zazwyczaj nie rzucam ponownie wyjątku, ponieważ tak naprawdę nie pozwala to na przyjemne wrażenia użytkownika, jest mniej informacji, które możesz podać w bieżącym stanie.

Będę mieć Application_Error również skonfigurowany do przechwytywania każdego wyjątku, który nie był oczekiwany, a błąd jest rejestrowany jako priorytet krytyczny przez log4net (cóż, 404 są wykrywane i rejestrowane jako informacje, ponieważ nie są tak wysokie ciężkości).

 2
Author: Aaron Powell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-23 09:56:20

Mój zespół używa log4net z Apache. Jest dość lekki i łatwy w konfiguracji. Co najlepsze, jest w pełni konfigurowalny z sieci.plik konfiguracyjny, więc gdy już masz Hooki w konfiguracji kodu, możesz całkowicie zmienić sposób logowania, po prostu zmieniając sieć.plik konfiguracyjny.

Log4net obsługuje logowanie do wielu różnych lokalizacji - bazy danych, poczty e-mail, pliku tekstowego, dziennika zdarzeń systemu Windows itp. Mój zespół ma skonfigurowany do wysyłania szczegółowych informacji o błędach do bazy danych, a także wysłać e-mail do całego zespołu z wystarczającą ilością informacji, abyśmy mogli ustalić, w której części kodu wystąpił błąd. Wtedy wiemy, kto jest odpowiedzialny za ten fragment kodu, i mogą przejść do bazy danych, aby uzyskać bardziej szczegółowe informacje.

 0
Author: Brandon Wood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 04:33:02

Niedawno zbudowałem asp.net webservice z NLog, którego używam do wszystkich moich aplikacji desktopowych. Logowanie działa dobrze, gdy debuguję w Visual Studio, ale jak tylko przełączę się na IIS plik dziennika nie jest tworzony; nie ustaliłem jeszcze dlaczego, ale fakt, że muszę szukać rozwiązania sprawia, że chcę spróbować czegoś innego dla mojego asp.net potrzeb!

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 17:22:49

Używamy EnterpriseLibrary.Z wyjątkiem obsługi.Logowanie. Podoba mi się to trochę lepiej niż log4net, ponieważ nie tylko kontrolujemy logowanie całkowicie, ale możemy również kontrolować decyzję Throw / NoThrow w config.

 0
Author: matt-dot-net,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-09 16:52:46

Używamy niestandardowego homegrown logging util, który napisaliśmy. Wymaga to wdrożenia logowania na własną rękę wszędzie, gdzie go potrzebujesz. Ale pozwala również uchwycić znacznie więcej niż tylko wyjątek.

Na przykład nasz kod wyglądałby tak:

Try
  Dim p as New Person()
  p.Name = "Joe"
  p.Age = 30
Catch ex as Exception
  Log.LogException(ex,"Err creating person and assigning name/age")
  Throw ex
End Try

W ten sposób nasz logger zapisze wszystkie potrzebne nam informacje do bazy danych SQL. Mamy alerty e-mail skonfigurowane na poziomie DB, aby szukać pewnych błędów lub często występujących błędów. Pomaga nam dokładnie określić, gdzie błędy pochodzą z

To może nie być dokładnie to, czego szukasz. Inne podejście podobne do korzystania z Global.asax jest dla nas techniką wtrysku kodu jak AOPz PostSharp . Pozwala to na wprowadzenie kodu niestandardowego na początku i końcu każdej metody lub na każdym wyjątku. To ciekawe podejście, ale wierzę, że może mieć dużą wydajność nad głową.
 0
Author: brendan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-30 20:15:57