log4j - snmp4j在log4j中配置BasicConfigurator时activemq中的Stackoverflow

标签 log4j activemq snmp4j

这真是一个奇怪的问题。我正在尝试将 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/

相关文章:

java - LOG4j Spring AOP

java - 解析 log4j 输出

java - Glassfish+ActiveMQ MDB 处理消息延迟 120 秒

jms - ActiveMQ - 通过命令行删除/清除所有队列

snmp - 如何从 SNMP 流中获取变量的单位?

logging - Liferay 日志级别

performance - log4j:显示方法名称的最快方法?

java - 找不到 java.lang.AutoCloseable 的类文件 - ActiveMQ 代码

java - 如何使用 snmp4j-2.7.0 获取 snmpv3 中的系统信息

java - SNMP 中缺少值