我目前在我的ASP.NET MVC应用程序中使用log4net来记录异常。我这样做的方式是让所有控制器都从BaseController类继承。在BaseController的OnActionExecuting事件,我登录可能发生的任何异常:记录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);
}
}
如果控制器操作过程中发生未处理的异常,这个伟大的工程。
至于404错误,我有一个自定义的错误在我的web.config设置像这样:
<customErrors mode="On">
<error statusCode="404" redirect="~/page-not-found"/>
</customErrors>
而且在处理了“页面未找到” URL控制器动作,我登录原始网址被要求:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult PageNotFound()
{
log.Warn("404 page not found - " + Utils.SafeString(Request.QueryString["aspxerrorpath"]));
return View();
}
而且这也行得通。
我遇到的问题是如何记录.aspx页面上的错误。比方说,我对网页或一些行内代码,将引发异常的一个编译错误:
<% ThisIsNotAValidFunction(); %>
<% throw new Exception("help!"); %>
看来,属性的HandleError正确地在共享文件夹重新路由这我Error.aspx页面,但绝对不会被我的BaseController的OnActionExecuted方法捕获。我想我可能会把日志代码放在Error.aspx页面上,但我不确定如何检索该级别的错误信息。
ELMAH +1。这是我写的帮助你入门的[ELMAH教程](http://blog.elmah.io/elmah-tutorial/)。还要记住在使用ASP.NET MVC时使用[Elmah.MVC](https://www.nuget.org/packages/Elmah.MVC/)包,以避免定制错误页面等问题。 – ThomasArdal 2016-08-15 13:04:04
Theres少数产品在那里会记录.NET应用程序中发生的所有错误。它们不像ELMAH或log4net那样低级,但如果您只是想监视和诊断错误,那么可以节省大量时间:[Bugsnag](https://docs.bugsnag.com/platforms/dotnet/) asp-net /)和[AirBrake](https://airbrake.io/languages/net_bug_tracker)是我所知道的两个.NET – 2017-09-12 01:05:42