Registrar detalles de error con ELMAH (VB)

por Scott Mitchell

Los módulos y controladores de registro de errores (ELMAH) ofrecen otro enfoque para registrar errores en runtime en un entorno de producción. ELMAH es una biblioteca gratuita de registro de errores de código abierto que incluye características como el filtrado de errores y la capacidad de ver el registro de errores desde una página web, como una fuente RSS, o para descargarlo como un archivo delimitado por comas. En este tutorial se explica cómo descargar y configurar ELMAH.

Introducción

En el tutorial anterior se examinó el sistema de seguimiento de estado de ASP.NET, que ofrece una biblioteca lista para usar para grabar una amplia gama de eventos web. Muchos desarrolladores usan el seguimiento de estado para registrar y enviar por correo electrónico los detalles de excepciones no controladas. Sin embargo, este sistema presenta algunos inconvenientes. En primer lugar, la falta de cualquier tipo de interfaz de usuario para ver información sobre los eventos registrados. Si desea ver un resumen de los 10 últimos errores o ver los detalles de un error que se produjo la semana pasada, debe desplazarse por la base de datos, examinar a través de la bandeja de entrada de correo electrónico o crear una página web que muestre información de la tabla aspnet_WebEvent_Events.

Otro punto débil se centra en la complejidad del seguimiento de estado. Dado que el seguimiento de estado se puede usar para registrar una gran cantidad de eventos diferentes y, como hay una variedad de opciones para indicar cómo y cuándo se registran los eventos, configurar correctamente el sistema de seguimiento de estado puede ser una tarea ardua. Por último, hay problemas de compatibilidad. Dado que el seguimiento de estado se agregó por primera vez a .NET Framework en la versión 2.0, no está disponible para las aplicaciones web anteriores creadas con ASP.NET versión 1.x. Además, la clase SqlWebEventProvider, que usamos en el tutorial anterior para registrar los detalles del error en una base de datos, solo funciona con bases de datos de Microsoft SQL Server. Deberá crear una clase de proveedor de registro personalizada si necesita registrar errores en un almacén de datos alternativo, como un archivo XML o una base de datos de Oracle.

Una alternativa al sistema de seguimiento de estado es Módulos y controladores de registro de errores (ELMAH), un sistema de registro de errores de código abierto gratuito creado por Atif Aziz. La diferencia más notable entre los dos sistemas es la capacidad de ELAMH para mostrar una lista de errores y los detalles de un error específico de una página web y como fuente RSS. ELMAH es más fácil de configurar que el seguimiento de estado porque solo registra errores. Además, ELMAH incluye compatibilidad con aplicaciones ASP.NET 1.x, ASP.NET 2.0 y ASP.NET 3.5 y se incluye con una variedad de proveedores de origen de registro.

En este tutorial se describen los pasos necesarios para agregar ELMAH a una aplicación de ASP.NET. Comencemos.

Nota:

El sistema de seguimiento de estado y ELMAH tienen sus propios conjuntos de ventajas y desventajas. Le animamos a probar ambos sistemas y decidir cuál se adapta mejor a tus necesidades.

Adición de ELMAH a una aplicación web de ASP.NET

Integrar ELMAH en una aplicación de ASP.NET nueva o existente es un proceso sencillo que lleva menos de cinco minutos. En pocas palabras, implica cuatro sencillos pasos:

  1. Descargar ELMAH y agregar el ensamblado a la aplicación web Elmah.dll,
  2. Registrar módulos y controladores HTTP de ELMAH en Web.config,
  3. Especificar las opciones de configuración de ELMAH y
  4. Crear la infraestructura de origen del registro de errores, si es necesario.

Veremos cada uno de estos cuatro pasos, uno a uno.

Paso 1: descargar los archivos del proyecto ELMAH y agregar Elmah.dll a la aplicación web

ELMAH 1.0 BETA 3 (compilación 10617), la versión más reciente en el momento de escribir, se incluye en la descarga disponible con este tutorial. Como alternativa, puede visitar el sitio web de ELMAH para obtener la versión más reciente o descargar el código fuente. Extraiga la descarga de ELMAH en una carpeta del escritorio y busque el archivo de ensamblado ELMAH (Elmah.dll).

