Pregunta

Estoy usando Elmah con ASP.NET y me pregunto cómo agregaría datos personalizados, como una variable de sesión, a un correo electrónico de excepción no controlado.

He probado varios manejadores en el archivo global.asax, pero parece que no puedo encontrar el correcto.

¿Fue útil?

Solución

Para esto, creo que necesitarías modificar el Elmah fuente y recompilar. No debería ser demasiado difícil de lograr. Si tiene un vistazo en el constructor del Elmah.Error clase, la HttpContext se pasa, desde el cual debería poder obtener la información que necesita, por ejemplo, sesión, variables de formulario, etc. Puede agregar campos personalizados al Elmah.Error clase para estos datos

Pienso que el Elmah.ErrorMailHtmlFormatter La clase es donde se construye el correo electrónico utilizando un HtmlTextWriter, y aquí podría insertar código en el RenderSummary() método para incluir los campos personalizados a los que agregó Elmah.Error.

Sé que puede ser un dolor comenzar a trabajar con la fuente, pero personalmente creo que es la forma más limpia, ya que actualmente no hay una instalación para las plantillas de informe/correo electrónico, y es mejor que se ataques a algo para cambiar la salida después de que se ha generado.

Otros consejos

La respuesta de Andrew ayudó mucho, gracias. Terminé haciendo lo siguiente:

  1. Se agregó un evento de construcción al módulo HTTP ERRORMAIL. El evento Args para este evento tiene una propiedad NameValuecollection.
  2. Manejé el evento Onbuilding en Global.asax.
  3. Dado que httpmodules no siempre tiene acceso a SessionState, esp. Si se produce la excepción antes de cargar la sesión, copié los datos que quería informar en el caché HTTPApplication (indexado por SessionID).
  4. Cuando se produce una excepción, obtengo los datos que quiero salir del caché de la aplicación a través del SessionID almacenado en la solicitud (específicamente, en la cookie). Generación de un NameValuecollection a partir de estos datos y lo envío de nuevo al httpmodule a través de los args de Onbuilding.
  5. Los datos se renderizan para enviar un correo electrónico de manera similar a cómo se representa la sección Variables del servidor.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top