Cómo registrar errores (Excepciones) en su ASP.NET ¿aplicaciones?


Estoy buscando la mejor manera de registrar errores en un ASP.NET solicitud. Quiero poder recibir correos electrónicos cuando se produzcan errores en mi solicitud, con información detallada sobre la Excepción y la Solicitud actual.

En mi empresa solíamos tener nuestro propio ErrorMailer, atrapando todo en el Mundo.asax Application_Error. Era " Ok " pero no muy flexible ni configurable.

Hemos cambiado recientemente a NLog. Es mucho más configurable, podemos definir diferentes objetivos para los errores, filtrarlos, almacenarlos en búfer (no probado todavía). Es una muy buena mejora.

Pero últimamente descubrí que hay un Espacio de nombres completo en.Net framework para este propósito : System.Web.Administración y se puede configurar en la sección healthMonitoring de web.config.

¿Ha trabajado alguna vez con. Net health monitoring? ¿Cuál es su solución para el registro de errores?

Author: Mark Amery, 2008-08-15

8 answers

Utilizo elmah. Tiene algunas características realmente agradables y aquí hay un artículo CodeProject sobre él. ¡Creo que el equipo de StackOverflow también usa elmah!

 29
Author: Dale Ragan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-15 04:34:49

He estado usando Log4net, configurado para enviar por correo electrónico detalles de errores fatales. También está configurado para registrar todo en un archivo de registro, lo cual es invaluable cuando se intenta depurar problemas. El otro beneficio es que si esa funcionalidad estándar no hace lo que quieres, es bastante fácil escribir un appender personalizado que pueda procesar la información de registro según sea necesario.

Dicho esto, estoy usando esto en conjunto con un manejador de errores personalizado que envía un correo electrónico html con un un poco más de información de la que se incluye en los correos electrónicos estándar de log4net: página, variables de sesión, cookies, variables del servidor http, etc.

Ambos están cableados en el evento Application_OnError, donde la excepción se registra como una excepción fatal en log4net (que luego hace que se envíe por correo electrónico a una dirección de correo electrónico especificada), y también se manejan usando el controlador de errores personalizado.

Escuchó por primera vez sobre Elmah desde la entrada del blog de Terror de codificación, Crash Responsablemente, y a pesar de que parece prometedor todavía estoy para implementar cualquier proyecto.

 9
Author: Mun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-15 06:31:07

He estado usando los objetos de registro de la Biblioteca Enterprise. Le permite tener diferentes tipos de registro (archivo plano, correo electrónico y/o base de datos). Es bastante personalizable y tiene una interfaz bastante buena para actualizar tu web.config para la configuración del registro. Por lo general, llamo a mi registro desde el error On en el Global.asax.

Aquí hay un enlace al MSDN

 2
Author: Brian Childress,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-15 06:11:57

Uso log4net y donde quiera que espere una excepción, la registro en el nivel apropiado. Tiendo a no volver a lanzar la excepción porque realmente no permite una experiencia de usuario tan agradable, hay menos información que puede proporcionar en el estado actual.

Tendré Application_Error también configurado para capturar cualquier excepción que no se esperaba y el error se registra como una prioridad Fatal a través de log4net (bueno, los 404 se detectan y se registran como Información ya que no son tan altos gravedad).

 2
Author: Aaron Powell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-23 09:56:20

Mi equipo usa log4net desde Apache. Es bastante ligero y fácil de configurar. Lo mejor de todo es que es completamente configurable desde la web.archivo de configuración, por lo que una vez que tenga los ganchos en la configuración de su código, puede cambiar completamente la forma en que se realiza el registro simplemente cambiando la web.archivo de configuración.

Log4net admite el registro en una amplia variedad de ubicaciones: base de datos, correo electrónico, archivo de texto, registro de eventos de Windows, etc. Mi equipo lo tiene configurado para enviar información de error detallada a un base de datos, y también enviar un correo electrónico a todo el equipo con información suficiente para que podamos determinar en qué parte del código se originó el error. Entonces sabemos quién es responsable de esa pieza de código, y pueden ir a la base de datos para obtener información más detallada.

 0
Author: Brandon Wood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-15 04:33:02

Recientemente construí un asp.net webservice con NLog, que uso para todas mis aplicaciones de escritorio. El registro funciona bien cuando estoy depurando en Visual Studio, pero tan pronto como me cambio a IIS el archivo de registro no se crea; todavía no he determinado por qué, pero el hecho de que necesito buscar una solución me hace querer probar algo más para mi asp.net ¡necesidades!

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-15 17:22:49

Utilizamos EnterpriseLibrary.ExceptionHandling.Tala. Me gusta un poco mejor que log4net porque no solo controlamos el registro completamente, sino que también podemos controlar la decisión Throw/NoThrow dentro de config.

 0
Author: matt-dot-net,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-09 16:52:46

Utilizamos un registro de cosecha propia personalizado hasta que escribimos. Requiere que implemente el registro por su cuenta en todas partes que lo necesite. Pero, también le permite capturar mucho más que solo la excepción.

Por ejemplo, nuestro código se vería así:

Try
  Dim p as New Person()
  p.Name = "Joe"
  p.Age = 30
Catch ex as Exception
  Log.LogException(ex,"Err creating person and assigning name/age")
  Throw ex
End Try

De esta manera nuestro logger escribirá toda la información que necesitamos en una base de datos SQL. Tenemos alertas de correo electrónico configuradas a nivel de base de datos para buscar ciertos errores o errores que ocurren con frecuencia. Nos ayuda a identificar exactamente dónde están los errores vienen de.

Esto podría no ser exactamente lo que estás buscando. Otro enfoque similar al uso Global.asax es para nosotros una técnica de inyección de código como AOP con PostSharp. Esto permite inyectar código personalizado al principio y al final de cada método o en cada excepción. Es un enfoque interesante, pero creo que puede tener una sobrecarga de rendimiento pesada.

 0
Author: brendan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-30 20:15:57