Attualmente sto utilizzando log4net nella mia applicazione ASP.NET MVC per registrare le eccezioni. Il modo in cui sto facendo questo è avere tutti i miei controller ereditati da una classe BaseController. Nel caso in OnActionExecuting del BaseController, annoto tutte le eccezioni che possono essersi verificati:Errori di registrazione in 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);
}
}
Questa grande opera se un'eccezione non gestita durante un'azione di controllo.
Per quanto riguarda i 404 errori, ho un errore personalizzato istituito nel mio web.config in questo modo:
<customErrors mode="On">
<error statusCode="404" redirect="~/page-not-found"/>
</customErrors>
E nella azione di controllo che gestisce l'url "page-not-found", accedo l'URL originale richiesto:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult PageNotFound()
{
log.Warn("404 page not found - " + Utils.SafeString(Request.QueryString["aspxerrorpath"]));
return View();
}
E questo funziona anche.
Il problema che sto avendo è come registrare gli errori che si trovano nelle pagine .aspx. Diciamo che ho un errore di compilazione su una delle pagine o qualche codice inline che un'eccezione:
<% ThisIsNotAValidFunction(); %>
<% throw new Exception("help!"); %>
Sembra che l'attributo HandleError sia correttamente Ricalcolo Con questo alla mia pagina Error.aspx nella cartella condivisa, ma sicuramente non viene catturato dal metodo OnActionExecuted del mio BaseController. Stavo pensando che potrei inserire il codice di registrazione nella pagina Error.aspx, ma non sono sicuro di come recuperare le informazioni sull'errore a quel livello.
+1 per ELMAH. Ecco un [ELMAH Tutorial] (http://blog.elmah.io/elmah-tutorial/) che ho scritto per aiutarti a iniziare. Ricorda inoltre di utilizzare il pacchetto [Elmah.MVC] (https://www.nuget.org/packages/Elmah.MVC/) quando si utilizza ASP.NET MVC, per evitare problemi con pagine di errore personalizzate ecc. – ThomasArdal
Ci sono alcuni prodotti là fuori che registrerà tutti gli errori che si verificano nelle app .NET. Non sono di livello così basso come ELMAH o log4net, ma ti fanno risparmiare un sacco di tempo se stai solo provando a monitorare e diagnosticare gli errori: [Bugsnag] (https://docs.bugsnag.com/platforms/dotnet/ asp-net /) e [AirBrake] (https://airbrake.io/languages/net_bug_tracker) sono due di quelli che conosco. NET –