Ich verwende derzeit log4net in meiner ASP.NET MVC-Anwendung, um Ausnahmen zu protokollieren. Die Art, wie ich das mache, besteht darin, dass alle meine Controller von einer BaseController-Klasse erben. In der OnActionExecuting Veranstaltung Base, log ich alle Ausnahmen, die aufgetreten sind:Protokollierungsfehler 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);
}
}
Dies funktioniert gut, wenn eine nicht behandelte Ausnahme während einer Controller-Aktion aufgetreten.
Wie für 404-Fehler, ich habe einen benutzerdefinierten Fehler wie so in meinem web.config einrichten:
<customErrors mode="On">
<error statusCode="404" redirect="~/page-not-found"/>
</customErrors>
Und in der Controller-Aktion, die den "Seite-not-found" url Griffe, ich lüge Die ursprüngliche URL wird angefordert:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult PageNotFound()
{
log.Warn("404 page not found - " + Utils.SafeString(Request.QueryString["aspxerrorpath"]));
return View();
}
Und das funktioniert auch.
Das Problem, das ich habe, ist, wie Fehler protokolliert werden, die auf den ASPX-Seiten selbst sind. Lassen Sie uns sagen, dass ich einen Kompilierungsfehler haben auf einer der Seiten oder einem Inline-Code, der eine Ausnahme werfen:
<% ThisIsNotAValidFunction(); %>
<% throw new Exception("help!"); %>
Es das richtig das Handle Attribut erscheint, wird Umleiten diese auf meine Error.aspx Seite im freigegebenen Ordner, aber es wird definitiv nicht von der OnActionExecuted-Methode meines BaseControllers abgefangen. Ich dachte, ich könnte vielleicht den Logging-Code auf der Error.aspx-Seite selbst setzen, aber ich bin mir nicht sicher, wie die Fehlerinformationen auf dieser Ebene abgerufen werden.
+1 für ELMAH. Hier ist ein [ELMAH Tutorial] (http://blog.elmah.io/elmah-tutorial/), das ich geschrieben habe, um Ihnen den Einstieg zu erleichtern. Denken Sie auch daran, das Paket [Elmah.MVC] (https://www.nuget.org/packages/Elmah.MVC/) zu verwenden, wenn Sie ASP.NET MVC verwenden, um Probleme mit benutzerdefinierten Fehlerseiten usw. zu vermeiden. – ThomasArdal
Theres ein paar Produkte Dort werden alle Fehler protokolliert, die in .NET-Anwendungen auftreten. Sie sind nicht so niedrig wie ELMAH oder log4net, aber sparen Sie eine Menge Zeit, wenn Sie nur versuchen, Fehler zu überwachen und zu diagnostizieren: [Bugsnag] (https://docs.bugsnag.com/platforms/dotnet/ asp-net /) und [AirBrake] (https://airbrake.io/languages/net_bug_tracker) sind zwei von denen, die ich weiß. NET –