예를 들어 @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)
첫 번째 콘솔 로그는 WELD-000401에 대한 로깅 수준이 실제로 'ERROR'임을 보여줍니다. 그러므로'DEBUG' 레벨에서만 볼 수있는 것은 이치에 맞지 않습니다. 먼저 로깅을 올바르게 설정했는지 확인합니다. 예를 들어 WildFly를 사용하면 Weld 및 WildFly 콘솔 자체의 레벨을 별도로 설정해야합니다. – Siliarus
@Siliarus 나는 당신이 의미하는 것을 이해하지 못합니다. 로깅을 일반적으로 ERROR로 설정하면 WELD-000401 및 NO stacktrace가있는 행만 가져옵니다. 로깅 수준을 일반적으로 DEBUG로 설정하면 stacktrace도 얻습니다. 이는 Weld가 로그 레벨이 DEBUG이 아닌 프로덕션 환경에서 예외를 효과적으로 감추고 있음을 의미합니다. Weld가 DEBUG 레벨에서만 로깅하고 있다면 실제 오류가 무엇인지 알 수 있습니까? –