Nota:

El archivo Elmah.dll se encuentra en la carpeta Bin de la descarga, que tiene subcarpetas para diferentes versiones de .NET Framework y para las compilaciones de versión y depuración. Use la compilación Release para la versión de marco adecuada. Por ejemplo, si va a compilar una aplicación web de ASP.NET 3.5, copie el archivo Elmah.dll de la carpeta Bin\net-3.5\Release.

A continuación, abra Visual Studio y agregue el ensamblado al proyecto haciendo clic con el botón derecho en el nombre del sitio web en el Explorador de soluciones y seleccionando Agregar referencia en el menú contextual. Esto abre el cuadro de diálogo Agregar referencia. Vaya a la pestaña Examinar y elija el archivo Elmah.dll. Esta acción agrega el archivo Elmah.dll a la carpeta Bin de la aplicación web.

Nota:

El tipo Proyecto de aplicación web (WAP) no muestra la carpeta Bin en el Explorador de soluciones. En su lugar, enumera estos elementos en la carpeta Referencias.

El ensamblado Elmah.dll incluye las clases usadas por el sistema ELMAH. Estas clases se dividen en una de estas tres categorías:

  • Módulos HTTP : un módulo HTTP es una clase que define controladores de eventos para eventos HttpApplication, como el evento Error. ELMAH incluye varios módulos HTTP, los tres más importantes son:

    • ErrorLogModule: registra excepciones no controladas en un origen de registro.
    • ErrorMailModule: envía los detalles de una excepción no controlada en un mensaje de correo electrónico.
    • ErrorFilterModule: aplica filtros especificados por el desarrollador para determinar qué excepciones se registran y cuáles se omiten.
  • Controladores HTTP: un controlador HTTP es una clase responsable de generar el marcado para un tipo determinado de solicitud. ELMAH incluye controladores HTTP que representan detalles de error como página web, como fuente RSS o como un archivo delimitado por comas (CSV).

  • Orígenes de registro de errores: de forma predeterminada, ELMAH puede registrar errores en la memoria, en una base de datos de Microsoft SQL Server, en una base de datos de Microsoft Access, en una base de datos de Oracle, en un archivo XML, en una base de datos SQLite o en una base de datos Vista DB. Al igual que el sistema de seguimiento de estado, la arquitectura de ELMAH se creó mediante el modelo de proveedor, lo que significa que puede crear e integrar sin problemas sus propios proveedores de origen de registro personalizados, si es necesario.

Paso 2: registrar el módulo HTTP y el controlador de ELMAH

Aunque el archivo Elmah.dll contiene los módulos HTTP y el controlador necesarios para registrar automáticamente excepciones no controladas y para mostrar los detalles de error de una página web, estos deben registrarse explícitamente en la configuración de la aplicación web. El módulo HTTP ErrorLogModule, una vez registrado, se suscribe al evento Error de HttpApplication. Siempre que se genere este evento, el ErrorLogModule registra los detalles de la excepción en un origen de registro especificado. Veremos cómo definir el proveedor de origen de registro en la sección siguiente, "Configuración de ELMAH". El generador de controladores HTTP ErrorLogPageFactory es responsable de generar el marcado al ver el registro de errores desde una página web.

La sintaxis específica para registrar módulos y controladores HTTP depende del servidor web que está alimentando el sitio. Para el servidor de desarrollo de ASP.NET y la versión 6.0 y anteriores de IIS de Microsoft, los módulos y controladores HTTP se registran en las secciones <httpModules> y <httpHandlers>, que aparecen en el elemento <system.web>. Si usa IIS 7.0, deben registrarse en las secciones <modules> y <handlers> del elemento <system.webServer>. Afortunadamente, puede definir los módulos y controladores HTTP en ambos lugares independientemente del servidor web que se use. Esta opción es la más portable, ya que permite usar la misma configuración en los entornos de desarrollo y producción, independientemente del servidor web que se use.

Empiece por registrar el módulo HTTP ErrorLogModule y el controlador HTTP ErrorLogPageFactory en la sección <httpModules> y <httpHandlers> de <system.web>. Si la configuración ya define estos dos elementos, simplemente incluya el elemento <add> para el módulo HTTP y el controlador de 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>

A continuación, registre el módulo HTTP y el controlador de ELMAH en el elemento <system.webServer>. Como antes, si este elemento aún no está presente en la configuración, agréguelo.

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

De forma predeterminada, IIS 7 se queja si los módulos y controladores HTTP están registrados en la sección <system.web>. El atributo validateIntegratedModeConfiguration del elemento <validation> indica a IIS 7 que suprima dichos mensajes de error.

Tenga en cuenta que la sintaxis para registrar el controlador HTTP ErrorLogPageFactory incluye un atributo path, que se establece en elmah.axd. Este atributo informa a la aplicación web de que si llega una solicitud para una página denominada elmah.axd, el controlador HTTP ErrorLogPageFactory debe procesar la solicitud. Veremos el controlador HTTP ErrorLogPageFactory en acción más adelante en este tutorial.

Paso 3: configuración de ELMAH

ELMAH busca sus opciones de configuración en el archivo Web.config del sitio web en una sección de configuración personalizada denominada <elmah>. Para usar una sección personalizada en Web.config primero debe definirse en el elemento <configSections>. Abra el archivo Web.config y agregue el siguiente marcado al <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:

Si va a configurar ELMAH para una aplicación de ASP.NET 1.x, quite el atributo requirePermission="false" de los elementos <section> anteriores.

La sintaxis anterior registra la sección <elmah> personalizada y sus subsecciones: <security>, <errorLog>, <errorMail> y <errorFilter>.

A continuación, agregue la sección <elmah> a Web.config. Esta sección debe aparecer en el mismo nivel que el elemento <system.web>. Dentro de la sección <elmah>, agregue las secciones <security> y <errorLog> de este modo:

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

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

  ...
</configuration>

El atributo allowRemoteAccess de la sección <security> indica si se permite el acceso remoto. Si este valor se establece en 0, la página web del registro de errores solo se puede ver localmente. Si este atributo se establece en 1, la página web del registro de errores está habilitada para visitantes locales y remotos. Por ahora, vamos a deshabilitar la página web del registro de errores para los visitantes remotos. Vamos a permitir el acceso remoto más adelante después de tener la oportunidad de discutir los problemas de seguridad de hacerlo.

La sección <errorLog> define el origen del registro de errores, que determina dónde se registran los detalles del error; es similar a la sección <providers> del sistema de supervisión de estado. La sintaxis anterior especifica la clase SqlErrorLog como origen del registro de errores, que registra los errores en una base de datos de Microsoft SQL Server especificada por el valor del atributo connectionStringName.

Nota:

ELMAH se incluye con proveedores de registro de errores adicionales que se pueden usar para registrar errores en un archivo XML, una base de datos de Microsoft Access, una base de datos de Oracle y otros almacenes de datos. Consulte el archivo de ejemplo Web.config que se incluye con la descarga de ELMAH para obtener información sobre cómo usar estos proveedores de registro de errores alternativos.

Paso 4: crear la infraestructura de origen del registro de errores

El proveedor SqlErrorLog de ELMAH registra los detalles del error en una base de datos de Microsoft SQL Server especificada. El proveedor SqlErrorLog espera que esta base de datos tenga una tabla denominada ELMAH_Error y tres procedimientos almacenados: ELMAH_GetErrorsXml, ELMAH_GetErrorXml y ELMAH_LogError. La descarga de ELMAH incluye un archivo denominado SQLServer.sql en la carpeta db que contiene T-SQL para crear esta tabla y estos procedimientos almacenados. Deberá ejecutar estas instrucciones en la base de datos para usar el proveedor SqlErrorLog.

Las ilustraciones 1 y 2 muestran el Explorador de bases de datos en Visual Studio después de agregar los objetos de base de datos necesarios para el proveedor SqlErrorLog.

Screenshot that shows the ELMAH error table with the S Q L error log provider log errors.

Ilustración 1: el proveedor SqlErrorLog registra errores en la tabla ELMAH_Error

Screenshot that demonstrates how the S Q L error log provider uses three stored procedures.

Ilustración 2: El proveedor SqlErrorLog usa tres procedimientos almacenados

ELMAH en acción

En este momento hemos agregado ELMAH a la aplicación web, hemos registrado el módulo HTTP ErrorLogModule y el controlador HTTP ErrorLogPageFactory, las opciones de configuración de ELMAH especificadas en Web.config y hemos agregado los objetos de base de datos necesarios para el proveedor de registro de errores SqlErrorLog. Ahora estamos listos para ver a ELMAH en acción. Visite el sitio web opiniones de libros y visite una página que genere un error en tiempo de ejecución, como Genre.aspx?ID=foo, o una página inexistente, como NoSuchPage.aspx. Lo que ve al visitar estas páginas depende de la configuración <customErrors> y de si está visitando local o remotamente. (Consulte la el tutorial Mostrar una página de error personalizada para obtener un actualizador en este tema).

ELMAH no afecta al contenido que se muestra al usuario cuando se produce una excepción no controlada; simplemente registra sus detalles. Este registro de errores es accesible desde la página web elmah.axd desde la raíz de su sitio web, como http://localhost/BookReviews/elmah.axd. (Este archivo no existe físicamente en el proyecto, pero cuando se produce una solicitud para elmah.axd el tiempo de ejecución lo envía al controlador HTTP ErrorLogPageFactory, que genera el marcado enviado de nuevo al explorador).

Nota:

También puede usar la página elmah.axd para indicar a ELMAH que genere un error de prueba. Visitar elmah.axd/test (como en, http://localhost/BookReviews/elmah.axd/test) hace que ELMAH inicie una excepción de tipo Elmah.TestException, que tiene el mensaje de error: "Se trata de una excepción de prueba que se puede omitir de forma segura".

En la ilustración 3 se muestra el registro de errores al visitar elmah.axd desde el entorno de desarrollo.

Screenshot that displays the error log from a web page.

Ilustración 3: Elmah.axd muestra el registro de errores de una página web
(Haga clic para ver la imagen a tamaño completo.)

El registro de errores de la ilustración 3 contiene seis entradas de error. Cada entrada incluye el código de estado HTTP (404 o 500, para estos errores), el tipo, la descripción, el nombre del usuario que inició sesión cuando se produjo el error y la fecha y hora. Al hacer clic en el vínculo Detalles se muestra una página que incluye el mismo mensaje de error que se muestra en la pantalla amarilla Detalles del error de muerte (véase la ilustración 4) junto con los valores de las variables de servidor en el momento del error (véase la ilustración 5). También puede ver el XML sin formato en el que se guardan los detalles del error, que incluye información adicional, como los valores del encabezado HTTP POST.

Screenshot that shows that you can view the error details Y S O D.

Ilustración 4: ver los detalles del error YSOD
(Haga clic para ver la imagen a tamaño completo.)

Screenshot that shows how to explore the values of the server variables collection at the time of the error.

Ilustración 5: exploración de los valores de la colección de variables de servidor en el momento del error
(Haga clic para ver la imagen a tamaño completo.)

La implementación de ELMAH en el sitio web de producción implica:

  • Copiar el archivo Elmah.dll en la carpeta Bin en producción,
  • Copiar los valores de configuración específicos de ELMAH en el archivo de Web.config usado en producción y
  • Agregar la infraestructura de origen del registro de errores a la base de datos de producción.

Hemos explorado técnicas para copiar archivos de desarrollo a producción en tutoriales anteriores. Quizás la manera más fácil de obtener la infraestructura de origen del registro de errores en la base de datos de producción es usar SQL Server Management Studio para conectarse a la base de datos de producción y, a continuación, ejecutar el archivo de script SqlServer.sql, que creará la tabla necesaria y los procedimientos almacenados.

Visualización de la página Detalles del error en producción

Después de implementar el sitio en producción, visite el sitio web de producción y genere una excepción no controlada. Como en el entorno de desarrollo, ELMAH no tiene ningún efecto en la página de error que se muestra cuando se produce una excepción no controlada; en su lugar, simplemente registra el error. Si intenta visitar la página del registro de errores (elmah.axd) desde el entorno de producción, se le saludará con la página Prohibido que se muestra en la ilustración 6.

Screenshot that shows how, by default, remote visitors can't view the error log web page.

Ilustración 6: de forma predeterminada, los visitantes remotos no pueden ver la página web registro de errores
(Haga clic para ver la imagen a tamaño completo.)

Recuerde que, en la sección <security> de la configuración de ELMAH, establecemos el atributo allowRemoteAccess en 0, lo que prohíbe a los usuarios remotos ver el registro de errores. Es importante prohibir que los visitantes anónimos vean el registro de errores, ya que los detalles del error pueden revelar vulnerabilidades de seguridad u otra información confidencial. Si decide establecer este atributo en 1 y habilitar el acceso remoto al registro de errores, es importante bloquear la ruta de acceso elmah.axd para que solo los visitantes autorizados puedan acceder a él. Esto se puede lograr agregando un elemento <location> al archivo Web.config.

La siguiente configuración permite que solo los usuarios del rol de administrador accedan a la página web del registro de errores:

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

El rol Administrador y los tres usuarios del sistema ( Scott, Jisun y Alice) se agregaron en el tutorial Configuración de un sitio web que usa servicios de aplicaciones. Los usuarios Scott y Jisun son miembros del rol Administrador. Para obtener más información sobre la autenticación y autorización, consulte mis tutoriales de seguridad del sitio web.

Los usuarios remotos pueden ver el registro de errores en el entorno de producción; consulte las ilustraciones 3, 4 y 5 para las capturas de pantalla de la página web del registro de errores. Sin embargo, si un usuario anónimo o no administrador intenta ver la página del registro de errores, se le redirigirá automáticamente a la página de inicio de sesión (Login.aspx), como se muestra en la ilustración 7.

Screenshot that shows that unauthorized users are automatically redirected to the login page.

Ilustración 7: los usuarios no autorizados se redirigen automáticamente a la página de inicio de sesión
(Haga clic para ver la imagen a tamaño completo.)

Registro de errores mediante programación

El módulo HTTP de ELMAH ErrorLogModule registra automáticamente excepciones no controladas en el origen de registro especificado. Como alternativa, puede registrar un error sin tener que generar una excepción no controlada mediante la clase ErrorSignal y su método Raise. El método Raise se pasa un objeto Exception y lo registra como si se hubiera producido esa excepción y se hubiera alcanzado el tiempo de ejecución de ASP.NET sin controlarse. La diferencia, sin embargo, es que la solicitud continúa ejecutándose normalmente después de llamar al método Raise, mientras que una excepción iniciada y no controlada interrumpe la ejecución normal de la solicitud y hace que el runtime de ASP.NET muestre la página de error configurada.

La clase ErrorSignal es útil en situaciones en las que hay alguna acción que puede producir un error, pero su error no es catastrófico para la operación general que se está realizando. Por ejemplo, un sitio web puede contener un formulario que toma la entrada del usuario, lo almacena en una base de datos y, a continuación, envía al usuario un correo electrónico que les informa de que se procesó la información. ¿Qué debe ocurrir si la información se guarda correctamente en la base de datos, pero se produce un error al enviar el mensaje de correo electrónico? Una opción sería iniciar una excepción y enviar al usuario a la página de error. Sin embargo, esto podría confundir al usuario pensando en que la información que escribió no se guardó. Otro enfoque sería registrar el error relacionado con el correo electrónico, pero no modificar la experiencia del usuario de ninguna manera. Aquí es donde la clase ErrorSignal es útil.

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

Notificación de error por correo electrónico

Junto con el registro de errores en una base de datos, ELMAH también se puede configurar para enviar por correo electrónico los detalles del error a un destinatario especificado. Esta funcionalidad la proporciona el módulo HTTP ErrorMailModule; por lo tanto, debe registrar este módulo HTTP en Web.config para enviar detalles de error por correo electrónico.

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

A continuación, especifique información sobre el correo electrónico de error en la sección <elmah> del elemento <errorMail>, que indica el remitente y el destinatario del correo electrónico, el asunto y si el correo electrónico se envía de forma asincrónica.

<?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 la configuración anterior en vigor, siempre que se produzca un error en tiempo de ejecución, ELMAH envía un correo electrónico a support@example.com con los detalles del error. El correo electrónico de error de ELMAH incluye la misma información que se muestra en la página web de detalles del error, es decir, el mensaje de error, el seguimiento de la pila y las variables de servidor (véase las ilustraciones 4 y 5). El correo electrónico de error también incluye el contenido de Exception Details Yellow Screen of Death como datos adjuntos (YSOD.html).

La ilustración 8 muestra el correo electrónico de error de ELMAH generado visitando Genre.aspx?ID=foo. Aunque la ilustración 8 muestra solo el mensaje de error y el seguimiento de la pila, las variables de servidor se incluyen más abajo en el cuerpo del correo electrónico.

Screenshot that shows how to configure ELMAH to send error details through email.

Ilustración 8: puede configurar ELMAH para enviar detalles de error por correo electrónico
(Haga clic para ver la imagen a tamaño completo.)

Solo registro de errores de interés

De forma predeterminada, ELMAH registra los detalles de cada excepción no controlada, incluidos los 404 y otros errores HTTP. Puede indicar a ELMAH que omita estos u otros tipos de errores mediante el filtrado de errores. La lógica de filtrado se realiza mediante el módulo HTTP ErrorFilterModule de ELMAH, que deberá registrar en Web.config para poder usar la lógica de filtrado. Las reglas para el filtrado se especifican en la sección <errorFilter>.

El marcado siguiente indica a ELMAH que no registre errores 404.

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

  <elmah>
  ...

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

  ...
</configuration>

Nota:

No olvide, para poder usar el filtrado de errores, debe registrar el módulo HTTP ErrorFilterModule.

El elemento <equal> dentro de la sección <test> se conoce como aserción. Si la aserción se evalúa como true, el error se filtra del registro de ELMAH. Hay otras aserciones disponibles, incluidas: <greater>, <greater-or-equal>, <not-equal>, <lesser>, <lesser-or-equal>, etc. También puede combinar aserciones mediante los operadores booleanos <and> y <or>. Además, puede incluir una expresión de JavaScript simple como aserción o escribir sus propias aserciones en C# o Visual Basic.

Para obtener más información sobre las funcionalidades de filtrado de errores de ELMAH, consulte la sección Filtrado de errores en la wiki de ELMAH.

Resumen

ELMAH proporciona un mecanismo sencillo y eficaz para registrar errores en una aplicación web ASP.NET. Al igual que el sistema de seguimiento de estado de Microsoft, ELMAH puede registrar errores en una base de datos y puede enviar los detalles del error a un desarrollador por correo electrónico. A diferencia del sistema de seguimiento de estado, ELMAH incluye compatibilidad lista para usar para una amplia gama de almacenes de datos de registro de errores, entre los que se incluyen: Microsoft SQL Server, Microsoft Access, Oracle, archivos XML y otros. Además, ELMAH ofrece un mecanismo integrado para ver el registro de errores y detalles sobre un error específico de una página web, elmah.axd. La página elmah.axd también puede representar información de error como una fuente RSS o como un archivo de valores separados por comas (CSV), que puede leer mediante Microsoft Excel. También puede indicar a ELMAH que filtre los errores del registro mediante aserciones declarativas o mediante programación. Y ELMAH se puede usar con aplicaciones ASP.NET versión 1.x.

Cada aplicación implementada debe tener algún mecanismo para registrar automáticamente excepciones no controladas y enviar notificaciones al equipo de desarrollo. Que esto se consiga utilizando el seguimiento de estado o ELMAH es secundario. En otras palabras, no importa mucho si se usa el seguimiento de estado o ELMAH; evalúe ambos sistemas y, a continuación, elija el que mejor se adapte a sus necesidades. Lo que es importante es que se ponga en marcha algún mecanismo para registrar excepciones no controladas en el entorno de producción.

¡Feliz programación!

Lecturas adicionales

Para obtener más información sobre los temas tratados en este tutorial, consulte los siguientes recursos: