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);
}
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.