Registrazione dei dettagli degli errori con ELMAH (C#)

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 viene fornito con altri provider di log degli errori che possono essere usati per registrare errori in un file XML, un database di Microsoft Access, un database Oracle e 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 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 ELMAH include un file denominato SQLServer.sql nella db cartella contenente T-SQL per la creazione di questa tabella e queste stored procedure. È necessario eseguire queste istruzioni nel database per usare il SqlErrorLog provider.

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

Screenshot che mostra gli errori del provider di log degli errori Q L scritti nella tabella.

Figura 1: I SqlErrorLog log del provider registrano errori nella ELMAH_Error tabella

Screenshot che mostra come il provider di log degli errori Q L di S 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, le opzioni di configurazione di ELMAH specificate in Web.confige sono stati aggiunti gli oggetti di database necessari per il provider di SqlErrorLog log degli errori. Siamo ora pronti a vedere ELMAH in azione! Visitare il sito Web Recensioni libro e visitare una pagina che genera un errore di runtime, ad esempio , o una pagina non esistente, ad esempio Genre.aspx?ID=fooNoSuchPage.aspx. Ciò che viene visualizzato quando si visitano queste pagine dipende dalla <customErrors> configurazione e dal fatto che si stia visitando 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 dall'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 una richiesta viene inviata al elmah.axd gestore ErrorLogPageFactory 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. La visita elmah.axd/test (come in ) http://localhost/BookReviews/elmah.axd/testcausa l'errore ELMAH per generare un'eccezione di tipo Elmah.TestException, che contiene 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 durante la visita elmah.axd dall'ambiente di sviluppo.

Screenshot che mostra come viene visualizzato 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 full-size)

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 di morte dei dettagli degli errori (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 visualizza i dettagli dell'errore YSOD.

Figura 4: Visualizzare i dettagli dell'errore YSOD
(Fare clic per visualizzare l'immagine full-size)

Screenshot che mostra i valori della raccolta di variabili del server.

Figura 5: Esplorare i valori dell'insieme Variabili server al momento dell'errore
(Fare clic per visualizzare l'immagine full-size)

La distribuzione di ELMAH nel sito Web di produzione comporta:

  • Copia del Elmah.dll file nella Bin cartella in 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; registra invece l'errore. Se si tenta di visitare la pagina del log degli errori (elmah.axd) dall'ambiente di produzione, verrà accolto con la pagina non consentita visualizzata nella figura 6.

Screenshot che mostra che 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 full-size)

Si ricordi che nella sezione configurazione <security> ELMAH è stato impostato l'attributo su 0, che impedisce agli utenti remoti di visualizzare il allowRemoteAccess log degli errori. È importante impedire ai visitatori anonimi di visualizzare il log degli errori, poiché i dettagli degli errori 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. Ciò può essere ottenuto aggiungendo un <location> elemento al Web.config file.

La configurazione seguente consente solo agli utenti del ruolo di 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 nel sistema , Scott, Jisun e Alice, sono stati aggiunti nell'esercitazione Configurazione di un sito Web che usa Servizi applicazioni. Gli utenti Scott e Jisun sono membri del ruolo Amministrazione. Per altre informazioni sull'autenticazione e sull'autorizzazione, vedere esercitazioni sulla sicurezza del sito 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 reindirizzata automaticamente alla pagina di accesso (Login.aspx), come illustrato nella figura 7.

Screenshot che mostra come 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 full-size)

Errori di registrazione a livello di codice

Il modulo HTTP di ErrorLogModule ELMAH registra automaticamente eccezioni non gestite all'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 un Exception oggetto e lo registra come se tale eccezione fosse stata generata e avesse raggiunto il runtime di ASP.NET senza essere gestito. La differenza, tuttavia, è che la richiesta continua a essere eseguita normalmente dopo Raise che il metodo è stato chiamato, mentre un'eccezione generata, non gestita interrompe l'esecuzione normale della richiesta e causa la visualizzazione della pagina di errore configurata ASP.NET runtime.

La ErrorSignal classe è utile in situazioni in cui è presente un'azione che potrebbe non riuscire, ma il suo 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 nel database correttamente, 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 degli errori. Tuttavia, questo 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 l'esperienza dell'utente in alcun modo. Questa è la posizione in cui la ErrorSignal classe è utile.

// ... 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);
}

Notifica degli errori tramite Email

Oltre alla registrazione degli errori in un database, ELMAH può anche essere configurato per inviare i dettagli degli errori di posta elettronica a un destinatario specificato. Questa funzionalità viene fornita dal ErrorMailModule modulo HTTP, pertanto è necessario registrare questo modulo HTTP per Web.config inviare i dettagli degli errori 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 informazioni sul messaggio di posta elettronica di errore nella <elmah> sezione dell'elemento <errorMail> , che indica il mittente e il destinatario dell'indirizzo 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 ai support@example.com dettagli dell'errore. Il messaggio di posta elettronica di errore di ELMAH include le stesse informazioni visualizzate nella pagina Web dei dettagli degli errori, ovvero il messaggio di errore, la traccia dello stack e le variabili del server (fare riferimento alle figure 4 e 5). Il messaggio di posta elettronica di errore include anche la schermata gialla dettagli eccezione del contenuto di morte (YSOD.html).

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

Screenshot che mostra che è possibile configurare ELMAH per inviare i dettagli degli errori tramite posta elettronica.

Figura 8: è possibile configurare ELMAH per inviare i dettagli degli errori tramite Email
(Fare clic per visualizzare l'immagine full-size)

Solo errori di registrazione 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 le asserzioni usando gli <and> operatori booleani e <or> . Inoltre, è anche possibile includere una semplice espressione JavaScript 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 negli articoli 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 gli 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 predefinito per un'ampia gamma di archivi dati del log degli errori, tra cui: Microsoft SQL Server, Microsoft Access, Oracle, file XML e molti altri. Inoltre, ELMAH offre un meccanismo predefinito per visualizzare il log degli errori e i dettagli su 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 con 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 programmatice. 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. Indipendentemente dal fatto che questa operazione venga eseguita usando il monitoraggio dell'integrità o ELMAH è secondaria. In altre parole, non importa molto se si usa il monitoraggio della salute o ELMAH; valutare entrambi i sistemi e quindi scegliere quello più adatto alle proprie esigenze. Ciò che è fondamentalmente importante è che alcuni meccanismi vengano messi in atto per registrare eccezioni non gestite nell'ambiente di produzione.

Buon programmatori!

Altre informazioni

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