rka*_*ano 7 asp.net asp.net-mvc log4net exception-handling razor
我正在使用ASPNet MVC4和在Global.asax上配置的HandleErrorAttribute过滤器
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
Run Code Online (Sandbox Code Playgroud)
在我的web.config上,我已将customError模式配置为RemoteOnly:
<customErrors mode="RemoteOnly" />
Run Code Online (Sandbox Code Playgroud)
因此,当在任何View上引发异常时,用户被重定向到〜/ Shared/Error.cshtml,这没关系.
现在,我可以捕获日志的这个异常:
〜/ Shared/Error.cshtml代码:
@{
log4net.LogManager
.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
.Fatal("Not captured exception", ex);
}
Run Code Online (Sandbox Code Playgroud)
实际上这段代码工作正常(没有EX参数),但我需要改进我的日志,包括异常细节.
我如何在此页面上获取异常详细信息?
Dar*_*rov 10
只需将您的Error.cshtml视图强类型HandleErrorInfo化为HandleErrorAttribute传递给此视图的模型:
@model System.Web.Mvc.HandleErrorInfo
@{
log4net
.LogManager
.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
.Fatal("Not captured exception", Model.Exception);
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,在视图中记录似乎不是你能做的最干净的事情.我宁愿编写自定义错误处理程序属性并在那里记录异常.
我建议编写自定义处理程序并在其中登录,例如
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4401 次 |
| 最近记录: |