2013-06-19 3 views
1

ELMAH를 사용하도록 구성된 ASP.NET MVC 3 응용 프로그램이 있습니다. 우리는 또한 이와 같은 Application_Error 메소드에 코드를 가지고 있습니다. ELMAH와 커스텀 코드는 모두 데이터베이스에 기록됩니다.ELMAH와 Application_Error를 동시에 사용하기

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가 등록 된 후, 그러나 MVC 응용 프로그램이 실행되기 전에 ASP.NET 파이프 라인과 같이 뭔가 잘못되면 ELMAH에서만 오류를 처리하게됩니다.

답변

4

문제는 먼저 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 
} 
+0

감사합니다. –