asp.net error-handling nlog health-monitoring

¿Cómo registra errores(Excepciones) en sus aplicaciones ASP.NET?



error-handling nlog (8)

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 que es invaluable cuando se intentan solucionar problemas. El otro beneficio es que si esa funcionalidad estándar no hace lo que usted desea, es bastante fácil escribir un appender personalizado que pueda procesar la información de registro según sea necesario.

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

Ambos están conectados 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 específica) y también se maneja con el controlador de error personalizado.

Escuché por primera vez sobre Elmah de la entrada del blog Coding Horror, Crash Responsibly , y aunque parece prometedor, aún no lo he implementado en ningún proyecto.

Estoy buscando la mejor manera de registrar errores en una aplicación ASP.NET. Deseo poder recibir correos electrónicos cuando ocurran errores en mi aplicación, con información detallada sobre la excepción y la Solicitud actual.

En mi compañía solíamos tener nuestro propio ErrorMailer, capturando todo en Global.asax Application_Error. Estaba "bien" pero no muy flexible ni configurable.

Cambiamos recientemente a NLog. Es mucho más configurable, podemos definir diferentes objetivos para los errores, filtrarlos, almacenarlos en búfer (aún no probados). Es una muy buena mejora.

Pero descubrí últimamente que hay un Namespace completo en el marco .Net para este propósito: System.Web.Management y se puede configurar en la sección healthMonitoring de web.config.

¿Alguna vez ha trabajado con el monitoreo de salud .Net? ¿Cuál es su solución para el registro de errores?


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 su web.config para la configuración del registro. Por lo general, llamo a mi registro desde On Error en Global.asax.

Aquí hay un enlace a MSDN


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

log4net admite el inicio de sesión en una amplia variedad de ubicaciones: base de datos, correo electrónico, archivo de texto, registro de eventos de Windows, etc. Mi equipo lo configuró para enviar información de error detallada a una base de datos y también envía un correo electrónico a todo el equipo con suficiente información para nosotros para determinar en qué parte del código se originó el error. Entonces sabremos quién es responsable de ese fragmento de código, y pueden ir a la base de datos para obtener información más detallada.


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


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


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

Haré que Application_Error también esté configurado para capturar cualquier excepción que no se esperaba y el error se registre como una prioridad fatal a través de log4net (bueno, los 404 se detectan y registran como información ya que no son de alta gravedad).


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


Usamos una utilidad de registro de cosecha propia personalizada que escribimos. Requiere que implemente el registro por su cuenta donde sea que lo necesite. Pero, también le permite capturar mucho más que 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 forma, nuestro registrador escribirá toda la información que necesitamos sobre una base de datos SQL. Tenemos alertas de correo electrónico configuradas en el nivel de la base de datos para buscar ciertos errores o errores frecuentes. Nos ayuda a identificar exactamente de dónde provienen los errores.

Esto puede no ser exactamente lo que estás buscando. Otro enfoque similar al uso de Global.asax es para nosotros una técnica de inyección de código como AOP con PostSharp . Esto le 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 alto rendimiento.