Sdílet prostřednictvím


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

Scott Mitchell

Moduly a obslužné rutiny protokolování chyb (ELMAH) nabízejí jiný 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 si ho stáhnout jako soubor oddělený čárkami. Tento kurz vás provede stahováním a konfigurací ELMAH.

Úvod

Předchozí kurz prozkoumal ASP. Systém monitorování stavu net, který nabízí připravenou knihovnu pro zaznamenávání široké škály webových událostí. Mnoho vývojářů používá monitorování stavu k protokolování a e-mailu s podrobnostmi o neošetřených výjimkách. Existuje však několik bodů bolesti s tímto systémem. V první řadě chybí jakýkoli druh uživatelského rozhraní pro zobrazení informací o protokolovaných událostech. Pokud chcete zobrazit souhrn posledních 10 chyb nebo zobrazit podrobnosti o chybě, ke které došlo minulý týden, musíte buď projít databázi, projít si doručenou poštu e-mailu nebo vytvořit webovou stránku, která bude zobrazovat informace z aspnet_WebEvent_Events tabulky.

Další problém se zaměřuje na složitost monitorování stavu. Vzhledem k tomu, že monitorování stavu je možné použít k zaznamenávání nepřeberné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. Kromě toho SqlWebEventProvider třída, kterou jsme použili v předchozím kurzu k protokolování podrobností o chybách do databáze, funguje pouze 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ý společností Atif Aziz. 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 nástroje ELMAH je jednodušší než monitorování stavu, protože protokoluje pouze chyby. ELMAH navíc zahrnuje podporu aplikací 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 kroky, které jsou součástí přidání elmah do aplikace ASP.NET. 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 stávající aplikace ASP.NET 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. Zaregistrujte moduly HTTP a obslužnou rutinu ELMAH v Web.configsystému .
  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 a získat nejnovější verzi nebo stáhnout 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 vydanou verzi sestavení. 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 nejněmecké moduly 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 protokolu 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 databáze Vista DB. Stejně jako systém monitorování stavu byla architektura ELMAH vytvořená 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 HTTP a obslužnou rutinu 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ě zaregistrovány v konfiguraci webové aplikace. Po ErrorLogModule registraci se modul HTTP přihlásí k odběru HttpApplicationError události . Pokaždé, když je tato událost vyvolána, ErrorLogModule protokoluje podrobnosti o výjimce do zadaného zdroje protokolu. V další části Konfigurace ELMAH se dozvíme, jak definovat poskytovatele zdroje protokolu. Za ErrorLogPageFactory vygenerování kódu při zobrazení protokolu chyb z webové stránky zodpovídá továrna obslužné rutiny HTTP.

Specifická syntaxe pro registraci modulů a obslužných rutin HTTP závisí na webovém serveru, který web napájel. Pro vývojový server ASP.NET a službu IIS od Microsoftu verze 6.0 a starší jsou moduly a obslužné rutiny HTTP registrovány v <httpModules> oddílech a <httpHandlers> , které se zobrazují v elementu <system.web> . Pokud používáte službu IIS 7.0, musíte je zaregistrovat v <system.webServer> oddílech a <handlers> elementech<modules>. Moduly HTTP a obslužné rutiny můžete naštěstí definovat na obou místech bez ohledu na použitý webový server. Tato možnost je nejnosnější, protože umožňuje použít stejnou konfiguraci 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>

Služba IIS 7 si ve výchozím nastavení 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 dorazí požadavek na stránku s názvem elmah.axd , měl by požadavek zpracovat obslužná rutina ErrorLogPageFactory HTTP. Obslužnou rutinu ErrorLogPageFactory HTTP uvidíme v akci později v tomto kurzu.

Krok 3: Konfigurace ELMAH

ELMAH hledá možnosti konfigurace v souboru webu Web.config v části vlastní konfigurace s názvem <elmah>. Chcete-li 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 oddíl <elmah> 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> , například 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, pak se webová stránka protokolu chyb dá zobrazit jenom místně. Pokud je tento atribut nastaven na hodnotu 1, je webová stránka protokolu chyb povolena pro vzdálené i místní návštěvníky. Prozatím zakažme 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, který ukazuje, že zprostředkovatel chyb S Q L protokoluje chyby zapsané do tabulky

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 znázorňující zobrazení protokolu 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 s podrobnostmi o chybě YSOD

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

Snímek obrazovky znázorňující hodnoty kolekce proměnných serveru

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 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 znázorňující automatické přesměrování neoprávněných uživatelů 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
try
{
    // ... Send an email ...
}
catch (Exception e)
{
    // Error in sending email. Log it!
    ErrorSignal.FromCurrentContext().Raise(e);
}

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, že nástroj ELMAH můžete nakonfigurovat tak, aby odesílal 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 další kontrolní výrazy, mezi které patří: <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 společnosti ELMAH najdete v části Filtrování chyb v článcích ELMAH.

Souhrn

ELMAH poskytuje jednoduchý, ale výkonný mechanismus pro protokolování chyb v ASP.NET webové aplikaci. Podobně jako systém monitorování stavu od Microsoftu může ELMAH protokolovat chyby do databáze a odesílat podrobnosti o chybách vývojáři e-mailem. Na rozdíl od systému monitorování stavu zahrnuje ELMAH podporu pro širší škálu úložišť dat protokolu chyb, mezi které patří: Microsoft SQL Server, Microsoft Access, Oracle, soubory XML a několik 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 s hodnotami oddělenými čárkami (CSV), který můžete přečíst v Microsoft Excelu. Můžete také dát ELMAH pokyn, aby filtruje 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. To, 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. Zásadní význam má zavedení mechanismu protokolování neošetřených výjimek v produkčním prostředí.

Šťastné programování!

Další čtení

Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací: