ELMAH: Módulo de Error Logging para ASP.NET

Hola que tal, hace poco leyendo un post  de Scott Hanselman, y me llamó la atención ELMAH

ELMAH: Error Logging Modules and Handlers for ASP.NET (and MVC too!)

¿Qué es ELMAH?
Es un plugin para el registro persistente de errores , se puede agregar a una aplicación ASP.NET en ejecución o a todas las aplicaciones Web ASP.NET en un equipo, sin necesidad de recompilar.

Una vez que ELMAH esté instalado y configurado adecuadamente permite:

  • Registro de las excepciones no controladas
  • Una página web para ver el registro de todas las excepciones  de manera remota
  • Una página web para ver el detalle de cada excepción registrada
  • En muchos casos , vas a poder revisar la pantalla original de la excepción,incluso si  customErrors mode esta en off
  • Posibilidad de enviar notificaciones de cada excepción por email en el momento que ocurren
  • Contar con un fuente RSS con los últimos 15 errores del log.

Más características Cool

Posibilidad de registrar el log generado en:

Revisa el website oficial para revisar todas las excelentes características que nos brinda
http://code.google.com/p/elmah/

Manos a la Obra
Una vez descargado ELMAH, hice referencia a los ensamblados, en el caso del ejemplo , hice ref. a todos (para hacer el pruebas).

image

Ahora a modificar el WebConfig, es bastante sencillo, viene todo explicado en la aplicación de ejemplo que viene junto a los ensamblados.
En el siguiente website puedes ver la documentación sobre estas opciones y cuando implementarlas, yo quiero dar una ayuda rápida de instalación simplemente.

http://code.google.com/p/elmah/wiki/DotNetSlackersArticle

Paso 1 Agregar:
<configSections>    
 
<sectionGroup name=“elmah”>    
      
<section name=“security” requirePermission=“false”
     t
ype=“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>

 

Paso 2 Agregar:

<httpHandlers>  
 
<add verb=“POST,GET,HEAD” path=“elmah.axd” type=“Elmah.ErrorLogPageFactory, Elmah” />  
</httpHandlers>

Paso 3 Agregar

<system.web>  
 
<httpModules>  
  
<add name=“ErrorLog” type=“Elmah.ErrorLogModule, Elmah” />  
 
</httpModules>  
</system.web> 

Ahora bien para almacenar la info de log en los distintos tipos de almacenamiento vamos a agregar en el WebConfig:

En un archivo XML

<elmah>  
   
<errorLog type=“Elmah.XmlFileErrorLog, Elmah” logPath=“~/App_Data” />  
</elmah> 

 

image

En Memoria
Muy rápido, pero limitado, obviamente no persiste.

<elmah>  
 
<errorLog type=“Elmah.MemoryErrorLog, Elmah” size=“50” />  
</elmah>

 

En SQL Lite
Si no sabes lo que es Sql Lite, te cuento que es un pequeño motor de base de datos, muy muy liviano y eficiente para tareas sencillas.
<connectionStrings>  
 
<add name=“Elmah.SQLite” connectionString=“data
    source=~/App_Data/Elmah.SQLite.db”
/>  
</connectionStrings>  
<elmah>  
 
<errorLog type=“Elmah.SQLiteErrorLog, Elmah” connectionStringName=“Elmah.SQLite” />  
</elmah> 

Te recomiendo el livianisimo SQL Lite Administrator para administrar tu BD de SQL Lite. Es muy simple, portable y light. En la imagen siguiente vemos la vista de la BD que guarda el log, tu no tienes que hacer absolutamente nada, me refiero a que no tienes para que crear la base, ELMAH lo hace por tí.

 

image

 

En SQL Server
La aplicación de ejemplo se adjunta con un Script SQL para que generes la estructura necesaria para dar soporte a ELMAH. Esta es la mejor opción para entornos corporativos.

<connectionStrings>  
 
<add name=“Elmah.Sql”  
    
connectionString=“Data Source=.;Initial  Catalog=ELMAH;Trusted_Connection=True” />  
</connectionStrings>  

 <elmah>  
  
<errorLog type=“Elmah.SqlErrorLog, Elmah” connectionStringName=“Elmah.Sql” />  
</elmah> 

 

¿Y si no quiero todos las excepciones registradas?

Puedes filtrar programática o declarativamente. Teniendo en cuenta la estructura de la clase y su funcionamiento,
image

La propiedad Dismissed indica si la excepción ha sido desestimada o no, mientras que la propiedad de Excepción contiene la excepción no manejada.

El método Dismmiss marca la excepción que no vamos a “estimar”, impidiendo que ser bien enviado por correo o registrado en el log.

Ejemplo:
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)    
{    
   
if(e.Exception.GetBaseException() is FileNotFoundException)  
        e
.Dismiss();  
} 

 

Lo anterior, elimina (descarta) la notificación para la excepción FileNotFoundException.

Hay muchas otras opciones que te invito a revisar en:

http://code.google.com/p/elmah/wiki/DotNetSlackersArticle

Y ahora F5 en mi Aplicación!!!
Para botar la aplicación tengo una división por Cero en el botón.

image

y al presionarlo:

image

 

y ahora al visitar:

http://localhost:53257/pruebaLog/elmah.axd

tenemos a ELMAH en acción: (espero que se alcance a notar, quize pegar toda grilla para que se vean los campos.

image
Nos da una lista de las excepciones, con información relevante y además podemos ver el detalle de cada una.

Si ves el menú superior vamos a ver:
image

Podemos suscribir RSS :), entonces, por que no suscribirnos a la fuente RSS desde el gadget de Windows 7

 image

Y ahora tenemos nuestro “sistema de monitoreo” de nuestra aplicación corriendo en el escritorio de Windows.

image

Espero que te sirva, a mi me gustó mucho 🙂

Saludos,

Gonzalo

Get Microsoft Silverlight

12 comentarios en “ELMAH: Módulo de Error Logging para ASP.NET”

  1. buenisimo pero esto en que parte del web.config lo ponemos?



    con poner eso ya estaria es asi automatico despues apunto al elmah.axd y ahi me muestra todos los errores?

  2. Pablo: yo lo puse despues del connectionstrings, cuando bajas el todo hay un ejemplo de web.config en la carpeta samples

    Eso dicho excelente el módulo, puse al aire un nuevo sitio recien y me ayudo bastante en ver lo que pasaba.

  3. Esto funciona tambien para webservices?. lo pregunto por lo siguiente:

    hice todo lo que sale aqui en esta guia en una aplicacion web y funciona muy bien.

    pero cuando hago lo mismo con webservices no me registra en el log el error sucedido en el webmetodo del webservice

  4. Hola Gonzalo. el error que me da es este “Formato de solicitud no reconocido para la dirección URL, finaliza de manera inesperada”. el jemplo es un web metodo que tiene una x= x/y donde y =0, ahora bien si le coloco y=cualquiernumero, como no hay error todo anda bien.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *