Registrazione dei dettagli degli errori con ELMAH (VB)

di Scott Mitchell

I moduli di registrazione degli errori e i gestori (ELMAH) offrono un altro approccio alla registrazione degli errori di runtime in un ambiente di produzione. ELMAH è una libreria di registrazione degli errori gratuita open source che include funzionalità come filtro degli errori e la possibilità di visualizzare il log degli errori da una pagina Web, come feed RSS o per scaricarlo come file delimitato da virgole. Questa esercitazione illustra come scaricare e configurare ELMAH.

Introduzione

L'esercitazione precedente ha esaminato ASP. Il sistema di monitoraggio dell'integrità di NET, che offre una libreria out-of-box per registrare un'ampia gamma di eventi Web. Molti sviluppatori usano il monitoraggio dell'integrità per registrare e inviare i dettagli delle eccezioni non gestite. Tuttavia, ci sono alcuni punti di dolore con questo sistema. Prima di tutto è la mancanza di qualsiasi tipo di interfaccia utente per visualizzare informazioni sugli eventi registrati. Se si desidera visualizzare un riepilogo degli ultimi 10 errori o visualizzare i dettagli di un errore che si è verificato l'ultima settimana, è necessario eseguire un'analisi tramite il database, analizzare la posta elettronica nella posta in arrivo o creare una pagina Web che visualizza informazioni dalla aspnet_WebEvent_Events tabella.

Un altro punto di dolore si concentra sulla complessità del monitoraggio della salute. Poiché il monitoraggio dell'integrità può essere usato per registrare una pletora di eventi diversi e perché sono disponibili diverse opzioni per indicare come e quando gli eventi vengono registrati, la configurazione corretta del sistema di monitoraggio dell'integrità può essere un'attività onerosa. Infine, ci sono problemi di compatibilità. Poiché il monitoraggio dell'integrità è stato aggiunto per la prima volta a .NET Framework nella versione 2.0, non è disponibile per le applicazioni Web meno recenti compilate usando ASP.NET versione 1.x. Inoltre, la SqlWebEventProvider classe, usata nell'esercitazione precedente per i log dei dettagli degli errori in un database, funziona solo con i database di Microsoft SQL Server. È necessario creare una classe del provider di log personalizzata per registrare errori in un archivio dati alternativo, ad esempio un file XML o un database Oracle.

Un'alternativa al sistema di monitoraggio dell'integrità è i moduli di registrazione degli errori e i gestori (ELMAH), un sistema di registrazione degli errori open source gratuito creato da Atif Aziz. La differenza più importante tra i due sistemi è la possibilità di visualizzare un elenco di errori e i dettagli di un errore specifico da una pagina Web e come feed RSS. ELMAH è più facile da configurare rispetto al monitoraggio dell'integrità perché registra solo errori. Inoltre, ELMAH include il supporto per ASP.NET 1.x, ASP.NET 2.0 e ASP.NET 3.5 applicazioni e viene fornito con diversi provider di origine log.

Questa esercitazione illustra i passaggi coinvolti nell'aggiunta di ELMAH a un'applicazione ASP.NET. È possibile iniziare subito.

Nota

Il sistema di monitoraggio dell'integrità e ELMAH hanno entrambi i propri set di professionisti e cons. Ti consigliamo di provare entrambi i sistemi e decidere cosa si adatta meglio alle tue esigenze.

Aggiunta di ELMAH a un'applicazione Web ASP.NET

L'integrazione di ELMAH in un'applicazione di ASP.NET nuova o esistente è un processo semplice e semplice che richiede meno di cinque minuti. In breve, prevede quattro semplici passaggi:

  1. Scaricare ELMAH e aggiungere l'assembly all'applicazione Elmah.dll Web,
  2. Registrare i moduli HTTP e il gestore HTTP di ELMAH in Web.config,
  3. Specificare le opzioni di configurazione di ELMAH e
  4. Creare l'infrastruttura di origine del log degli errori, se necessario.

Esaminiamo ognuno di questi quattro passaggi, uno alla volta.

Passaggio 1: Download dei file di progetto ELMAH e aggiuntaElmah.dllall'applicazione Web

ELMAH 1.0 BETA 3 (Build 10617), la versione più recente al momento della scrittura, è inclusa nel download disponibile con questa esercitazione. In alternativa, è possibile visitare il sito Web ELMAH per ottenere la versione più recente o scaricare il codice sorgente. Estrarre il download ELMAH in una cartella sul desktop e individuare il file di assembly ELMAH (Elmah.dll).

Nota

Il Elmah.dll file si trova nella cartella del download, che include sottocartelle per versioni diverse di Bin .NET Framework e per le build release e Debug. Usare la build release per la versione del framework appropriata. Ad esempio, se si sta creando un'applicazione Web ASP.NET 3.5, copiare il Elmah.dll file dalla Bin\net-3.5\Release cartella.

Aprire Quindi Visual Studio e aggiungere l'assembly al progetto facendo clic con il pulsante destro del mouse sul nome del sito Web nel Esplora soluzioni e scegliendo Aggiungi riferimento dal menu di scelta rapida. Verrà visualizzata la finestra di dialogo Aggiungi riferimento. Passare alla scheda Sfoglia e scegliere il Elmah.dll file. Questa azione aggiunge il Elmah.dll file alla cartella dell'applicazione Bin Web.

Nota

Il tipo di progetto applicazione Web (WAP) non mostra la Bin cartella nella Esplora soluzioni. Elenca invece questi elementi nella cartella Riferimenti.

L'assembly Elmah.dll include le classi usate dal sistema ELMAH. Queste classi rientrano in una delle tre categorie:

  • Moduli HTTP : un modulo HTTP è una classe che definisce gestori eventi per HttpApplication eventi, ad esempio l'evento Error . ELMAH include più moduli HTTP, i tre più tedeschi che sono:

    • ErrorLogModule - registra eccezioni non gestite in un'origine log.
    • ErrorMailModule - invia i dettagli di un'eccezione non gestita in un messaggio di posta elettronica.
    • ErrorFilterModule - applica filtri specificati dallo sviluppatore per determinare quali eccezioni vengono registrate e quali eccezioni vengono ignorate.
  • Gestori HTTP : un gestore HTTP è una classe responsabile della generazione del markup per un determinato tipo di richiesta. ELMAH include gestori HTTP che eseguono il rendering dei dettagli degli errori come pagina Web, come feed RSS o come file delimitato da virgole (CSV).

  • Origini log degli errori: ELMAH può registrare errori in memoria, in un database di Microsoft SQL Server, in un database di Microsoft Access, in un database Oracle, in un file XML, in un database SQLite o in un database Vista DB. Analogamente al sistema di monitoraggio dell'integrità, l'architettura di ELMAH è stata creata usando il modello di provider, ovvero è possibile creare e integrare facilmente i propri provider di origine log personalizzati, se necessario.

Passaggio 2: Registrazione del modulo HTTP e del gestore HTTP di ELMAH

Mentre il file contiene i moduli HTTP e il Elmah.dll gestore necessari per registrare automaticamente eccezioni non gestite e visualizzare i dettagli degli errori da una pagina Web, questi devono essere registrati in modo esplicito nella configurazione dell'applicazione Web. Il ErrorLogModule modulo HTTP, una volta registrato, sottoscrive l'evento HttpApplication's Error . Ogni volta che questo evento viene generato i log dei ErrorLogModule dettagli dell'eccezione a un'origine log specificata. Verrà illustrato come definire il provider di origine log nella sezione successiva "Configurazione di ELMAH". La ErrorLogPageFactory factory del gestore HTTP è responsabile della generazione del markup durante la visualizzazione del log degli errori da una pagina Web.

La sintassi specifica per la registrazione di moduli HTTP e gestori dipende dal server Web che esegue l'alimentazione del sito. Per il server di sviluppo ASP.NET e iis versione 6.0 e versioni precedenti, i moduli HTTP e i gestori vengono registrati nelle sezioni e<httpHandlers>, che vengono visualizzati all'interno <httpModules> dell'elemento<system.web>. Se si usa IIS 7.0, è necessario registrare nelle sezioni e nell'elemento <system.webServer><modules>.<handlers> Fortunatamente, è possibile definire i moduli HTTP e i gestori in entrambe le posizioni indipendentemente dal server Web usato. Questa opzione è quella più portabile perché consente di usare la stessa configurazione negli ambienti di sviluppo e produzione indipendentemente dal server Web in uso.

Iniziare registrando il ErrorLogModule modulo HTTP e il ErrorLogPageFactory gestore HTTP nella <httpModules> sezione e <httpHandlers> in <system.web>. Se la configurazione definisce già questi due elementi, è sufficiente includere l'elemento per il modulo HTTP e il <add> gestore HTTP di 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>

Registrare quindi il modulo HTTP e il gestore HTTP di ELMAH nell'elemento <system.webServer> . Come in precedenza, se questo elemento non è già presente nella configurazione, aggiungerlo.

<?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>

Per impostazione predefinita, IIS 7 si lamenta se i moduli HTTP e i gestori vengono registrati nella <system.web> sezione . L'attributo nell'elemento validateIntegratedModeConfiguration<validation> indica a IIS 7 di eliminare tali messaggi di errore.

Si noti che la sintassi per la registrazione del ErrorLogPageFactory gestore HTTP include un path attributo, impostato su elmah.axd. Questo attributo informa l'applicazione Web che se una richiesta arriva per una pagina denominata elmah.axd , la richiesta deve essere elaborata dal ErrorLogPageFactory gestore HTTP. Verrà visualizzato il ErrorLogPageFactory gestore HTTP in azione più avanti in questa esercitazione.

Passaggio 3: Configurazione di ELMAH

ELMAH cerca le opzioni di configurazione nel file del Web.config sito Web in una sezione di configurazione personalizzata denominata <elmah>. Per usare una sezione personalizzata, Web.config è necessario prima essere definita nell'elemento <configSections> . Aprire il file e aggiungere il Web.config markup seguente all'oggetto <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>

Nota

Se si configura ELMAH per un'applicazione ASP.NET 1.x, rimuovere l'attributo requirePermission="false" dagli <section> elementi precedenti.

La sintassi precedente registra la sezione personalizzata <elmah> e le relative sottosezioni: <security>, <errorLog>, <errorMail>e <errorFilter>.

Aggiungere quindi la <elmah> sezione a Web.config. Questa sezione deve essere visualizzata allo stesso livello dell'elemento <system.web> . All'interno della <elmah> sezione aggiungere le <security> sezioni e <errorLog> come segue:

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  <security allowRemoteAccess="0" />
  
  <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ReviewsConnectionString" />
  </elmah>

  ...
</configuration>

L'attributo <security> della allowRemoteAccess sezione indica se è consentito l'accesso remoto. Se questo valore è impostato su 0, la pagina Web del log degli errori può essere visualizzata solo in locale. Se questo attributo è impostato su 1, la pagina Web del log degli errori è abilitata per i visitatori remoti e locali. Per il momento, si disabilita la pagina Web del log degli errori per i visitatori remoti. L'accesso remoto verrà consentito in un secondo momento dopo avere l'opportunità di discutere i problemi di sicurezza di tale operazione.

La <errorLog> sezione definisce l'origine del log degli errori, che determina la posizione in cui vengono registrati i dettagli degli errori. È simile alla <providers> sezione nel sistema di monitoraggio dell'integrità. La sintassi precedente specifica la SqlErrorLog classe come origine del log degli errori, che registra gli errori in un database di microsoft SQL Server specificato dal valore dell'attributoconnectionStringName.

Nota

ELMAH include provider di log degli errori aggiuntivi che possono essere usati per registrare errori in un file XML, in un database di Microsoft Access, in un database Oracle e in altri archivi dati. Per informazioni su come usare questi provider di log degli errori alternativi, vedere il file di esempio Web.config incluso nel download di ELMAH.

Passaggio 4: Creazione dell'infrastruttura di origine del log degli errori

Il provider di ELMAH registra i dettagli degli SqlErrorLog errori in un database microsoft SQL Server specificato. Il SqlErrorLog provider prevede che il database abbia una tabella denominata ELMAH_Error e tre stored procedure: ELMAH_GetErrorsXml, ELMAH_GetErrorXmle ELMAH_LogError. Il download di ELMAH include un file denominato SQLServer.sql nella db cartella che contiene il T-SQL per la creazione di questa tabella e di queste stored procedure. Per usare il provider, è necessario eseguire queste istruzioni nel SqlErrorLog database.

Le figure 1 e 2 mostrano Esplora database in Visual Studio dopo l'aggiunta degli oggetti di database necessari per il SqlErrorLog provider.

Screenshot che mostra la tabella degli errori ELMAH con gli errori del log dei log degli errori Q L.

Figura 1: Il SqlErrorLog provider registra gli errori nella ELMAH_Error tabella

Screenshot che illustra come il provider del log degli errori Q L usa tre stored procedure.

Figura 2: Il SqlErrorLog provider usa tre stored procedure

ELMAH in azione

A questo punto è stato aggiunto ELMAH all'applicazione Web, registrato il ErrorLogModule modulo HTTP e il ErrorLogPageFactory gestore HTTP, sono state specificate le opzioni di configurazione di ELMAH in Web.confige sono stati aggiunti gli oggetti di database necessari per il provider del SqlErrorLog log degli errori. Ora siamo pronti a vedere ELMAH in azione! Visitare il sito Web Recensioni libro e visitare una pagina che genera un errore di runtime, ad esempio Genre.aspx?ID=foo, o una pagina inesistente, ad esempio NoSuchPage.aspx. Ciò che viene visualizzato quando si visitano queste pagine dipende <customErrors> dalla configurazione e dal fatto che si visiti in locale o in remoto. Fare riferimento all'esercitazione Visualizzazione di una pagina di errore personalizzata per un aggiornamento in questo argomento.

ELMAH non influisce sul contenuto visualizzato all'utente quando si verifica un'eccezione non gestita; registra solo i dettagli. Questo log degli errori è accessibile dalla pagina elmah.axd Web dalla radice del sito Web, ad esempio http://localhost/BookReviews/elmah.axd. Questo file non esiste fisicamente nel progetto, ma quando viene inviata una richiesta per elmah.axd il runtime al ErrorLogPageFactory gestore HTTP, che genera il markup inviato al browser.

Nota

