Protokolování podrobností o chybách pomocí knihovny ELMAH (VB)
Moduly a obslužné rutiny protokolování chyb (ELMAH) nabízí další přístup k protokolování chyb modulu runtime v produkčním prostředí. ELMAH je bezplatná knihovna protokolování chyb open source, která obsahuje funkce, jako je filtrování chyb a možnost zobrazit protokol chyb z webové stránky, jako informační kanál RSS, nebo jej stáhnout jako soubor oddělený čárkami. Tento kurz vás provede stažením a konfigurací elmah.
Úvod
Předchozí kurz zkoumal ASP. Systém monitorování stavu platformy NET, který nabízí připravenou knihovnu pro záznam široké škály webových událostí. Mnoho vývojářů používá monitorování stavu k protokolování a posílání podrobností o neošetřených výjimkách e-mailem. Tento systém však má několik problematicých bodů. Především je chybějící jakýkoli druh uživatelského rozhraní pro zobrazení informací o protokolovaných událostech. Pokud chcete zobrazit souhrn 10 posledních chyb nebo podrobnosti o chybě, ke které došlo minulý týden, musíte projít databázi, projít si e-mailovou doručenou poštu nebo vytvořit webovou stránku, která bude zobrazovat informace z aspnet_WebEvent_Events
tabulky.
Další bod bolesti se zaměřuje na složitost monitorování stavu. Vzhledem k tomu, že monitorování stavu lze použít k zaznamenání velkého množství různých událostí a protože existuje řada možností, jak instruovat, jak a kdy se události protokolují, může být správná konfigurace systému monitorování stavu obtížnou úlohou. Nakonec existují problémy s kompatibilitou. Vzhledem k tomu, že monitorování stavu bylo poprvé přidáno do rozhraní .NET Framework ve verzi 2.0, není k dispozici pro starší webové aplikace vytvořené pomocí ASP.NET verze 1.x. Třída, SqlWebEventProvider
kterou jsme použili v předchozím kurzu k protokolování podrobností o chybách do databáze, navíc funguje jenom s databázemi Microsoft SQL Server. Pokud potřebujete protokolovat chyby do alternativního úložiště dat, jako je soubor XML nebo databáze Oracle, budete muset vytvořit vlastní třídu zprostředkovatele protokolů.
Alternativou k systému monitorování stavu jsou moduly a obslužné rutiny protokolování chyb (ELMAH), bezplatný opensourcový systém protokolování chyb vytvořený Atifem Azizem. Nejvýznamnějším rozdílem mezi těmito dvěma systémy je schopnost ELAMH zobrazit seznam chyb a podrobnosti o konkrétní chybě z webové stránky a jako informační kanál RSS. Konfigurace ELMAH je jednodušší než monitorování stavu, protože protokoluje pouze chyby. ELMAH navíc podporuje aplikace ASP.NET 1.x, ASP.NET 2.0 a ASP.NET 3.5 a dodává se s různými poskytovateli zdrojů protokolů.
Tento kurz vás provede postupem přidání elmah do ASP.NET aplikace. Pusťme se do toho.
Poznámka
Systém monitorování stavu a ELMAH mají své vlastní sady kladů a záporů. Doporučuji vám, abyste vyzkoušeli oba systémy a rozhodli se, který z nich nejlépe vyhovuje vašim potřebám.
Přidání elmah do webové aplikace ASP.NET
Integrace ELMAH do nové nebo existující ASP.NET aplikace je jednoduchý a přímočarý proces, který trvá méně než pět minut. Stručně řečeno, zahrnuje čtyři jednoduché kroky:
- Stáhněte si ELMAH a přidejte
Elmah.dll
sestavení do webové aplikace. - Registrace modulů HTTP a obslužné rutiny ELMAH v
Web.config
, - Zadejte možnosti konfigurace elmah a
- V případě potřeby vytvořte infrastrukturu zdroje protokolu chyb.
Pojďme si projít každý z těchto čtyř kroků, jeden po druhém.
Krok 1: Stažení souborů projektu ELMAH a přidáníElmah.dll
do webové aplikace
ELMAH 1.0 BETA 3 (build 10617), nejnovější verze v době psaní tohoto článku, je součástí souboru ke stažení, který je k dispozici v tomto kurzu. Případně můžete navštívit web ELMAH , kde získáte nejnovější verzi nebo si stáhnete zdrojový kód. Extrahujte stažený soubor ELMAH do složky na ploše a vyhledejte soubor sestavení ELMAH (Elmah.dll
).
Poznámka
Soubor Elmah.dll
se nachází ve složce ke stažení Bin
, která obsahuje podsložky pro různé verze rozhraní .NET Framework a pro sestavení vydané verze a ladění. Pro příslušnou verzi architektury použijte release build. Pokud například vytváříte webovou aplikaci ASP.NET 3.5, zkopírujte Elmah.dll
soubor ze Bin\net-3.5\Release
složky .
Potom otevřete Visual Studio a přidejte sestavení do projektu tak, že kliknete pravým tlačítkem na název webu v Průzkumník řešení a v místní nabídce zvolíte Přidat odkaz. Zobrazí se dialogové okno Přidat odkaz. Přejděte na kartu Procházet a zvolte Elmah.dll
soubor. Tato akce přidá Elmah.dll
soubor do složky webové aplikace Bin
.
Poznámka
Typ Projektu webové aplikace (WAP) nezobrazuje Bin
složku v Průzkumník řešení. Místo toho tyto položky vypíše ve složce Reference.
Sestavení Elmah.dll
obsahuje třídy používané systémem ELMAH. Tyto třídy spadají do jedné ze tří kategorií:
Moduly HTTP – modul HTTP je třída, která definuje obslužné rutiny událostí pro
HttpApplication
události, jakoError
je například událost. ELMAH obsahuje několik modulů HTTP, přičemž tři z nich jsou:ErrorLogModule
– protokoluje neošetřené výjimky do zdroje protokolů.ErrorMailModule
– odešle podrobnosti o neošetřené výjimce v e-mailové zprávě.ErrorFilterModule
– použije filtry zadané vývojářem k určení, jaké výjimky se protokolují a které se ignorují.
Obslužné rutiny HTTP – obslužná rutina HTTP je třída, která je zodpovědná za generování značek pro konkrétní typ požadavku. ELMAH obsahuje obslužné rutiny HTTP, které vykreslují podrobnosti o chybách jako webovou stránku, jako informační kanál RSS nebo jako soubor oddělený čárkami (CSV).
Zdroje protokolů chyb – ELMAH může protokolovat chyby do paměti, do databáze Microsoft SQL Server, do databáze Microsoft Accessu, do databáze Oracle, do souboru XML, do databáze SQLite nebo do databáze Vista DB. Stejně jako systém monitorování stavu byla architektura elmah vytvořena pomocí modelu poskytovatele, což znamená, že v případě potřeby můžete vytvořit a bezproblémově integrovat vlastní poskytovatele zdrojů protokolů.
Krok 2: Registrace modulu HTTP a obslužné rutiny ELMAH
Elmah.dll
I když soubor obsahuje moduly a obslužnou rutinu HTTP potřebné k automatickému protokolování neošetřených výjimek a zobrazení podrobností o chybách z webové stránky, musí být explicitně registrovány v konfiguraci webové aplikace. Jakmile se ErrorLogModule
modul HTTP zaregistruje, přihlásí se k odběru Error
HttpApplication
události . Pokaždé, když je tato událost vyvolána, ErrorLogModule
protokoluje podrobnosti o výjimce pro zadaný zdroj protokolu. V další části Konfigurace ELMAH se dozvíte, jak definovat poskytovatele zdroje protokolu. Objekt ErrorLogPageFactory
pro zpracování HTTP je zodpovědný za generování kódu při zobrazení protokolu chyb z webové stránky.
Specifická syntaxe pro registraci modulů a obslužných rutin HTTP závisí na webovém serveru, který web používá. Pro ASP.NET Development Server a Microsoft IIS verze 6.0 a starší, moduly a obslužné rutiny HTTP jsou registrovány v <httpModules>
částech a <httpHandlers>
, které se zobrazí v elementu <system.web>
. Pokud používáte službu IIS 7.0, musí být zaregistrované v oddílech elementu <system.webServer>
<modules>
a <handlers>
. Naštěstí můžete definovat moduly a obslužné rutiny HTTP na obou místech bez ohledu na použitý webový server. Tato možnost je nejnosnější, protože umožňuje použití stejné konfigurace ve vývojovém a produkčním prostředí bez ohledu na použitý webový server.
Začněte registrací ErrorLogModule
modulu HTTP a obslužné rutiny ErrorLogPageFactory
HTTP v <httpModules>
části a <httpHandlers>
v <system.web>
. Pokud už vaše konfigurace definuje tyto dva prvky, jednoduše zahrňte <add>
element pro modul HTTP a obslužnou rutinu 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>
Dále zaregistrujte modul HTTP a obslužnou rutinu ELMAH v elementu <system.webServer>
. Stejně jako předtím, pokud tento prvek ještě není k dispozici ve vaší konfiguraci, přidejte ho.
<?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>
Ve výchozím nastavení služba IIS 7 stěžuje, pokud jsou v oddílu <system.web>
zaregistrované moduly a obslužné rutiny HTTP. Atribut validateIntegratedModeConfiguration
v elementu dává službě <validation>
IIS 7 pokyn, aby tyto chybové zprávy potlačila.
Všimněte si, že syntaxe pro registraci obslužné rutiny ErrorLogPageFactory
HTTP obsahuje path
atribut , který je nastavený na elmah.axd
hodnotu . Tento atribut informuje webovou aplikaci, že pokud přijde požadavek na stránku s názvem elmah.axd
, měl by požadavek zpracovat obslužná ErrorLogPageFactory
rutina HTTP. Obslužnou rutinu ErrorLogPageFactory
HTTP uvidíme v akci později v tomto kurzu.
Krok 3: Konfigurace ELMAH
ELMAH hledá své možnosti konfigurace v souboru webu Web.config
v části vlastní konfigurace s názvem <elmah>
. Pokud chcete použít vlastní oddíl v Web.config
něm, musí být nejprve definován v elementu <configSections>
. Web.config
Otevřete soubor a přidejte do <configSections>
souboru následující kód :
<?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>
Poznámka
Pokud konfigurujete ELMAH pro aplikaci ASP.NET 1.x, odeberte requirePermission="false"
atribut z výše uvedených <section>
prvků.
Výše uvedená syntaxe registruje vlastní <elmah>
oddíl a jeho dílčí části: <security>
, <errorLog>
, <errorMail>
a <errorFilter>
.
Dále přidejte <elmah>
oddíl do Web.config
. Tento oddíl by se měl zobrazit na stejné úrovni jako <system.web>
element. Do oddílu <elmah>
<security>
přidejte oddíly a <errorLog>
takto:
<?xml version="1.0"?>
<configuration>
...
<elmah>
<security allowRemoteAccess="0" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ReviewsConnectionString" />
</elmah>
...
</configuration>
Atribut <security>
oddílu allowRemoteAccess
označuje, jestli je povolený vzdálený přístup. Pokud je tato hodnota nastavená na 0, webovou stránku protokolu chyb lze zobrazit pouze místně. Pokud je tento atribut nastavený na hodnotu 1, je webová stránka protokolu chyb povolená pro vzdálené i místní návštěvníky. Prozatím zakážeme webovou stránku protokolu chyb pro vzdálené návštěvníky. Vzdálený přístup povolíme později, až budeme mít příležitost prodiskutovat aspekty zabezpečení.
Oddíl <errorLog>
definuje zdroj protokolu chyb, který určuje, kde se zaznamenávají podrobnosti o chybě. Podobá se oddílu <providers>
v systému monitorování stavu. Výše uvedená syntaxe určuje SqlErrorLog
třídu jako zdroj protokolu chyb, který protokoluje chyby do databáze Microsoft SQL Server určené hodnotou atributuconnectionStringName
.
Poznámka
ELMAH se dodává s dalšími zprostředkovateli protokolů chyb, které lze použít k protokolování chyb do souboru XML, databáze Microsoft Access, databáze Oracle a dalších úložišť dat. Informace o tom, jak tyto alternativní zprostředkovatele protokolu chyb používat, najdete v ukázkovém Web.config
souboru, který je součástí souboru ELMAH ke stažení.
Krok 4: Vytvoření zdrojové infrastruktury protokolu chyb
Zprostředkovatel ELMAH SqlErrorLog
protokoluje podrobnosti o chybách do zadané databáze Microsoft SQL Server. SqlErrorLog
Zprostředkovatel očekává, že tato databáze bude mít tabulku s názvem ELMAH_Error
a tři uložené procedury: ELMAH_GetErrorsXml
, ELMAH_GetErrorXml
a ELMAH_LogError
. Elmah ke stažení obsahuje soubor s názvem SQLServer.sql
ve db
složce, která obsahuje T-SQL pro vytvoření této tabulky a těchto uložených procedur. Abyste mohli poskytovatele používat, budete muset tyto příkazy spustit ve SqlErrorLog
své databázi.
Obrázky 1 a 2 znázorňují Průzkumníka databáze v sadě Visual Studio po přidání databázových objektů potřebných poskytovatelem SqlErrorLog
.
Obrázek 1: SqlErrorLog
Zprostředkovatel protokoluje chyby do ELMAH_Error
tabulky
Obrázek 2: SqlErrorLog
Zprostředkovatel používá tři uložené procedury
ELMAH v akci
V tomto okamžiku jsme do webové aplikace přidali elmah, zaregistrovali ErrorLogModule
modul HTTP a obslužnou rutinu ErrorLogPageFactory
HTTP, zadali možnosti konfigurace ELMAH v Web.config
a přidali potřebné databázové objekty pro SqlErrorLog
zprostředkovatele protokolu chyb. Nyní jsme připraveni vidět ELMAH v akci! Navštivte web Recenze knih a navštivte stránku, která generuje chybu za běhu, například Genre.aspx?ID=foo
, nebo neexistující stránku, například NoSuchPage.aspx
. To, co uvidíte při návštěvě těchto stránek, závisí na konfiguraci a na <customErrors>
tom, jestli je navštěvujete místně nebo vzdáleně. (Projděte si kurz Zobrazení vlastní chybové stránky, kde najdete další informace k tomuto tématu.)
ELMAH nemá vliv na to, jaký obsah se zobrazí uživateli, když dojde k neošetřené výjimce; to jen protokoluje své podrobnosti. Tento protokol chyb je přístupný z webové stránky elmah.axd
z kořenového adresáře vašeho webu, například http://localhost/BookReviews/elmah.axd
. (Tento soubor v projektu fyzicky neexistuje, ale když přijde požadavek na elmah.axd
modul runtime, odešle ho do ErrorLogPageFactory
obslužné rutiny HTTP, která vygeneruje kód odeslaný zpět do prohlížeče.)
Poznámka
Tuto stránku můžete také použít elmah.axd
k instrukci ELMAH, aby vygenerovala chybu testu. Návštěva elmah.axd/test
(jako v ) způsobí, http://localhost/BookReviews/elmah.axd/test
že ELMAH vyvolá výjimku typu Elmah.TestException
, která obsahuje chybovou zprávu: "Toto je testovací výjimka, kterou lze bezpečně ignorovat."
Obrázek 3 ukazuje protokol chyb při návštěvě elmah.axd
z vývojového prostředí.
Obrázek 3: Elmah.axd
Zobrazí protokol chyb z webové stránky.
(Kliknutím zobrazíte obrázek v plné velikosti.)
Protokol chyb na obrázku 3 obsahuje šest chybových položek. Každá položka obsahuje stavový kód HTTP (pro tyto chyby 404 nebo 500), typ, popis, jméno přihlášeného uživatele, když došlo k chybě, a datum a čas. Kliknutím na odkaz Podrobnosti se zobrazí stránka, která obsahuje stejnou chybovou zprávu zobrazenou na žluté obrazovce podrobností o chybě (viz obrázek 4) spolu s hodnotami proměnných serveru v době chyby (viz obrázek 5). Můžete také zobrazit nezpracovaný SOUBOR XML, ve kterém jsou uloženy podrobnosti o chybě, který obsahuje další informace, jako jsou hodnoty v hlavičce HTTP POST.
Obrázek 4: Zobrazení podrobností o chybě YSOD
(Kliknutím zobrazíte obrázek v plné velikosti.)
Obrázek 5: Prozkoumání hodnot kolekce proměnných serveru v době chyby
(Kliknutím zobrazíte obrázek v plné velikosti.)
Nasazení ELMAH na produkční web zahrnuje:
- Kopírování
Elmah.dll
souboru do složky vBin
produkčním prostředí - Zkopírování konfiguračního nastavení specifického pro ELMAH do souboru použitého
Web.config
v produkčním prostředí a - Přidání zdrojové infrastruktury protokolu chyb do produkční databáze
V předchozích kurzech jsme prozkoumali techniky kopírování souborů od vývoje do produkčního prostředí. Možná nejjednodušším způsobem, jak získat infrastrukturu zdroje protokolu chyb v produkční databázi, je použít SQL Server Management Studio pro připojení k produkční databázi a pak spustit SqlServer.sql
soubor skriptu, který vytvoří potřebnou tabulku a uložené procedury.
Zobrazení stránky s podrobnostmi o chybě v produkčním prostředí
Po nasazení webu do produkčního prostředí navštivte produkční web a vygenerujte neošetřenou výjimku. Stejně jako ve vývojovém prostředí nemá ELMAH žádný vliv na chybovou stránku zobrazenou v případě, že dojde k neošetřené výjimce; místo toho pouze zaznamená chybu. Pokud se pokusíte navštívit stránku protokolu chyb (elmah.axd
) z produkčního prostředí, zobrazí se stránka Zakázáno zobrazená na obrázku 6.
Obrázek 6: Ve výchozím nastavení nemůžou vzdálení návštěvníci zobrazit webovou stránku protokolu chyb.
(Kliknutím zobrazíte obrázek v plné velikosti.)
Vzpomeňte si, že v části konfigurace <security>
ELMAH jsme nastavili allowRemoteAccess
atribut na 0, což zakazuje vzdáleným uživatelům zobrazit protokol chyb. Je důležité zakázat anonymním návštěvníkům zobrazení protokolu chyb, protože podrobnosti o chybách můžou odhalit ohrožení zabezpečení nebo jiné citlivé informace. Pokud se rozhodnete nastavit tento atribut na hodnotu 1 a povolit vzdálený přístup k protokolu chyb, je důležité uzamknout elmah.axd
cestu, aby k němu měli přístup jenom oprávnění návštěvníci. Toho lze dosáhnout přidáním elementu <location>
do Web.config
souboru.
Následující konfigurace umožňuje přístup k webové stránce protokolu chyb pouze uživatelům v roli Správa:
<?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>
Poznámka
Role Správa a tři uživatelé v systému – Scott, Jisun a Alice – jsme přidali v kurzu Konfigurace webu, který používá aplikační služby. Uživatelé Scott a Jisun jsou členy Správa role. Další informace o ověřování a autorizaci najdete v mých kurzech zabezpečení webu.
Protokol chyb v produkčním prostředí teď můžou zobrazit vzdálení uživatelé. Snímky obrazovky webové stránky protokolu chyb najdete na obrázcích 3, 4 a 5 . Pokud se však anonymní nebo Správa uživatel pokusí zobrazit stránku protokolu chyb, bude automaticky přesměrován na přihlašovací stránku (Login.aspx
), jak je znázorněno na obrázku 7.
Obrázek 7: Neautorizovaní uživatelé se automaticky přesměrují na přihlašovací stránku
(Kliknutím zobrazíte obrázek v plné velikosti.)
Chyby protokolování prostřednictvím kódu programu
Modul HTTP společnosti ELMAH ErrorLogModule
automaticky protokoluje neošetřené výjimky do zadaného zdroje protokolu. Alternativně můžete protokolovat chybu bez nutnosti vyvolat neošetřenou výjimku pomocí ErrorSignal
třídy a její Raise
metody. Metodě Raise
se předá Exception
objekt a protokoluje ji, jako by byla tato výjimka vyvolána a dosáhla ASP.NET modulu runtime bez zpracování. Rozdíl je však v tom, že požadavek po volání metody pokračuje normálně Raise
, zatímco vyvolaná neošetřená výjimka přeruší normální provádění požadavku a způsobí, že modul runtime ASP.NET zobrazí nakonfigurovanou chybovou stránku.
Třída ErrorSignal
je užitečná v situacích, kdy existuje nějaká akce, která může selhat, ale její selhání není pro celkovou prováděnou operaci katastrofální. Web může například obsahovat formulář, který převezme vstup uživatele, uloží ho do databáze a pak uživateli pošle e-mail s informací, že informace byly zpracovány. Co by se mělo stát, když se informace úspěšně uloží do databáze, ale při odesílání e-mailové zprávy dojde k chybě? Jednou z možností je vyvolat výjimku a odeslat uživatele na chybovou stránku. To však může uživatele zmást, aby si myslel, že informace, které zadali, nebyly uloženy. Dalším přístupem by bylo zaznamenat chybu související s e-mailem, ale žádným způsobem neměnit uživatelské prostředí. Tady je ErrorSignal
užitečná třída .
' ... 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
Oznámení o chybě prostřednictvím Email
Kromě protokolování chyb do databáze je možné elmah nakonfigurovat také tak, aby podrobnosti o chybách e-mailem generoval zadanému příjemci. Tuto funkci poskytuje ErrorMailModule
modul HTTP. Proto musíte tento modul Web.config
HTTP zaregistrovat, abyste mohli odesílat podrobnosti o chybách e-mailem.
<?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>
Dále v části elementu <elmah>
<errorMail>
zadejte informace o chybovém e-mailu, které označují odesílatele a příjemce e-mailu, předmět a jestli se e-mail odesílá asynchronně.
<?xml version="1.0"?>
<configuration>
...
<elmah>
...
<errorMail from="support@example.com"
to="support@example.com"
subject="Book Reviews Runtime Error"
async="true" />
</elmah>
...
</configuration>
Při výše uvedeném nastavení elmah odešle e-mail support@example.com s podrobnostmi o chybě za běhu. E-mail s chybami elmah obsahuje stejné informace jako na webové stránce s podrobnostmi o chybě, konkrétně chybovou zprávu, trasování zásobníku a proměnné serveru (viz obrázek 4 a 5). E-mail s chybou obsahuje jako přílohu také obsah Žlutá obrazovka smrti s podrobnostmi o výjimce (YSOD.html
).
Obrázek 8 ukazuje e-mail s chybou elmah vygenerovaný návštěvou Genre.aspx?ID=foo
. I když obrázek 8 ukazuje jenom chybovou zprávu a trasování zásobníku, proměnné serveru jsou v textu e-mailu zahrnuté dál.
Obrázek 8: Nástroj ELMAH můžete nakonfigurovat tak, aby odesílal podrobnosti o chybách prostřednictvím Email
(Kliknutím zobrazíte obrázek v plné velikosti.)
Pouze protokolování chyb, které vás zajímají
Elmah ve výchozím nastavení protokoluje podrobnosti o každé neošetřené výjimce, včetně chyby 404 a dalších chyb HTTP. Pomocí filtrování chyb můžete společnosti ELMAH dát pokyn, aby tyto nebo jiné typy chyb ignorovala. Logiku filtrování provádí modul HTTP společnosti ELMAH ErrorFilterModule
, který budete muset zaregistrovat Web.config
, abyste mohli logiku filtrování používat. Pravidla pro filtrování jsou uvedena v části .<errorFilter>
Následující kód dává společnosti ELMAH pokyn, aby chyby 404 ne protokoloval.
<?xml version="1.0"?>
<configuration>
...
<elmah>
...
<errorFilter>
<test>
<equal binding="HttpStatusCode" value="404" type="Int32" />
</test>
</errorFilter>
</elmah>
...
</configuration>
Poznámka
Nezapomeňte, že pokud chcete použít filtrování chyb, musíte zaregistrovat ErrorFilterModule
modul HTTP.
Prvek <equal>
uvnitř oddílu <test>
se označuje jako kontrolní výraz. Pokud se kontrolní výraz vyhodnotí jako true, chyba se vyfiltruje z protokolu ELMAH. K dispozici jsou i další kontrolní výrazy, například : <greater>
, <greater-or-equal>
, <not-equal>
<lesser>
, , <lesser-or-equal>
atd. Kontrolní výrazy můžete také kombinovat pomocí <and>
logických operátorů a <or>
. A co víc, můžete dokonce zahrnout jednoduchý javascriptový výraz jako kontrolní výraz nebo napsat vlastní kontrolní výrazy v jazyce C# nebo Visual Basic.
Další informace o možnostech filtrování chyb elmah najdete v části Filtrování chyb na wikiwebu ELMAH.
Souhrn
ELMAH poskytuje jednoduchý, ale výkonný mechanismus pro protokolování chyb v ASP.NET webové aplikaci. Podobně jako systém pro monitorování stavu od Microsoftu může ELMAH protokolovat chyby do databáze a odeslat podrobnosti o chybách vývojáři e-mailem. Na rozdíl od systému monitorování stavu elmah zahrnuje připravenou podporu pro širší škálu úložišť dat protokolu chyb, včetně Microsoft SQL Server, Microsoft Accessu, Oracle, souborů XML a několika dalších. Elmah navíc nabízí integrovaný mechanismus pro zobrazení protokolu chyb a podrobností o konkrétní chybě z webové stránky . elmah.axd
Stránka elmah.axd
může také vykreslit informace o chybách jako informační kanál RSS nebo jako soubor hodnot oddělených čárkami (CSV), který můžete přečíst pomocí Microsoft Excelu. Můžete také dát elmah pokyn, aby filtroval chyby z protokolu pomocí deklarativních nebo programových kontrolních výrazů. A ELMAH lze použít s aplikacemi ASP.NET verze 1.x.
Každá nasazená aplikace by měla mít nějaký mechanismus pro automatické protokolování neošetřených výjimek a odesílání oznámení vývojovému týmu. Jestli se toho dosahuje pomocí monitorování stavu nebo ELMAH je sekundární. Jinými slovy, nezáleží na tom, zda používáte monitorování zdraví nebo ELMAH; vyhodnotit oba systémy a pak zvolit ten, který nejlépe vyhovuje vašim potřebám. V zásadě je důležité, aby byl zaveden nějaký mechanismus protokolování neošetřených výjimek v produkčním prostředí.
Všechno nejlepší na programování!
Další čtení
Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací: