2017-02-03 16 views
0

예를 들어 @Observes(during = TransactionPhase.BEFORE_COMPLETION)과 같이 CDI 이벤트가 처리되는 동안 예외가 발생하면 로그 수준이 DEBUG 이상이면 예외가 기록되지 않습니다. 사양이 예외의 스택 트레이스 말 때문에 https://github.com/weld/core/blob/master/modules/jta/src/main/java/org/jboss/weld/module/jta/DeferredEventNotification.javaWeld CDI는 디버그 수준이 켜져 있지 않으면 예외를 기록하지 않습니다.

} catch (Exception e) { 
     EventLogger.LOG.asyncObserverFailure(metadata); 
     EventLogger.LOG.catchingDebug(e); 
    } 

이인가 : 문제를 보여

16:31:41,732 ERROR [org.jboss.weld.Event] WELD-000401 Failure while notifying an observer of event SomeEventDTO 

라인 85-86 DeferredEventNotification의 용접에서 :

은 용접이 같은 간단한 뭔가를 기록 기록을 남길 필요는 없으며, 이는 Weld가 예외 처리에서 너무 편해져 있기 때문입니다.

모든 이벤트 관찰 코드를 try-catch 블록으로 래핑하는 것보다 나은 해결책이 있습니까?

참고 : org.jboss.weld.Event의 표준 로그 수준을 DEBUG으로 설정하면 너무 많은 로깅이 발생합니다. 전송 된 각 이벤트는 다음과 같이 기록됩니다.

17:47:14,088 DEBUG [org.jboss.weld.Event] WELD-000400 Sending event SomeEventDTO directly to observer [method] public com.foo.bar.BeanClass.methodName(SomeEventDTO) 
+0

첫 번째 콘솔 로그는 WELD-000401에 대한 로깅 수준이 실제로 'ERROR'임을 보여줍니다. 그러므로'DEBUG' 레벨에서만 볼 수있는 것은 이치에 맞지 않습니다. 먼저 로깅을 올바르게 설정했는지 확인합니다. 예를 들어 WildFly를 사용하면 Weld 및 WildFly 콘솔 자체의 레벨을 별도로 설정해야합니다. – Siliarus

+0

@Siliarus 나는 당신이 의미하는 것을 이해하지 못합니다. 로깅을 일반적으로 ERROR로 설정하면 WELD-000401 및 NO stacktrace가있는 행만 가져옵니다. 로깅 수준을 일반적으로 DEBUG로 설정하면 stacktrace도 얻습니다. 이는 Weld가 로그 레벨이 DEBUG이 아닌 프로덕션 환경에서 예외를 효과적으로 감추고 있음을 의미합니다. Weld가 DEBUG 레벨에서만 로깅하고 있다면 실제 오류가 무엇인지 알 수 있습니까? –

답변

1

귀하의 질문을 이해합니다. (혼란에 대해 사과드립니다.) 몇 가지 빛을 비추어주십시오.

오류 메시지가 Weld에 의해 의도적으로 숨겨진 것 같습니다. 로깅에 대한 사양 제한은 없습니다. 예외 사항에 관한 한, 명세서는 단지 무엇을 폭파해야 하는지를 기술 할 뿐이다.

또한 Weld JTA 모듈을 사용하고 있는데, 이는 CDI 사양 파트 (용접 관련)에 해당하지 않기 때문에 어쨌든 거기에 말을하지 않을 수도 있습니다.

이제 해결책에 대해 로깅에 대한 공정한 포인트가 있다고 생각합니다. 실제로 도움이되지 않습니다. 따라서 나는 앞서 가서 JIRA issue (WELD-2330)을 만들었습니다. 이것은 3.x 브랜치이기 때문에 꽤 빨리 수정해야합니다. 뛰어 들어 자유롭게 말하거나 기고하기를 바랍니다.

+0

대단히 감사합니다. 이제는 그냥 JBoss가 Weld의 최신 버전을 사용하고 b) 고객이 JBoss 버전으로 업그레이드 할 때까지 기다려야합니다. 희망적으로 부활절 전까지는 모든 일이 생길 것입니다. :-) –

+0

그 전까지의 작업으로 Weld 이벤트에 대한 DEBUG 로깅을 켜고 로깅 필터를 사용하여 우리가 원하는, http://middlewaremagic.com/jboss/?p=2421 –

+0

흠, 당신이 지적한 코드는 마스터 브랜치 (Weld 3.0/CDI 2.0)에 있으며 문제에는 2.4 용 수정판도 있습니다. 용접 (EAP 6.x/7.x 및 Wildfly에 있음). 그러나 JBoss AS 7을 사용하는 경우에는 도움이되지 않습니다. 그것은 더 이상 활발하게 개발되지 않은 Weld 1.x입니다. 그 경우에는 디버그 로그의 필터링과 함께 남을 것입니다. 그럴까요? – Siliarus