首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除非打开调试级别,否则焊接CDI不会记录异常。

除非打开调试级别,否则焊接CDI不会记录异常。
EN

Stack Overflow用户
提问于 2017-02-03 16:34:09
回答 1查看 705关注 0票数 0

我们已经注意到,如果在处理CDI事件(例如使用@Observes(during = TransactionPhase.BEFORE_COMPLETION) )时抛出异常,则如果日志级别高于DEBUG,则不会记录异常。

焊接日志如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
    } catch (Exception e) {
        EventLogger.LOG.asyncObserverFailure(metadata);
        EventLogger.LOG.catchingDebug(e);
    }

这是因为规范说异常及其堆栈跟踪不需要被记录,还是因为Weld在处理异常时相当(太)宽松。

是否有更好的解决方案,而不是将所有事件观察代码包装在一个try-catch块中?

注意:将org.jboss.weld.Event的标准日志级别设置为DEBUG会导致过多的日志记录。还记录了每个发送的事件:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-07 08:33:37

既然我理解了你的问题(很抱歉之前的混乱),让我来解释一下。

Weld似乎有意隐藏错误消息。在伐木方面没有任何规范限制。对于例外情况,规范只描述了什么应该爆炸,什么时候应该爆炸。

此外,您正在使用的焊接JTA模块,我认为不符合任何CDI规范部分(意味着它的焊接专用),所以它可能没有发言权,无论如何。

现在到解决方案,我认为您对日志记录有一个公平的观点,它没有真正的帮助。因此,我继续创建了一个JIRA问题(焊接-2330)。因为这是3.x分支,所以应该很快就能修好。可以自由地跳进去,对它有发言权,甚至可以做出贡献。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42028856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档