Rejestrowanie szczegółów błędów za pomocą biblioteki ELMAH (VB)
Moduły rejestrowania błędów i programy obsługi (ELMAH) oferują inne podejście do rejestrowania błędów środowiska uruchomieniowego w środowisku produkcyjnym. ELMAH to bezpłatna biblioteka rejestrowania błędów open source zawierająca funkcje, takie jak filtrowanie błędów i możliwość wyświetlania dziennika błędów ze strony internetowej, jako kanału informacyjnego RSS lub pobierania go jako pliku rozdzielanego przecinkami. W tym samouczku przedstawiono sposób pobierania i konfigurowania rozwiązania ELMAH.
Wprowadzenie
W poprzednim samouczku przeanalizowano platformę ASP. System monitorowania kondycji platformy NET, który oferuje wyrejerytowaną bibliotekę do rejestrowania szerokiej gamy zdarzeń internetowych. Wielu deweloperów używa monitorowania kondycji do rejestrowania i wysyłania wiadomości e-mail ze szczegółami nieobsługiwanych wyjątków. Jednak istnieje kilka punktów bólu w tym systemie. Przede wszystkim brakuje jakiegokolwiek interfejsu użytkownika do wyświetlania informacji o zarejestrowanych zdarzeniach. Jeśli chcesz wyświetlić podsumowanie 10 ostatnich błędów lub wyświetlić szczegóły błędu, który wystąpił w zeszłym tygodniu, musisz szturchnąć przez bazę danych, przeskanować za pośrednictwem skrzynki odbiorczej poczty e-mail lub utworzyć stronę internetową, która wyświetla informacje z aspnet_WebEvent_Events
tabeli.
Inny punkt bólu koncentruje się wokół złożoności monitorowania kondycji. Ponieważ monitorowanie kondycji może służyć do rejestrowania wielu różnych zdarzeń, a ponieważ istnieje wiele opcji poinstruowania, jak i kiedy są rejestrowane zdarzenia, prawidłowe skonfigurowanie systemu monitorowania kondycji może być uciążliwym zadaniem. Na koniec występują problemy ze zgodnością. Ponieważ monitorowanie kondycji zostało po raz pierwszy dodane do .NET Framework w wersji 2.0, nie jest dostępne dla starszych aplikacji internetowych utworzonych przy użyciu ASP.NET w wersji 1.x. Ponadto SqlWebEventProvider
klasa, która była używana w poprzednim samouczku w celu rejestrowania szczegółów błędów w bazie danych, działa tylko z bazami danych microsoft SQL Server. Należy utworzyć niestandardową klasę dostawcy dzienników, jeśli musisz rejestrować błędy w alternatywnym magazynie danych, takim jak plik XML lub baza danych Oracle.
Alternatywą dla systemu monitorowania kondycji jest moduły rejestrowania błędów i programy obsługi (ELMAH), bezpłatny system rejestrowania błędów typu open source utworzony przez Atif Aziz. Najbardziej godną uwagi różnicą między dwoma systemami jest możliwość wyświetlania listy błędów oraz szczegółów określonego błędu ze strony internetowej i kanału informacyjnego RSS. ElMAH jest łatwiejsze do skonfigurowania niż monitorowanie kondycji, ponieważ rejestruje tylko błędy. Ponadto ELMAH obejmuje obsługę aplikacji ASP.NET 1.x, ASP.NET 2.0 i ASP.NET 3.5 oraz dostarczanych z różnymi dostawcami źródeł dzienników.
W tym samouczku przedstawiono kroki związane z dodawaniem aplikacji ELMAH do aplikacji ASP.NET. Zaczynamy!
Uwaga
System monitorowania kondycji i ELMAH mają własne zestawy zalet i wad. Zachęcam do wypróbowania obu systemów i podjęcia decyzji o tym, co najlepiej odpowiada Twoim potrzebom.
Dodawanie aplikacji ELMAH do aplikacji internetowej ASP.NET
Integrowanie aplikacji ELMAH z nową lub istniejącą aplikacją ASP.NET jest łatwym i prostym procesem, który trwa poniżej pięciu minut. W skrócie, obejmuje cztery proste kroki:
- Pobierz aplikację
Elmah.dll
ELMAH i dodaj zestaw do aplikacji internetowej. - Rejestrowanie modułów HTTP i programu obsługi ELMAH w programie
Web.config
, - Określ opcje konfiguracji ELMAH i
- W razie potrzeby utwórz infrastrukturę źródłową dziennika błędów.
Przyjrzyjmy się każdemu z tych czterech kroków, po jednym naraz.
Krok 1. Pobieranie plików projektu ELMAH i dodawanieElmah.dll
do aplikacji internetowej
ELMAH 1.0 BETA 3 (kompilacja 10617), najnowsza wersja w momencie pisania, jest dołączona do pobierania dostępnego w tym samouczku. Alternatywnie możesz odwiedzić witrynę internetową ELMAH , aby uzyskać najnowszą wersję lub pobrać kod źródłowy. Wyodrębnij pobieranie ELMAH do folderu na pulpicie i znajdź plik zestawu ELMAH (Elmah.dll
).
Uwaga
Plik Elmah.dll
znajduje się w folderze pobieraniaBin
, który zawiera podfoldery dla różnych wersji .NET Framework oraz kompilacji wydania i debugowania. Użyj kompilacji Wydania dla odpowiedniej wersji platformy. Jeśli na przykład tworzysz aplikację internetową ASP.NET 3.5, skopiuj Elmah.dll
plik z Bin\net-3.5\Release
folderu.
Następnie otwórz program Visual Studio i dodaj zestaw do projektu, klikając prawym przyciskiem myszy nazwę witryny internetowej w Eksplorator rozwiązań i wybierając pozycję Dodaj odwołanie z menu kontekstowego. Spowoduje to wyświetlenie okna dialogowego Dodawanie odwołania. Przejdź do karty Przeglądaj i wybierz Elmah.dll
plik. Ta akcja powoduje dodanie Elmah.dll
pliku do folderu aplikacji Bin
internetowej.
Uwaga
Typ projektu aplikacji internetowej (WAP) nie pokazuje Bin
folderu w Eksplorator rozwiązań. Zamiast tego wyświetla listę tych elementów w folderze Odwołania.
Zestaw Elmah.dll
zawiera klasy używane przez system ELMAH. Te klasy należą do jednej z trzech kategorii:
Moduły HTTP — moduł HTTP to klasa, która definiuje programy obsługi zdarzeń dla
HttpApplication
zdarzeń, takich jakError
zdarzenie. ElMAH obejmuje wiele modułów HTTP, a trzy najbardziej niemieckie są następujące:ErrorLogModule
— rejestruje nieobsługiwane wyjątki do źródła dziennika.ErrorMailModule
— wysyła szczegóły nieobsługiwanego wyjątku w wiadomości e-mail.ErrorFilterModule
— stosuje filtry określone przez dewelopera, aby określić, jakie wyjątki są rejestrowane i jakie są ignorowane.
Programy obsługi HTTP — program obsługi HTTP to klasa, która jest odpowiedzialna za generowanie znaczników dla określonego typu żądania. ElMAH zawiera programy obsługi HTTP, które renderuje szczegóły błędu jako stronę internetową, jako kanał informacyjny RSS lub jako plik rozdzielany przecinkami (CSV).
Źródła dzienników błędów — poza polem ELMAH może rejestrować błędy w pamięci, do bazy danych microsoft SQL Server, do bazy danych programu Microsoft Access, do bazy danych Oracle, do pliku XML, bazy danych SQLite lub bazy danych Vista DB. Podobnie jak w przypadku systemu monitorowania kondycji architektura ELMAH została utworzona przy użyciu modelu dostawcy, co oznacza, że w razie potrzeby można tworzyć i bezproblemowo integrować własnych niestandardowych dostawców źródeł dzienników.
Krok 2. Rejestrowanie modułu HTTP i programu obsługi ELMAH
Elmah.dll
Plik zawiera moduły HTTP i program obsługi potrzebne do automatycznego rejestrowania nieobsługiwanych wyjątków i wyświetlania szczegółów błędu ze strony internetowej, muszą one być jawnie zarejestrowane w konfiguracji aplikacji internetowej. Moduł ErrorLogModule
HTTP, po zarejestrowaniuHttpApplication
, subskrybuje zdarzenie .Error
Za każdym razem, gdy to zdarzenie zostanie zgłoszone, ErrorLogModule
rejestruje szczegóły wyjątku do określonego źródła dziennika. Zobaczymy, jak zdefiniować dostawcę źródła dzienników w następnej sekcji "Konfigurowanie elMAH". ErrorLogPageFactory
Fabryka programu obsługi HTTP jest odpowiedzialna za generowanie znaczników podczas wyświetlania dziennika błędów ze strony internetowej.
Określona składnia rejestrowania modułów HTTP i programów obsługi zależy od serwera internetowego obsługującego witrynę. W przypadku programu ASP.NET Development Server i usług IIS firmy Microsoft w wersji 6.0 lub starszej moduły HTTP i programy obsługi są rejestrowane w sekcjach i<httpHandlers>
, które są wyświetlane w <httpModules>
elemecie <system.web>
. Jeśli używasz usług IIS 7.0, należy je zarejestrować w <system.webServer>
sekcjach i <handlers>
elementach<modules>
. Na szczęście można zdefiniować moduły HTTP i programy obsługi w obu miejscach niezależnie od używanego serwera internetowego. Ta opcja jest najbardziej przenośna, ponieważ umożliwia korzystanie z tej samej konfiguracji w środowiskach deweloperskich i produkcyjnych niezależnie od używanego serwera internetowego.
Rozpocznij od zarejestrowania modułu ErrorLogModule
HTTP i ErrorLogPageFactory
programu obsługi HTTP w <httpModules>
sekcji i <httpHandlers>
w sekcji <system.web>
. Jeśli konfiguracja już definiuje te dwa elementy, po prostu dołącz <add>
element modułu HTTP i programu obsługi ELMAH.
<?xml version="1.0"?>
<configuration>
...
<system.web>
...
<httpHandlers>
...
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<httpModules>
...
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
</httpModules>
...
</system.web>
...
</configuration>
Następnie zarejestruj moduł HTTP i program obsługi ELMAH w elemecie <system.webServer>
. Tak jak wcześniej, jeśli ten element nie jest jeszcze obecny w konfiguracji, dodaj go.
<?xml version="1.0"?>
<configuration>
...
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
...
<add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
</modules>
<handlers>
...
<add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
</handlers>
</system.webServer>
</configuration>
Domyślnie usługi IIS 7 narzekają, czy moduły HTTP i programy obsługi są zarejestrowane w <system.web>
sekcji . Atrybut validateIntegratedModeConfiguration
w <validation>
elemecie instruuje usługi IIS 7, aby pominąć takie komunikaty o błędach.
Należy pamiętać, że składnia rejestrowania ErrorLogPageFactory
programu obsługi HTTP zawiera path
atrybut, który jest ustawiony na elmah.axd
. Ten atrybut informuje aplikację internetową, że jeśli żądanie zostanie dostarczone dla strony o nazwie elmah.axd
, żądanie powinno zostać przetworzone przez ErrorLogPageFactory
program obsługi HTTP. W dalszej części tego samouczka zobaczymy procedurę ErrorLogPageFactory
obsługi HTTP.
Krok 3. Konfigurowanie ELMAH
ELMAH szuka opcji konfiguracji w pliku witryny internetowej Web.config
w niestandardowej sekcji konfiguracji o nazwie <elmah>
. Aby można było użyć sekcji niestandardowej w Web.config
nim, należy najpierw zdefiniować w elemecie <configSections>
. Web.config
Otwórz plik i dodaj następujący znacznik do pliku <configSections>
:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
...
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
</sectionGroup>
</configSections>
...
</configuration>
Uwaga
Jeśli konfigurujesz aplikację ELMAH dla aplikacji ASP.NET 1.x, usuń requirePermission="false"
atrybut z powyższych <section>
elementów.
Powyższy składnia rejestruje sekcję niestandardową <elmah>
i jej podsekcje: <security>
, <errorLog>
, <errorMail>
i <errorFilter>
.
Następnie dodaj sekcję <elmah>
do Web.config
. Ta sekcja powinna być wyświetlana <system.web>
na tym samym poziomie co element. <elmah>
W sekcji dodaj sekcje <security>
i <errorLog>
w następujący sposób:
<?xml version="1.0"?>
<configuration>
...
<elmah>
<security allowRemoteAccess="0" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ReviewsConnectionString" />
</elmah>
...
</configuration>
Atrybut <security>
sekcji allowRemoteAccess
wskazuje, czy dostęp zdalny jest dozwolony. Jeśli ta wartość jest ustawiona na 0, można wyświetlić stronę internetową dziennika błędów tylko lokalnie. Jeśli ten atrybut ma wartość 1, strona internetowa dziennika błędów jest włączona zarówno dla odwiedzających zdalnych, jak i lokalnych. Na razie wyłączmy stronę internetową dziennika błędów dla odwiedzających zdalnych. Później zezwolimy na dostęp zdalny po zapoznaniu się z problemami dotyczącymi zabezpieczeń.
Sekcja <errorLog>
definiuje źródło dziennika błędów, które określa, gdzie są rejestrowane szczegóły błędu. Jest ona podobna do <providers>
sekcji w systemie monitorowania kondycji. Powyższa składnia określa klasę SqlErrorLog
jako źródło dziennika błędów, które rejestruje błędy w bazie danych microsoft SQL Server określonej przez wartość atrybutuconnectionStringName
.
Uwaga
Program ELMAH jest dostarczany z dodatkowymi dostawcami dzienników błędów, których można użyć do rejestrowania błędów w pliku XML, bazie danych programu Microsoft Access, bazie danych Oracle i innych magazynach danych. Zapoznaj się z przykładowym Web.config
plikiem dołączonym do pobierania ELMAH, aby uzyskać informacje na temat korzystania z tych alternatywnych dostawców dziennika błędów.
Krok 4. Tworzenie infrastruktury źródła dziennika błędów
Dostawca ELMAH SqlErrorLog
rejestruje szczegóły błędu dla określonej bazy danych microsoft SQL Server. Dostawca SqlErrorLog
oczekuje, że ta baza danych ma tabelę o nazwie ELMAH_Error
i trzy procedury składowane: ELMAH_GetErrorsXml
, ELMAH_GetErrorXml
i ELMAH_LogError
. Pobieranie ELMAH zawiera plik o nazwie SQLServer.sql
w db
folderze, który zawiera język T-SQL do tworzenia tej tabeli i tych procedur składowanych. Aby użyć dostawcy SqlErrorLog
, należy uruchomić te instrukcje w bazie danych.
Na rysunkach 1 i 2 przedstawiono Eksploratora baz danych w programie Visual Studio po dodaniu obiektów bazy danych wymaganych przez dostawcę SqlErrorLog
.
Rysunek 1. Dzienniki SqlErrorLog
błędów dostawcy w ELMAH_Error
tabeli
Rysunek 2. SqlErrorLog
Dostawca używa trzech procedur składowanych
ELMAH w akcji
W tym momencie dodaliśmy elMAH do aplikacji internetowej, zarejestrowaliśmy ErrorLogModule
moduł HTTP i ErrorLogPageFactory
program obsługi HTTP, określono opcje konfiguracji ELMAH w systemie Web.config
i dodano wymagane obiekty bazy danych dla SqlErrorLog
dostawcy dziennika błędów. Teraz jesteśmy gotowi zobaczyć ELMAH w akcji! Odwiedź witrynę internetową Recenzje książek i odwiedź stronę, która generuje błąd środowiska uruchomieniowego, taki jak Genre.aspx?ID=foo
, lub nieistniejącej strony, takiej jak NoSuchPage.aspx
. To, co widzisz podczas odwiedzania tych stron, <customErrors>
zależy od konfiguracji i od tego, czy odwiedzasz lokalnie, czy zdalnie. (Wróć do samouczka Wyświetlanie niestandardowej strony błędu, aby zapoznać się z modułem odświeżania w tym temacie).
ELMAH nie ma wpływu na zawartość wyświetlaną użytkownikowi w przypadku wystąpienia nieobsługiwanego wyjątku; po prostu rejestruje jego szczegóły. Ten dziennik błędów jest dostępny ze strony elmah.axd
internetowej z katalogu głównego witryny internetowej, na przykład http://localhost/BookReviews/elmah.axd
. (Ten plik nie istnieje fizycznie w projekcie, ale gdy żądanie przychodzi do elmah.axd
środowiska uruchomieniowego, wysyła je do ErrorLogPageFactory
programu obsługi HTTP, co generuje znaczniki wysyłane z powrotem do przeglądarki).
Uwaga
Możesz również użyć strony, elmah.axd
aby poinstruować ELMAH o wygenerowaniu błędu testowego. Odwiedzanie elmah.axd/test
(jak w programie ), powoduje, http://localhost/BookReviews/elmah.axd/test
że ELMAH zgłasza wyjątek typu Elmah.TestException
, który ma komunikat o błędzie: "Jest to wyjątek testowy, który można bezpiecznie zignorować".
Rysunek 3 przedstawia dziennik błędów podczas odwiedzania elmah.axd
środowiska deweloperskiego.
Rysunek 3. Elmah.axd
Wyświetla dziennik błędów ze strony internetowej
(Kliknij, aby wyświetlić obraz w pełnym rozmiarze)
Dziennik błędów na rysunku 3 zawiera sześć wpisów błędów. Każdy wpis zawiera kod stanu HTTP (404 lub 500, dla tych błędów), typ, opis, nazwę zalogowanego użytkownika, gdy wystąpił błąd, oraz datę i godzinę. Kliknięcie linku Szczegóły powoduje wyświetlenie strony zawierającej ten sam komunikat o błędzie widoczny w żółtym ekranie śmierci Szczegóły błędu (zobacz Rysunek 4) wraz z wartościami zmiennych serwera w momencie wystąpienia błędu (zobacz Rysunek 5). Można również wyświetlić nieprzetworzone dane XML, w których są zapisywane szczegóły błędu, w tym dodatkowe informacje, takie jak wartości w nagłówku HTTP POST.
Rysunek 4. Wyświetlanie szczegółów błędu YSOD
(Kliknij, aby wyświetlić obraz w pełnym rozmiarze)
Rysunek 5. Eksplorowanie wartości kolekcji zmiennych serwera w momencie wystąpienia błędu
(Kliknij, aby wyświetlić obraz w pełnym rozmiarze)
Wdrażanie rozwiązania ELMAH w produkcyjnej witrynie internetowej obejmuje:
Elmah.dll
Kopiowanie pliku doBin
folderu w środowisku produkcyjnym- Kopiowanie ustawień konfiguracji specyficznych dla elMAH do pliku używanego
Web.config
w środowisku produkcyjnym i - Dodawanie infrastruktury źródła dziennika błędów do produkcyjnej bazy danych.
W poprzednich samouczkach omówiliśmy techniki kopiowania plików z programowania do środowiska produkcyjnego. Być może najprostszym sposobem uzyskania infrastruktury źródła dziennika błędów w produkcyjnej bazie danych jest użycie SQL Server Management Studio do nawiązania połączenia z produkcyjną bazą danych, a następnie wykonanie pliku skryptuSqlServer.sql
, który utworzy wymaganą tabelę i procedury składowane.
Wyświetlanie strony szczegółów błędu w środowisku produkcyjnym
Po wdrożeniu witryny w środowisku produkcyjnym odwiedź produkcyjną witrynę internetową i wygeneruj nieobsługiwany wyjątek. Podobnie jak w środowisku projektowym elMAH nie ma wpływu na stronę błędu wyświetlaną w przypadku wystąpienia nieobsługiwanego wyjątku; Zamiast tego tylko rejestruje błąd. Jeśli spróbujesz odwiedzić stronę dziennika błędów (elmah.axd
) ze środowiska produkcyjnego, zostanie wyświetlona strona Zabronione pokazana na rysunku 6.
Rysunek 6. Domyślnie odwiedzający zdalni nie mogą wyświetlić strony sieci Web dziennika błędów
(Kliknij, aby wyświetlić obraz w pełnym rozmiarze)
Pamiętaj, że w sekcji konfiguracji <security>
ELMAH ustawiliśmy allowRemoteAccess
atrybut na 0, co uniemożliwia użytkownikom zdalnym wyświetlanie dziennika błędów. Ważne jest, aby uniemożliwić anonimowym odwiedzającym wyświetlanie dziennika błędów, ponieważ szczegóły błędu mogą ujawnić luki w zabezpieczeniach lub inne poufne informacje. Jeśli zdecydujesz się ustawić ten atrybut na 1 i włączyć zdalny dostęp do dziennika błędów, ważne jest zablokowanie elmah.axd
ścieżki tak, aby tylko autoryzowani odwiedzający mogli uzyskać do niego dostęp. Można to osiągnąć, dodając <location>
element do Web.config
pliku.
Poniższa konfiguracja zezwala tylko użytkownikom w roli Administracja na dostęp do strony internetowej dziennika błędów:
<?xml version="1.0"?>
<configuration>
...
<elmah>
<security allowRemoteAccess="1" />
...
</elmah>
...
<location path="elmah.axd">
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" />
</authorization>
</system.web>
</location>
</configuration>
Uwaga
Rola Administracja i trzech użytkowników w systemie — Scott, Jisun i Alice — zostały dodane w samouczku Konfigurowanie witryny internetowej korzystającej z usług aplikacji. Użytkownicy Scott i Jisun są członkami roli Administracja. Aby uzyskać więcej informacji na temat uwierzytelniania i autoryzacji, zapoznaj się z moimi samouczkami dotyczącymi zabezpieczeń witryny internetowej.
Dziennik błędów w środowisku produkcyjnym może być teraz wyświetlany przez użytkowników zdalnych. Zapoznaj się z ilustracjami 3, 4 i 5 , aby zapoznać się ze zrzutami ekranu strony internetowej dziennika błędów. Jeśli jednak użytkownik anonimowy lub inny niż Administracja próbuje wyświetlić stronę dziennika błędów, zostanie automatycznie przekierowana do strony logowania (Login.aspx
), jak pokazano na rysunku 7.
Rysunek 7. Nieautoryzowani użytkownicy są automatycznie przekierowywani do strony logowania
(Kliknij, aby wyświetlić obraz w pełnym rozmiarze)
Błędy rejestrowania programowego
Moduł HTTP ELMAH ErrorLogModule
automatycznie rejestruje nieobsługiwane wyjątki do określonego źródła dziennika. Alternatywnie możesz zarejestrować błąd bez konieczności zgłaszania nieobsługiwanego wyjątku ErrorSignal
przy użyciu klasy i jej Raise
metody. Metoda Raise
jest przekazywana Exception
do obiektu i rejestruje go tak, jakby ten wyjątek został zgłoszony i dotarł do środowiska uruchomieniowego ASP.NET bez obsługi. Różnica polega jednak na tym, że żądanie kontynuuje normalne wykonywanie po Raise
wywołaniu metody, podczas gdy zgłoszony, nieobsługiwany wyjątek przerywa normalne wykonywanie żądania i powoduje, że środowisko uruchomieniowe ASP.NET wyświetli skonfigurowaną stronę błędu.
Klasa ErrorSignal
jest przydatna w sytuacjach, gdy istnieje pewna akcja, która może zakończyć się niepowodzeniem, ale jej awaria nie jest katastrofalna dla ogólnej operacji wykonywanej. Na przykład witryna internetowa może zawierać formularz, który przyjmuje dane wejściowe użytkownika, przechowuje go w bazie danych, a następnie wysyła użytkownikowi wiadomość e-mail z informacją o przetworzeniu informacji. Co się stanie, jeśli informacje zostaną pomyślnie zapisane w bazie danych, ale podczas wysyłania wiadomości e-mail wystąpi błąd? Jedną z opcji jest zgłoszenie wyjątku i wysłanie użytkownika na stronę błędu. Może to jednak mylić użytkownika z myśleniem, że wprowadzone informacje nie zostały zapisane. Innym podejściem jest zarejestrowanie błędu związanego z pocztą e-mail, ale nie zmiana środowiska użytkownika w żaden sposób. W tym miejscu przydaje ErrorSignal
się klasa.
' ... Save user's information to the database ...
...
' Attempt to send the user a confirmation email
' ... Send an email ...
Try
Catch e As Exception
' Error in sending email. Log it!
ErrorSignal.FromCurrentContext().Raise(e)
End Try
Powiadomienie o błędzie za pośrednictwem Email
Oprócz błędów rejestrowania w bazie danych elMAH można również skonfigurować pod kątem szczegółów błędu wiadomości e-mail do określonego adresata. Ta funkcja jest udostępniana ErrorMailModule
przez moduł HTTP, dlatego należy zarejestrować ten moduł HTTP w Web.config
celu wysłania szczegółów błędu za pośrednictwem poczty e-mail.
<?xml version="1.0"?>
<configuration>
...
<system.web>
...
<httpModules>
...
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
</httpModules>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
...
<add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="Elmah.ErrorMail" type="Elmah.ErrorMailModule" preCondition="managedHandler" />
</modules>
...
</system.webServer>
</configuration>
Następnie określ informacje o wiadomości e-mail o błędzie w <elmah>
sekcji elementu <errorMail>
, wskazując nadawcę i adresata wiadomości e-mail, temat oraz informację o tym, czy wiadomość e-mail jest wysyłana asynchronicznie.
<?xml version="1.0"?>
<configuration>
...
<elmah>
...
<errorMail from="support@example.com"
to="support@example.com"
subject="Book Reviews Runtime Error"
async="true" />
</elmah>
...
</configuration>
Po utworzeniu powyższych ustawień za każdym razem, gdy wystąpi błąd środowiska uruchomieniowego ELMAH wysyła wiadomość e-mail ze support@example.com szczegółami błędu. Wiadomość e-mail dotycząca błędu ELMAH zawiera te same informacje, które są wyświetlane na stronie internetowej szczegółów błędu, a mianowicie komunikat o błędzie, ślad stosu i zmienne serwera (zapoznaj się z ilustracjami 4 i 5). Wiadomość e-mail o błędzie zawiera również zawartość Yellow Screen of Death szczegóły wyjątku jako załącznik (YSOD.html
).
Rysunek 8 przedstawia wiadomość e-mail o błędzie ELMAH wygenerowaną przez stronę Genre.aspx?ID=foo
. Chociaż rysunek 8 przedstawia tylko komunikat o błędzie i ślad stosu, zmienne serwera są uwzględniane w treści wiadomości e-mail.
Rysunek 8. Możesz skonfigurować elmAH do wysyłania szczegółów błędu za pośrednictwem Email
(Kliknij, aby wyświetlić obraz w pełnym rozmiarze)
Tylko rejestrowanie interesujących cię błędów
Domyślnie ELMAH rejestruje szczegóły każdego nieobsługiwanego wyjątku, w tym błędy 404 i inne błędy HTTP. Możesz poinstruować ELMAH, aby zignorował te lub inne typy błędów przy użyciu filtrowania błędów. Logika filtrowania jest wykonywana ErrorFilterModule
przez moduł HTTP ELMAH, który należy zarejestrować w Web.config
celu użycia logiki filtrowania. Reguły filtrowania są określone w <errorFilter>
sekcji .
Poniższe znaczniki instruują ELMAH, aby nie rejestrowała błędów 404.
<?xml version="1.0"?>
<configuration>
...
<elmah>
...
<errorFilter>
<test>
<equal binding="HttpStatusCode" value="404" type="Int32" />
</test>
</errorFilter>
</elmah>
...
</configuration>
Uwaga
Nie zapomnij, aby użyć filtrowania ErrorFilterModule
błędów, należy zarejestrować moduł HTTP.
Element <equal>
wewnątrz <test>
sekcji jest nazywany asercją. Jeśli asercji daje wartość true, błąd jest filtrowany z dziennika ELMAH. Dostępne są inne asercji, w tym: <greater>
, <greater-or-equal>
, <not-equal>
, <lesser>
, , <lesser-or-equal>
itd. Można również łączyć asercji przy użyciu operatorów logicznych <and>
i <or>
. Co więcej, możesz nawet dołączyć proste wyrażenie Języka JavaScript jako asercję lub napisać własne asercje w języku C# lub Visual Basic.
Aby uzyskać więcej informacji na temat możliwości filtrowania błędów ELMAH, zapoznaj się z sekcją Filtrowanie błędów w witrynie typu wiki ELMAH.
Podsumowanie
ELMAH zapewnia prosty, ale zaawansowany mechanizm rejestrowania błędów w aplikacji internetowej ASP.NET. Podobnie jak system monitorowania kondycji firmy Microsoft, SYSTEM ELMAH może rejestrować błędy w bazie danych i wysyłać szczegóły błędu do dewelopera za pośrednictwem poczty e-mail. W przeciwieństwie do systemu monitorowania kondycji system ELMAH obejmuje gotowe do użycia obsługę szerszego zakresu magazynów danych dziennika błędów, w tym: Microsoft SQL Server, Microsoft Access, Oracle, pliki XML i kilka innych. Ponadto SYSTEM ELMAH oferuje wbudowany mechanizm wyświetlania dziennika błędów oraz szczegółowe informacje o określonym błędzie ze strony internetowej. elmah.axd
Strona elmah.axd
może również renderować informacje o błędach jako źródło danych RSS lub jako plik wartości rozdzielanych przecinkami (CSV), który można odczytać przy użyciu programu Microsoft Excel. Można również poinstruować ELMAH, aby filtrować błędy z dziennika przy użyciu asercji deklaratywnych lub programowych. System ELMAH może być używany z aplikacjami ASP.NET w wersji 1.x.
Każda wdrożona aplikacja powinna mieć mechanizm automatycznego rejestrowania nieobsługiwanych wyjątków i wysyłania powiadomień do zespołu deweloperów. Niezależnie od tego, czy jest to realizowane przy użyciu monitorowania kondycji, czy ELMAH jest pomocnicze. Innymi słowy, nie ma znaczenia, czy używasz monitorowania kondycji, czy ELMAH; oceń oba systemy, a następnie wybierz ten, który najlepiej odpowiada Twoim potrzebom. Zasadniczo ważne jest, aby w środowisku produkcyjnym rejestrować nieobsługiwane wyjątki.
Szczęśliwe programowanie!
Dalsze informacje
Aby uzyskać więcej informacji na temat tematów omówionych w tym samouczku, zapoznaj się z następującymi zasobami: