Condividi tramite


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 open source gratuita che include funzionalità come il 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 il sistema di monitoraggio della salute di ASP.NET, che offre una libreria predefinita per la registrazione di un'ampia gamma di eventi Web. Molti sviluppatori usano il monitoraggio dell'integrità per registrare e inviare tramite posta elettronica i dettagli delle eccezioni non gestite. Tuttavia, ci sono alcuni punti di dolore con questo sistema. In primo luogo, è 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 la settimana scorsa, è necessario eseguire l'analisi tramite il database, analizzare la posta in arrivo o compilare una pagina Web che visualizza informazioni dalla aspnet_WebEvent_Events tabella.

Un altro punto di dolore è incentrato sulla complessità del monitoraggio della salute. Poiché il monitoraggio dell'integrità può essere usato per registrare una pletora di eventi diversi e poiché sono disponibili diverse opzioni per indicare come e quando vengono registrati gli eventi, la configurazione corretta del sistema di monitoraggio dell'integrità può essere un'attività complessa. Infine, sono presenti 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 con ASP.NET versione 1.x. Inoltre, la SqlWebEventProvider classe usata nell'esercitazione precedente per la registrazione 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 se è necessario registrare errori in un archivio dati alternativo, ad esempio un file XML o un database Oracle.

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

Questa esercitazione illustra i passaggi necessari per aggiungere ELMAH a un'applicazione ASP.NET. È ora di iniziare.

Annotazioni

Il sistema di monitoraggio della salute e ELMAH hanno entrambi i propri set di vantaggi e svantaggi. Vi invito a provare entrambi i sistemi e a decidere quale sia la soluzione più adatta alle vostre esigenze.

Aggiunta di ELMAH a un'applicazione Web ASP.NET

L'integrazione di ELMAH in un'applicazione 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 Elmah.dll all'applicazione Web,
  2. Registrare i moduli HTTP e il gestore 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).

Annotazioni

Il Elmah.dll file si trova nella cartella del Bin download, che include sottocartelle per versioni diverse di .NET Framework e per le build di rilascio e debug. Usare la build di rilascio per la versione del framework appropriata. Ad esempio, se si compila 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 in 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.

Annotazioni

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

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

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

    • ErrorLogModule : registra le eccezioni non gestite in un'origine log.
    • ErrorMailModule : invia i dettagli di un'eccezione non gestita in un messaggio di posta elettronica.
    • ErrorFilterModule - applica i 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 particolare 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 di registrazione degli errori - di default, 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. Come il sistema di monitoraggio della salute, l'architettura di ELMAH è stata creata usando il modello di provider, ovvero è possibile creare e integrare facilmente i propri provider di log source personalizzati, se necessario.

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

Mentre il Elmah.dll file contiene i moduli HTTP e il gestore necessari per registrare automaticamente le 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 di HttpApplicationError. Ogni volta che questo evento viene sollevato, il ErrorLogModule registra i dettagli dell'eccezione su un'origine di registro specificata. Nella sezione successiva verrà illustrato come definire il provider di origine log, "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 alimenta il sito. Per il server di sviluppo di ASP.NET e IIS versione 6.0 e precedenti, i moduli HTTP e i gestori vengono registrati nelle sezioni <httpModules> e <httpHandlers>, che si trovano all'interno dell'elemento <system.web>. Se stai utilizzando IIS 7.0, devono essere registrati nelle sezioni <modules> e <handlers> dell'elemento <system.webServer>. Fortunatamente, è possibile definire i moduli HTTP e i gestori in entrambe le posizioni indipendentemente dal server Web in uso. Questa opzione è quella più portabile perché consente di usare la stessa configurazione negli ambienti di sviluppo e produzione indipendentemente dal server Web in uso.

Comincia con la registrazione del ErrorLogModule modulo HTTP e del ErrorLogPageFactory gestore HTTP nelle sezioni <httpModules> e <httpHandlers> di <system.web>. Se la configurazione definisce già questi due elementi, è sufficiente includere l'elemento per il <add> modulo HTTP e il 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 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 segnala se i moduli HTTP e i gestori sono registrati nella <system.web> sezione . L'attributo validateIntegratedModeConfiguration nell'elemento <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 , che è impostato su elmah.axd. Questo attributo informa l'applicazione Web che, se arriva una richiesta per una pagina denominata elmah.axd , la richiesta deve essere elaborata dal ErrorLogPageFactory gestore HTTP. Vedremo in azione il gestore HTTP ErrorLogPageFactory 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 in Web.config, dev'essere prima definita nell'elemento <configSections>. Aprire il Web.config file e aggiungere il markup seguente a <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>

Annotazioni

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 dovrebbe 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 l'accesso remoto è consentito. 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, disabilitare la pagina Web del log degli errori per i visitatori remoti. L'accesso remoto verrà consentito in un secondo momento dopo avere avuto l'opportunità di discutere i problemi di sicurezza di questa operazione.

La sezione <errorLog> definisce la fonte del log degli errori, determinando dove vengono registrati i dettagli dell'errore; è simile alla sezione <providers> del sistema di monitoraggio della salute. 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'attributo connectionStringName .

Annotazioni

ELMAH viene fornito con provider di log degli errori aggiuntivi 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 ELMAH registra i dettagli degli SqlErrorLog errori in un database di 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 per il SqlErrorLog provider.

Screenshot che mostra la tabella degli errori ELMAH con il provider di log errori SQL.

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

Screenshot che illustra come il provider del log degli errori di SQL usa tre stored procedure.

Figura 2: Il SqlErrorLog provider usa tre procedure memorizzate

ELMAH in azione

A questo punto è stato aggiunto ELMAH all'applicazione Web, è stato 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. Siamo ora pronti a vedere ELMAH in azione! Visitare il sito web Recensioni di libri e visitare una pagina che genera un errore di runtime, come Genre.aspx?ID=foo, o una pagina inesistente, come NoSuchPage.aspx. Ciò che viene visualizzato quando si visitano queste pagine dipende <customErrors> dalla configurazione e dal fatto che si stia visitando localmente 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; si limita a registrarne 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 la inoltra al gestore HTTP ErrorLogPageFactory, che genera il markup inviato al browser.

Annotazioni

È 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/test) fa sì che ELMAH generi 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 mostra 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 di morte dei dettagli dell'errore (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 di 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 il file Elmah.dll nella cartella Bin in produzione.
  • Copiare le impostazioni di configurazione specifiche di ELMAH nel file Web.config usato in produzione e
  • Aggiunta dell'infrastruttura di origine del log degli errori al database di produzione.

Sono state esaminate le tecniche per copiare file dallo sviluppo alla produzione nelle esercitazioni precedenti. 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 dei dettagli dell'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 influisce 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 <security> configurazione ELMAH 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 di 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 Amministratore 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>

Annotazioni

Il ruolo di Admin e i tre utenti nel sistema - Scott, Jisun e Alice - sono stati aggiunti nell'esercitazione Configurazione di un sito Web che usa i servizi applicativi. Gli utenti Scott e Jisun sono membri del ruolo di amministratore. Per altre informazioni sull'autenticazione e l'autorizzazione, vedere le 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 amministratore 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)

Errori di registrazione 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 ErrorSignal e il metodo Raise. Il Raise metodo viene passato a 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 la chiamata del Raise metodo, mentre un'eccezione generata 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 in situazioni in cui è presente un'azione che può 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 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
    ' ... Send an email ...
Try
Catch e As Exception
' Error in sending email. Log it!
ErrorSignal.FromCurrentContext().Raise(e)
End Try

Notifica degli errori tramite posta elettronica

Oltre alla registrazione degli errori in un database, ELMAH può anche essere configurato in modo da inviare tramite posta elettronica i dettagli degli errori a un destinatario specificato. Questa funzionalità è fornita dal ErrorMailModule modulo HTTP; pertanto, è necessario registrare questo modulo HTTP in Web.config 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 informazioni sul messaggio di posta elettronica di errore nella <elmah> sezione dell'elemento <errorMail> , che indica 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 errore include anche il contenuto del "Yellow Screen of Death" con i dettagli dell'eccezione 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 più in basso 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 posta elettronica
(Fare clic per visualizzare l'immagine a dimensione intera)

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 devi registrare in Web.config per utilizzare 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>

Annotazioni

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 ulteriori informazioni sulle funzionalità di filtraggio degli errori di ELMAH, consultare la sezione Filtraggio degli errori nel wiki ELMAH.

Sommario

ELMAH offre un meccanismo semplice ma 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 della salute, ELMAH include il supporto predefinito per un'ampia gamma di archivi dati dei 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 pagina può anche visualizzare le informazioni sugli errori come feed RSS o come file 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 ASP.NET applicazioni 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 è di secondaria importanza. 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 è fondamentale è 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 illustrati in questa esercitazione, vedere le risorse seguenti: