asp.net - 同时使用ELMAH和Application_Error

标签 asp.net asp.net-mvc-3 error-handling elmah

我们有一个配置为使用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和我们的自定义代码都将异常记录到数据库中。我希望对Server.ClearError()和httpContext.ClearError的调用将处理该错误,并且永远不会到达ELMAH。但是,记录两次错误的事实是否意味着ELMAH和application_error基本并行运行,并且它们都同时接收到未处理的异常?如果是这样,是否可以告诉ELMAH忽略该错误?

我们的意图是仅在某些事情真的出错时才让ELMAH处理错误,例如在注册elmah之后但在MVC应用程序运行之前,在ASP.NET管道中。

最佳答案

问题是它首先登录到ELMAH。因此,是的,您可以告诉它不要使用e.Dismiss()登录到ELMAH:下面的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
}

关于asp.net - 同时使用ELMAH和Application_Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17193100/

相关文章:

c# - 抛出类型为 'system.outofmemoryexception' 的异常

c# - 从 ASP.NET 5 Controller VS 2015 获取 wwwroot 文件夹路径

asp.net - 通过使用 Javascript 将邮政编码传递给 maps.google.com 来获取纬度经度

c# - ASP.NET MVC 3 自定义类型转换

c# - ASP.NET MVC 错误 : Object being referred to is not locked by any Client

asp.net-mvc - 避免在 Razor View 中使用 "using"子句

javascript - 从 javascript 调用 Action 方法

android - 出现错误:Execution failed for task ':app:dexDebug'

c# - 获取InvalidOperationException错误堆栈跟踪只有一行

python - python中的错误处理问题