这真是一个奇怪的问题。我正在尝试将 snmp4j 从 1.10.1 升级到最新版本(2.2.5),现在我从 ActiveMQ(版本 5.9.1)中收到堆栈溢出错误。我有一个奇怪的解决方法,但如果有人能对这个问题有更多的了解,那就很有趣了。
当 snmp4j 加载 SnmpRequest 类并执行此静态 block 时,会发生堆栈溢出:
static {
LogFactory.setLogFactory(new Log4jLogFactory());
org.apache.log4j.BasicConfigurator.configure();
BER.setCheckSequenceLength(false);
}
当进行 BasicConfigurator.configure()
调用时,ActiveMQ 会崩溃。我的解决方法是在启动时(在 ActiveMQ 初始化之前)构建(加载)一个 SnmpRequest 对象。在 snmp4j 版本 1.10.1 中,SnmpRequest 类具有不同的静态 block ,没有 configure()
调用。
下面是 stackoverflowerror 的跟踪:
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,而且都是一大串。
最佳答案
Log4J 初始化中可能有一个递归调用 您的代码使用 SnmpRequest 类。 SnmpRequest 类仅作为示例,不应使用 在生产代码中 - 原因之一是硬编码日志初始化及其 主要方法。
关于log4j - snmp4j在log4j中配置BasicConfigurator时activemq中的Stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23276349/