我们已经注意到,如果在处理CDI事件(例如使用@Observes(during = TransactionPhase.BEFORE_COMPLETION) )时抛出异常,则如果日志级别高于DEBUG,则不会记录异常。
焊接日志如下所示:
16:31:41,732 ERROR [org.jboss.weld.Event] WELD-000401 Failure while notifying an observer of event SomeEventDTO来自焊缝的DeferredEventNotification的第85-86行显示了问题:https://github.com/weld/core/blob/master/modules/jta/src/main/java/org/jboss/weld/module/jta/DeferredEventNotification.java
} catch (Exception e) {
EventLogger.LOG.asyncObserverFailure(metadata);
EventLogger.LOG.catchingDebug(e);
}这是因为规范说异常及其堆栈跟踪不需要被记录,还是因为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)发布于 2017-02-07 08:33:37
既然我理解了你的问题(很抱歉之前的混乱),让我来解释一下。
Weld似乎有意隐藏错误消息。在伐木方面没有任何规范限制。对于例外情况,规范只描述了什么应该爆炸,什么时候应该爆炸。
此外,您正在使用的焊接JTA模块,我认为不符合任何CDI规范部分(意味着它的焊接专用),所以它可能没有发言权,无论如何。
现在到解决方案,我认为您对日志记录有一个公平的观点,它没有真正的帮助。因此,我继续创建了一个JIRA问题(焊接-2330)。因为这是3.x分支,所以应该很快就能修好。可以自由地跳进去,对它有发言权,甚至可以做出贡献。
https://stackoverflow.com/questions/42028856
复制相似问题