如果启用自定义错误页面,ELMAH 不会记录异常
ELMAH not logging exceptions if Custom error page is enabled
我有这个路径/test/account并且它有一个代码
throw new Exception("error");
在我的 web.config
<customErrors mode="On">
<error statusCode="404" redirect="~/404.html" />
</customErrors>
当它的模式打开时,它会显示自定义错误页面而不是异常,并且 elmah 不会记录它。当它关闭时,它会显示异常并记录下来。
我的理解是我们需要记录异常,为此我们有 elmah,但是我们不想在生产中显示那些详细的异常,所以我们有自定义错误页面。
我希望即使在出现异常时显示自定义错误页面,我仍然希望 elmah 记录它。
自定义错误页面实际上有 "swallow" 个异常,因此,ELMAH 永远不会收到有关异常的通知。有一个很好的小技巧来记录已处理的异常,取自 ELMAH and custom errors。创建这个 class:
public class ElmahExceptionLogger : IExceptionFilter
{
public void OnException (ExceptionContext context)
{
if (context.ExceptionHandled)
{
ErrorSignal.FromCurrentContext().Raise(context.Exception);
}
}
}
然后配置过滤器:
protected void Application_Start()
{
GlobalConfiguration.Configuration.Filters.Add(new ElmahExceptionLogger());
}
我有这个路径/test/account并且它有一个代码
throw new Exception("error");
在我的 web.config
<customErrors mode="On">
<error statusCode="404" redirect="~/404.html" />
</customErrors>
当它的模式打开时,它会显示自定义错误页面而不是异常,并且 elmah 不会记录它。当它关闭时,它会显示异常并记录下来。
我的理解是我们需要记录异常,为此我们有 elmah,但是我们不想在生产中显示那些详细的异常,所以我们有自定义错误页面。
我希望即使在出现异常时显示自定义错误页面,我仍然希望 elmah 记录它。
自定义错误页面实际上有 "swallow" 个异常,因此,ELMAH 永远不会收到有关异常的通知。有一个很好的小技巧来记录已处理的异常,取自 ELMAH and custom errors。创建这个 class:
public class ElmahExceptionLogger : IExceptionFilter
{
public void OnException (ExceptionContext context)
{
if (context.ExceptionHandled)
{
ErrorSignal.FromCurrentContext().Raise(context.Exception);
}
}
}
然后配置过滤器:
protected void Application_Start()
{
GlobalConfiguration.Configuration.Filters.Add(new ElmahExceptionLogger());
}