当snmp4j在log4j中配置BasicConfigurator时,activemq中的stackoverflow

时间:2014-04-24 17:55:48

标签: log4j activemq snmp4j

这是一个非常奇怪的问题。我正在尝试将snmp4j从1.10.1升级到最新版本(2.2.5),现在我从ActiveMQ(版本5.9.1)中获得了stackoverflower错误。我有一个奇怪的解决方法,但如果有人能够更清楚地了解这个问题,那将会很有趣。

当snmp4j加载SnmpRequest类并执行此静态块时,会发生堆栈溢出:

static {
    LogFactory.setLogFactory(new Log4jLogFactory());
    org.apache.log4j.BasicConfigurator.configure();
    BER.setCheckSequenceLength(false);
  }

调用BasicConfigurator.configure()时,ActiveMQ会爆炸。我的解决方法是在启动时(在ActiveMQ初始化之前)构造(加载)SnmpRequest对象。在snmp4j版本1.10.1中,SnmpRequest类具有不同的静态块而没有configure()调用。

以下是stackoverflower的跟踪:

6688 [ActiveMQ VMTransport: vm://Server#1-1] SYSTM SystemError  -
4550 [ActiveMQ VMTransport: vm://Server#1-1] TRACE org
6689 [ActiveMQ VMTransport: vm://Server#1-1] SYSTM SystemError  - 
4550 [ActiveMQ VMTransport: vm://Server#1-1] TRACE org
6691 [ActiveMQ VMTransport: vm://Server#1-1] SYSTM SystemError  - 
4550 [ActiveMQ VMTransport: vm://JServer#1-1] TRACE org
6693 [ActiveMQ VMTransport: vm://Server#1-1] SYSTM SystemError  - 
4550 [ActiveMQ VMTransport: vm://Server#1-1]

我相信这是stderr,而且这一切都很重要。

1 个答案:

答案 0 :(得分:3)

可能是Log4J初始化调用的递归 使用SnmpRequest类的代码。 SnmpRequest类仅是示例,不应使用 在生产代码中 - 一个原因是硬编码日志初始化及其 主要方法。