使用ELMAH和Application_Error事件在同一时间(Using ELMAH and A

2019-10-18 06:31发布

我们有一个配置为使用ELMAH一个ASP.NET MVC 3应用程序。 我们也有我们这样的Application_Error方法的代码。 无论ELMAH和我们的自定义代码记录到数据库中。

protected void Application_Error(object sender, EventArgs e)
{
    MvcApplication app = (MvcApplication)sender;
    HttpContext httpContext = app.Context;

    Exception ex = app.Server.GetLastError();
    HttpException httpException = ex as HttpException;              

    //log the error with our custom logging

    Server.ClearError();

    if (httpContext.IsCustomErrorEnabled) //only show custom error if enabled in config
    {
        httpContext.Response.Clear();
        httpContext.ClearError();

        //show our own custom error page here

    }
}

我们看到这个问题(不是一个真正的问题,但无论)是两个ELMAH和我们的自定义代码记录异常的DB。 我希望到Server.ClearError()的调用和httpContext.ClearError会处理错误,它将永远不会ELMAH。 不过,确实的事实,被记录的错误两次暗示ELMAH和的Application_Error并行运行基本上,他们都得到在同一时间未处理的异常? 如果是的话反正是有告诉ELMAH忽略这个错误吗?

我们的目的是只如果出现真的错了,像ELMAH登记之后将ASP.NET管道ELMAH处理错误,但MVC应用程序之前,将运行。

Answer 1:

问题是,这是第一次登录到ELMAH。 所以,是的,你可以告诉它不使用登录到ELMAH e.Dismiss()ErrorLog_Filtering以下功能之前打Application_Error 。 因此,添加此功能和任何需要的逻辑分析,你需要确定,如果你想在ELMAH与否。

void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
    //get the exceptions like:
    Exception m = e.Exception;
    Exception ex = e.Exception.GetBaseException();

    //tell it not to log the error in ELMAH like (based on whatever criteria you have):
    e.Dismiss();

    //Application_Error will be hit next
}

protected void Application_Error(object sender, EventArgs e)
{
    //your logic
}


文章来源: Using ELMAH and Application_Error at the same time