Sdílet prostřednictvím


Protokolování podrobností o chybách pomocí knihovny ELMAH (VB)

Scott Mitchell

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:

  1. Stáhněte si ELMAH a přidejte Elmah.dll sestavení do webové aplikace.
  2. Registrace modulů HTTP a obslužné rutiny ELMAH v Web.config,
  3. Zadejte možnosti konfigurace elmah a
  4. 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.dlldo 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, jako Error 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 ErrorHttpApplicationudá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.axdhodnotu . 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_GetErrorXmla 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 .

Snímek obrazovky znázorňující tabulku chyb ELMAH s chybami protokolu chyb protokolu chyb S Q L

Obrázek 1: SqlErrorLog Zprostředkovatel protokoluje chyby do ELMAH_Error tabulky

Snímek obrazovky, který ukazuje, jak zprostředkovatel protokolu chyb S Q L používá tři uložené procedury

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.configa 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í.

Snímek obrazovky zobrazující protokol chyb z webové stránky

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.

Snímek obrazovky, který ukazuje, že můžete zobrazit podrobnosti o chybě Y S O D.

Obrázek 4: Zobrazení podrobností o chybě YSOD
(Kliknutím zobrazíte obrázek v plné velikosti.)

Snímek obrazovky, který ukazuje, jak prozkoumat hodnoty kolekce proměnných serveru v době chyby

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 v Bin 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.

Snímek obrazovky, který ukazuje, že vzdálení návštěvníci ve výchozím nastavení nemůžou zobrazit webovou stránku protokolu chyb

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.

Snímek obrazovky, který ukazuje, že neautorizovaní uživatelé jsou automaticky přesměrováni na přihlašovací stránku

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.

Snímek obrazovky, který ukazuje, jak nakonfigurovat elmah tak, aby odesílala podrobnosti o chybách e-mailem

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í: