我正在使用ASPNet MVC4和在Global.asax上配置的HandleErrorAttribute过滤器
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
在我的web.config上,我已将customError模式配置为RemoteOnly:
<customErrors mode="RemoteOnly" />
因此,当在任何视图上引发异常时,用户被重定向到〜/ Shared / Error.cshtml,这没关系。
现在,我可以捕获日志的这个例外:
〜/ Shared / Error.cshtml代码:
@{
log4net.LogManager
.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
.Fatal("Not captured exception", ex);
}
实际上这段代码工作正常(没有EX参数),但我需要改进我的日志,包括异常细节。
如何在此页面上获取异常详情?
答案 0 :(得分:10)
只需将您的Error.cshtml
视图强类型化为HandleErrorInfo
,这是HandleErrorAttribute传递给此视图的模型:
@model System.Web.Mvc.HandleErrorInfo
@{
log4net
.LogManager
.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
.Fatal("Not captured exception", Model.Exception);
}
顺便说一句,在视图中登录似乎不是你能做的最干净的事情。我宁愿编写自定义错误处理程序属性并在那里记录异常。
答案 1 :(得分:8)
我建议编写自定义处理程序并在其中登录,例如
[AttributeUsage(AttributeTargets.All, Inherited = true)]
public class HandleErrorAttributeCustom : HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
base.OnException(context);
log4net.LogManager
.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
.Fatal("Not captured exception", context.Exception);
}
}