Actualmente estoy usando log4net en mi aplicación ASP.NET MVC para registrar excepciones. La forma en que lo estoy haciendo es que todos mis controladores hereden de una clase BaseController. En caso OnActionExecuting del BaseController, entro las excepciones que puedan haber ocurrido:Errores de registro en ASP.NET MVC
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Log any exceptions
ILog log = LogManager.GetLogger(filterContext.Controller.GetType());
if (filterContext.Exception != null)
{
log.Error("Unhandled exception: " + filterContext.Exception.Message +
". Stack trace: " + filterContext.Exception.StackTrace,
filterContext.Exception);
}
}
Esto funciona muy bien si una excepción no controlada durante una acción del controlador.
En cuanto a los errores 404, tengo un error personalizado creado en mi web.config de este modo:
<customErrors mode="On">
<error statusCode="404" redirect="~/page-not-found"/>
</customErrors>
Y en la acción del controlador que maneja la url "página no encontrado", me conecto la URL original solicitada:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult PageNotFound()
{
log.Warn("404 page not found - " + Utils.SafeString(Request.QueryString["aspxerrorpath"]));
return View();
}
Y esto también funciona.
El problema que tengo es cómo registrar los errores que están en las páginas .aspx. Digamos que tengo un error de compilación en una de las páginas o algún código en línea que va a lanzar una excepción:
<% ThisIsNotAValidFunction(); %>
<% throw new Exception("help!"); %>
Parece ser que el atributo HandleError está redireccionando correctamente esto a mi página Error.aspx en la carpeta compartida, pero definitivamente no está siendo capturado por el método OnActionExecuted de mi BaseController. Pensaba que podría poner el código de registro en la página Error.aspx, pero no estoy seguro de cómo recuperar la información de error en ese nivel.
+1 para ELMAH. Aquí hay un [Tutorial de ELMAH] (http://blog.elmah.io/elmah-tutorial/) Lo escribí para ayudarlo a comenzar. Recuerde también utilizar el paquete [Elmah.MVC] (https://www.nuget.org/packages/Elmah.MVC/) cuando utilice ASP.NET MVC, para evitar problemas con páginas de error personalizadas, etc. – ThomasArdal
Hay algunos productos por ahí que registrará todos los errores que ocurren en las aplicaciones .NET. No son tan de bajo nivel como ELMAH o log4net, pero le ahorran un montón de tiempo si solo está tratando de monitorear y diagnosticar errores: [Bugsnag] (https://docs.bugsnag.com/platforms/dotnet/ asp-net /) y [AirBrake] (https://airbrake.io/languages/net_bug_tracker) son dos de los que conozco .NET –