2012-12-11 7 views
0

매번 Elmah는 오류가 두 번 기록되는 오류를 기록합니다. 정확히 동일한 타임 스탬프와 100 % 동일합니다. web.config에는 특별한 구성이 없습니다. Web.config의에서mvc가있는 elmah가 두 번 로깅 중입니다

filters.Add(new ElmahHandleErrorAttribute { 

      ExceptionType = typeof(System.Data.Common.DbException), 
      // DbError.cshtml is a view in the Shared folder. 
      View = "DbError", 
      Order = 2 
     }); 

filters.Add(new ElmahHandleErrorAttribute { 

      ExceptionType = typeof(Exception), 
      // DbError.cshtml is a view in the Shared folder. 
      View = "Error", 
      Order = 3 
     }); 

일부 조각 : 다음 ElmaHandleErrorAttribute에서

<httpModules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
     <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
    </httpModules> 

<modules runAllManagedModulesForAllRequests="true"> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" /> 
     <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" /> 
    </modules> 

이 코드 :

public override void OnException(ExceptionContext context) { 
     base.OnException(context); 
     if (!context.ExceptionHandled  
      || TryRaiseErrorSignal(context) 
      || IsFiltered(context))   
      return; 

     LogException(context); 
    } 
나는 ElmahHandleErrorAttribute에게 추가 된 두 개의 필터를 만들었습니다

많이 검색했지만 문제가 해결되지 않았습니다. web.config 또는 이와 유사한 항목에 이중 항목이 없습니다.

큰 문제는 아니지만 성가시다. 사전

©에서

들으 A-X-I

+1

당신은 사용자 정의 ElmaHandleErrorAttribute에서 예외 유형을 확인하지 않습니다. 따라서 2 번 호출됩니다. DbException은 Exception에서 상속되기 때문입니다. – VahidN

+0

이 비슷한 질문에 대한 내 제안 된 답변을 참조하십시오 http://stackoverflow.com/a/16794746/589827 – DGreen

답변

-1

내 설치와 같은 문제가 있었다, 그래서 나는 ExceptionLogger 클래스를했다. 그런 다음 정적 필드를 추가하여 기록한 예외 목록을 유지합니다. 그런 다음 onException 이벤트가 발생하면 중복 로그를 방지하기 위해 마지막으로 기록 된 예외가 있는지 검사합니다.

public class ExceptionLogger 
{ 
    public static List<Exception> loggedExceptions = new List<Exception>(); 

    public static void LogException(Exception e) { 

...

public override void OnException(ExceptionContext context) 
    { 
     base.OnException(context); 
     var e = context.Exception; 

     if (!e.Equals(ExceptionLogger.loggedExceptions.Last())) 
     { 
      ExceptionLogger.LogException(e); 
     } 

    } 
+0

다른 요청에 똑같은 시간에 두 가지 예외가 throw 될 때까지 작동합니다. –