È anche possibile usare la elmah.axd pagina per indicare a ELMAH di generare un errore di test. Quando si visita elmah.axd/test (come in , http://localhost/BookReviews/elmah.axd/test) ELMAH genera un'eccezione di tipo Elmah.TestException, con il messaggio di errore: " Si tratta di un'eccezione di test che può essere ignorata in modo sicuro".

La figura 3 mostra il log degli errori quando si visita elmah.axd dall'ambiente di sviluppo.

Screenshot che visualizza il log degli errori da una pagina Web.

Figura 3: Elmah.axd Visualizza il log degli errori da una pagina Web
(Fare clic per visualizzare l'immagine a dimensione intera)

Il log degli errori nella figura 3 contiene sei voci di errore. Ogni voce include il codice di stato HTTP (404 o 500, per questi errori), il tipo, la descrizione, il nome dell'utente connesso quando si è verificato l'errore e la data e l'ora. Facendo clic sul collegamento Dettagli viene visualizzata una pagina che include lo stesso messaggio di errore visualizzato nella schermata gialla Dettagli errore di morte (vedere la figura 4) insieme ai valori delle variabili del server al momento dell'errore (vedere la figura 5). È anche possibile visualizzare il codice XML non elaborato in cui vengono salvati i dettagli dell'errore, che include informazioni aggiuntive, ad esempio i valori nell'intestazione HTTP POST.

Screenshot che mostra che è possibile visualizzare i dettagli dell'errore Y S O D.

Figura 4: Visualizzare i dettagli dell'errore YSOD
(Fare clic per visualizzare l'immagine a dimensione intera)

Screenshot che mostra come esplorare i valori della raccolta di variabili del server al momento dell'errore.

Figura 5: Esplorare i valori della raccolta variabili del server al momento dell'errore
(Fare clic per visualizzare l'immagine a dimensione intera)

La distribuzione di ELMAH nel sito Web di produzione comporta:

  • Copia del Elmah.dll file nella cartella nell'ambiente Bin di produzione,
  • Copia delle impostazioni di configurazione specifiche di ELMAH nel file usato nell'ambiente Web.config di produzione e
  • Aggiunta dell'infrastruttura di origine del log degli errori al database di produzione.

Sono state esaminate le tecniche per copiare i file dallo sviluppo alla produzione nelle esercitazioni precedenti. Forse il modo più semplice per ottenere l'infrastruttura di origine del log degli errori nel database di produzione consiste nell'usare SQL Server Management Studio per connettersi al database di produzione e quindi eseguire il SqlServer.sql file di script, che creerà la tabella e le stored procedure necessarie.

Visualizzazione della pagina Dettagli errore nell'ambiente di produzione

Dopo aver distribuito il sito in produzione, visitare il sito Web di produzione e generare un'eccezione non gestita. Come nell'ambiente di sviluppo, ELMAH non ha alcun effetto sulla pagina di errore visualizzata quando si verifica un'eccezione non gestita; invece registra semplicemente l'errore. Se si tenta di visitare la pagina del log degli errori (elmah.axd) dall'ambiente di produzione, verrà visualizzata la pagina Accesso negato illustrata nella figura 6.

Screenshot che mostra come, per impostazione predefinita, i visitatori remoti non possono visualizzare la pagina Web del log degli errori.

Figura 6: Per impostazione predefinita, i visitatori remoti non possono visualizzare la pagina Web del log degli errori
(Fare clic per visualizzare l'immagine a dimensione intera)

Tenere presente che nella sezione della configurazione ELMAH <security> l'attributo allowRemoteAccess è stato impostato su 0, che impedisce agli utenti remoti di visualizzare il log degli errori. È importante impedire ai visitatori anonimi di visualizzare il log degli errori, perché i dettagli dell'errore potrebbero rivelare vulnerabilità di sicurezza o altre informazioni riservate. Se si decide di impostare questo attributo su 1 e abilitare l'accesso remoto al log degli errori, è importante bloccare il elmah.axd percorso in modo che solo i visitatori autorizzati possano accedervi. A tale scopo, è possibile aggiungere un <location> elemento al Web.config file.

La configurazione seguente consente solo agli utenti nel ruolo Amministrazione di accedere alla pagina Web del log degli errori:

<?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>

Nota

Il ruolo Amministrazione e i tre utenti del sistema, Scott, Jisun e Alice, sono stati aggiunti nell'esercitazione Configurazione di un sito Web che usa i servizi applicazione. Gli utenti Scott e Jisun sono membri del ruolo Amministrazione. Per altre informazioni sull'autenticazione e l'autorizzazione, vedere le esercitazioni sulla sicurezza dei siti Web.

Il log degli errori nell'ambiente di produzione può ora essere visualizzato dagli utenti remoti; Fare riferimento alle figure 3, 4 e 5 per le schermate della pagina Web del log degli errori. Tuttavia, se un utente anonimo o non Amministrazione tenta di visualizzare la pagina del log degli errori, viene reindirizzato automaticamente alla pagina di accesso (Login.aspx), come illustrato nella figura 7.

Screenshot che mostra che gli utenti non autorizzati vengono reindirizzati automaticamente alla pagina di accesso.

Figura 7: Gli utenti non autorizzati vengono reindirizzati automaticamente alla pagina di accesso
(Fare clic per visualizzare l'immagine a dimensione intera)

Registrazione degli errori a livello di codice

Il modulo HTTP di ErrorLogModule ELMAH registra automaticamente le eccezioni non gestite nell'origine log specificata. In alternativa, è possibile registrare un errore senza dover generare un'eccezione non gestita usando la classe e il ErrorSignal relativo Raise metodo. Il Raise metodo viene passato a un Exception oggetto e lo registra come se tale eccezione fosse stata generata e avesse raggiunto il runtime ASP.NET senza essere gestito. La differenza, tuttavia, è che la richiesta continua a essere eseguita normalmente dopo che il Raise metodo è stato chiamato, mentre un'eccezione generata e non gestita interrompe l'esecuzione normale della richiesta e fa sì che il runtime ASP.NET visualizzi la pagina di errore configurata.

La ErrorSignal classe è utile nelle situazioni in cui è presente un'azione che potrebbe non riuscire, ma il relativo errore non è irreversibile per l'operazione complessiva eseguita. Ad esempio, un sito Web può contenere un modulo che accetta l'input dell'utente, lo archivia in un database e quindi invia all'utente un messaggio di posta elettronica che informa che le informazioni sono state elaborate. Cosa accade se le informazioni vengono salvate correttamente nel database, ma si verifica un errore durante l'invio del messaggio di posta elettronica? Un'opzione consiste nel generare un'eccezione e inviare l'utente alla pagina di errore. Tuttavia, ciò potrebbe confondere l'utente nel pensare che le informazioni immesse non sono state salvate. Un altro approccio consiste nel registrare l'errore correlato alla posta elettronica, ma non modificare in alcun modo l'esperienza dell'utente. Questa è la posizione in cui la ErrorSignal classe è utile.

' ... 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

Notifica degli errori tramite Email

Oltre alla registrazione degli errori in un database, ELMAH può anche essere configurato per inviare i dettagli degli errori tramite posta elettronica a un destinatario specificato. Questa funzionalità viene fornita dal ErrorMailModule modulo HTTP, pertanto è necessario registrare questo modulo Web.config HTTP per inviare i dettagli dell'errore tramite posta elettronica.

<?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>

Specificare quindi le informazioni sul messaggio di posta elettronica di errore nella <elmah> sezione dell'elemento <errorMail> , indicando il mittente e il destinatario del messaggio di posta elettronica, l'oggetto e se il messaggio di posta elettronica viene inviato in modo asincrono.

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  ...

  <errorMail from="support@example.com"
  to="support@example.com"
  subject="Book Reviews Runtime Error"
  async="true" />
  </elmah>

  ...
</configuration>

Con le impostazioni precedenti, ogni volta che si verifica un errore di runtime ELMAH invia un messaggio di posta elettronica a support@example.com con i dettagli dell'errore. Il messaggio di posta elettronica di errore di ELMAH include le stesse informazioni visualizzate nella pagina Web dei dettagli dell'errore, ovvero il messaggio di errore, l'analisi dello stack e le variabili del server (fare riferimento alle figure 4 e 5). Il messaggio di posta elettronica di errore include anche i dettagli dell'eccezione Schermo giallo della morte come allegato (YSOD.html).

La figura 8 mostra l'indirizzo di posta elettronica di errore di ELMAH generato visitando Genre.aspx?ID=foo. Mentre la figura 8 mostra solo il messaggio di errore e l'analisi dello stack, le variabili del server vengono incluse ulteriormente nel corpo del messaggio di posta elettronica.

Screenshot che mostra come configurare ELMAH per inviare i dettagli dell'errore tramite posta elettronica.

Figura 8: È possibile configurare ELMAH per inviare i dettagli degli errori tramite Email
(Fare clic per visualizzare l'immagine a dimensione intera)

Registrazione solo degli errori di interesse

Per impostazione predefinita, ELMAH registra i dettagli di ogni eccezione non gestita, inclusi 404 e altri errori HTTP. È possibile indicare a ELMAH di ignorare questi o altri tipi di errori usando il filtro degli errori. La logica di filtro viene eseguita dal modulo HTTP di ErrorFilterModule ELMAH, che sarà necessario registrare Web.config per usare la logica di filtro. Le regole per il filtro vengono specificate nella <errorFilter> sezione .

Il markup seguente indica a ELMAH di non registrare errori 404.

<?xml version="1.0"?>
<configuration>
  ...

  <elmah>
  ...

  <errorFilter>
  <test>
  <equal binding="HttpStatusCode" value="404" type="Int32" />
  </test>
  </errorFilter>
  </elmah>

  ...
</configuration>

Nota

Non dimenticare, per usare il filtro degli errori, è necessario registrare il ErrorFilterModule modulo HTTP.

L'elemento <equal> all'interno della <test> sezione viene definito asserzione. Se l'asserzione restituisce true, l'errore viene filtrato dal log di ELMAH. Sono disponibili altre asserzioni, tra cui: <greater><greater-or-equal>, <not-equal><lesser>, <lesser-or-equal>e così via. È anche possibile combinare asserzioni usando gli <and> operatori booleani e <or> . È anche possibile includere un'espressione JavaScript semplice come asserzione o scrivere asserzioni personalizzate in C# o Visual Basic.

Per altre informazioni sulle funzionalità di filtro degli errori di ELMAH, vedere la sezione Filtro errori nel wiki ELMAH.

Riepilogo

ELMAH offre un meccanismo semplice e potente per la registrazione degli errori in un'applicazione Web ASP.NET. Come il sistema di monitoraggio dell'integrità di Microsoft, ELMAH può registrare errori in un database e può inviare i dettagli dell'errore a uno sviluppatore tramite posta elettronica. A differenza del sistema di monitoraggio dell'integrità, ELMAH include il supporto out-of-box per un'ampia gamma di archivi dati del log degli errori, tra cui: Microsoft SQL Server, Microsoft Access, Oracle, file XML e diversi altri. Inoltre, ELMAH offre un meccanismo predefinito per la visualizzazione del log degli errori e i dettagli relativi a un errore specifico da una pagina Web, elmah.axd. La elmah.axd pagina può anche eseguire il rendering delle informazioni sugli errori come feed RSS o come file di valori delimitati da virgole (CSV), che è possibile leggere usando Microsoft Excel. È anche possibile indicare a ELMAH di filtrare gli errori dal log usando asserzioni dichiarative o a livello di codice. E ELMAH può essere usato con applicazioni ASP.NET versione 1.x.

Ogni applicazione distribuita deve avere un meccanismo per la registrazione automatica di eccezioni non gestite e l'invio di notifiche al team di sviluppo. Se questa operazione viene eseguita usando il monitoraggio dell'integrità o ELMAH è secondaria. In altre parole, non importa molto se si usa il monitoraggio dell'integrità o ELMAH; valutare entrambi i sistemi e quindi scegliere quello più adatto alle proprie esigenze. Ciò che è fondamentale è che alcuni meccanismi vengano inseriti per registrare eccezioni non gestite nell'ambiente di produzione.

Programmazione felice!

Altre informazioni

Per altre informazioni sugli argomenti illustrati in questa esercitazione, vedere le risorse seguenti: