2 pagine in totale: <<Indietro 1 [2]
Il "cuore" della classe ErrorLogger è il metodo AddException, che non fa altro che aggiungere nell'ambito del file XML di output un elemento Exception all'elemento radice ExceptionCollection. Il metodo riceve come parametro in ingresso un oggetto Exception, che rappresenta l'eccezione generata dall'applicazione. La chiamata del metodo Load di XmlDocument consente di caricare in memoria il documento XML corrispondente al file specificato in FullFileName. Una volta ottenuta la rappresentazione in memoria del documento XML, viene individuato l'elemento radice (nel nostro caso, ExceptionCollection) e aggiunto ad esso un elemento figlio Exception.
Dim parent As XmlElement = doc.CreateElement("Exception")
doc.DocumentElement.PrependChild(parent)
A questo punto non resta che aggiungere all'elemento Exception gli elementi figlio che rappresentano i dettagli relativi all'eccezione verificatasi e al contesto dell'applicazione. Vediamo, per esempio, la procedura per il messaggio di errore.
' L'elemento XML relativo al messaggio di errore.
Dim _message As XmlElement = doc.CreateElement("Message")
' Il testo del messaggio di errore.
Dim messageText As XmlText = doc.CreateTextNode(ex.Message)
' Aggiunta dei nodi.
parent.AppendChild(_message)
_message.AppendChild(messageText)
Per gli altri elementi si procede in maniera del tutto analoga. La classe si chiude con il salvataggio su disco del file XML.
Nota: la chiamata ricorsiva al termine della procedura consente di recuperare l'insieme di eccezioni che hanno generato l'errore corrente.
If Not (ex.InnerException Is Nothing) Then
Me.AddException(ex.InnerException)
End If
Utilizzo della classe nell'ambito dell'event handler di HttpApplication.Error
Possiamo utilizzare la classe ErrorLogger per la registrazione degli errori direttamente dentro all'event handler dell'evento Error contenuto nel Global.asax. La procedura è molto semplice. Prima di tutto occorre istanziare un oggetto di tipo ErrorLogger specificando il percorso del file di log. Bisogna quindi chiamare il metodo AddException passando l'oggetto Exception che viene ritornato da Server.GetLastError, che permette di accedere all'eccezione che ha scatenato l'evento nell'ambito dell'applicazione. Infine, per resettare l'errore, va lanciato il metodo Server.ClearError.
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Generato in caso di errore.
Dim el As New
ErrorLogger(Server.MapPath("/ApplicationLog/ErrorLog.xml"))
el.AddException(Server.GetLastError())
Server.ClearError()
End Sub
Visualizzazione del file di log
Abbiamo sviluppato il "motore" per la registrazione del log delle eccezioni non gestite, ma dobbiamo ancora creare un'interfaccia che consenta di visuallizzarle in una forma di facile consultazione, senza dover ricorrere necessariamente alla diretta apertura del file XML.
Una soluzione elegante (ma certamente non l'unica) consiste nell'utilizzare un controllo DataGrid, al quale applicare la formattazione che più ci aggrada e associare un DataSet riempito utilizzando il metodo ReadXML.
Dim ds As New DataSet
ds.ReadXml(Server.MapPath("/ApplicationLog/ErrorLog.xml"))
Me.dgExceptions.DataSource = ds.Tables(0).DefaultView
Me.dgExceptions.DataBind()
Il risultato è riportato in figura.

Conclusioni
La classe ErrorLogger fornisce una sorta di "monitoraggio" dell'applicazione, volto ad intercettare gli errori che essa genera e, soprattutto, a fornire un'analisi più o meno dettagliata delle condizioni nelle quali tali errori si sono verificati.
Sta comunque allo sviluppatore fruire delle informazioni generate dalla classe in oggetto per intraprendere un'accurata sessione di debugging, ricreando l'ambiente che ha dato luogo all'errore e avvalendosi di strumenti, quali il tracing, per effettuare le dovute correzioni.
2 pagine in totale: <<Indietro 1 [2]
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Difficoltà
Utilità
Stampa
Download



