2014-01-27 4 views
0

WebApi 및 ELMAH를 사용하고 있으며 어떤 유형의 예외 (로깅 없음)에 대해 비즈니스 응답을 웹 응답으로 감쌀 수 있으며 ELMAH로 다른 비즈니스 오류를 기록 할 수 있기를 원합니다. 아니,이 코드는 내가 가지고있다.ELMAH로 처리 예외를 기록하지 마십시오

public async override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) 
     { 
      try 
      { 
      return await base.ExecuteAsync(controllerContext, cancellationToken); 
      } 
      catch (MyException ex) 
      { 
       return new HttpResponseMessage(CustomCode) 
       { 
        Content = new StringContent(CustomMessage) 
       }; 
      }   
      catch (Exception ex) 
      { 
       Elmah.ErrorSignal.FromCurrentContext().Raise(ex); 
       return new HttpResponseMessage(HttpStatusCode.InternalServerError) 
        { 
         Content = new StringContent("Ups! Something went wrong. Please try again or contact administrator!") 
        }; 
      } 
     } 

문제는 ELMAH에서 처리되지 않은 예외 만 기록하는 것이 좋습니다. 내 경우에는 catch 블록에 의해 catch되었지만 MyException 유형의 예외도 로그됩니다.

처리되지 않은 eceptions 만 기록하도록 ELMAH에 적용 할 수있는 설정이 있습니까?

답변

0

ELMAH는 웹 앱에서 발생하는 모든 예외를 포착합니다. 특정 오류를 필터링 할 경우 여기 ELMAH의 오류 필터링 기능을 설명 할 수 같이 귀하의 경우

https://code.google.com/p/elmah/wiki/ErrorFiltering

당신은 아마 당신의 global.asax.cs이 뭔가를 추가해야합니다 :

void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e) 
{ 
    if (e.Exception.GetBaseException() is MyException) 
     e.Dismiss(); 
} 
+0

ELMAH cacthes all exceptions? 처리되지 않은 예외 만이 아닙니까? 처리되지 않은 예외 만 기록하고 싶습니다. – bbeda

+0

사용자 정의 예외를 catch하고 그에 대한 원하는 응답을 반환 할 수 있습니다. 일반 catch 블록 (catch catch)을 사용하여 처리되지 않은 예외를 catch하지 마십시오. ELMAH가 그 오류를 처리하도록하십시오. – ThomasArdal

+0

나는 클라이언트에게 좀더 사용자 친화적 인 메시지로 반환하기를 원하기 때문에 일반적인 방법으로 예외를 잡았다. – bbeda