stackoverflow practices net4log ilog error configuracion best application c# asp.net asp.net-mvc logging log4net

c# - practices - log4net registra todos los errores de aplicación no controlada



log4net stackoverflow (5)

Es posible que le interese ver qué es la Programación Orientada a Aspectos (AOP).

Lo logramos con Post sharp (solo - no usamos log4net pero tracer personalizado).

Simplemente mira primero si log4net no tiene algo para este ''listo para usar''. No estoy seguro de eso.

¿Puede indicarme algún tutorial o ejemplos sobre cómo puedo registrar todas las excepciones no administradas que se están produciendo en mi aplicación web mvc utilizando log4net? Gracias


No hay soporte integrado para esto en log4net. Debería implementar el evento Application_Error en Global.asax y llamar allí a su registrador de log4net. El evento se activará para todos los eventos no administrados en su aplicación.


Para las aplicaciones ASP.NET, desea utilizar el evento System.Web.HttpApplication.Error que se coloca en el archivo Global.asax .

protected void Application_Error(Object sender, EventArgs e) { Exception ex = Server.GetLastError(); // Stop error from displaying on the client browser Context.ClearError(); logger.Fatal(ex.ToString); }

ver Administrar excepciones no controladas


Pego debajo del código que uso en mi global.asax que parece satisfacerme por ahora. Recibo todas las excepciones no controladas en mis archivos de registro generados por log4net.

public class MvcApplication : System.Web.HttpApplication { private static readonly ILog log = LogManager.GetLogger(typeof(MvcApplication)); void Application_Error(Object sender, EventArgs e) { Exception ex = Server.GetLastError().GetBaseException(); log.Error("App_Error", ex); } public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" } ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); log4net.Config.XmlConfigurator.Configure(); } }


Sin ser gracioso aquí tienes .

try { NotImplementedException nie = new NotImplementedException(); throw nie; } catch (Exception e) { Log.Fatal(e); }

Suponiendo que esté utilizando .net 3.5, podría usar métodos de extensión y extender System.Exception y agregar un método Log (log4net.ILog log), luego, donde encuentre una excepción en su aplicación, suponiendo que haya configurado correctamente la instancia de Log , entonces fácilmente lo haces. Su clase de extensión podría crecer un poco, con varias sobrecargas para depuración, información, advertir, error y fatal, etc.