使用log4j.xml配置JMSAppender

时间:2015-11-26 10:41:59

标签: log4j

我正在尝试使用x4样式配置文件使用Log4j JMSAppender,除了topicName之外,我的log4j.xml与https://code.google.com/p/log4j-jms-sample/source/browse/trunk/src/main/resources/log4j.xml相同。
测试代码非常简单:

public static void main(String[] args) throws Exception {
    Logger logger = Logger.getLogger(Main.class);
    logger.debug("Debug");
    logger.info("Info");
    logger.warn("Warn");
    logger.error("Error");
    logger.fatal("Fatal");
}

但我在测试期间总是遇到这个错误:

javax.jms.JMSException: Wire format negotiation timeout: peer did not send his wire format.
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:62)
    at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1395)
    at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1481)
    at org.apache.activemq.ActiveMQConnection.createSession(ActiveMQConnection.java:323)
    at org.apache.activemq.ActiveMQConnection.createTopicSession(ActiveMQConnection.java:1112)

我的ActiveMQ处于活动状态,但每次发生上述异常时它都会发出警告消息: enter image description here

我已经搜索了整整一个下午试图获得解决方案,但没有运气。 This page给了我一些提示,我也引用了this page,但它们并没有帮我解决问题。

我知道如何使用log4j.properties而不是log4j.xml,但我想知道的是为什么会出现这个错误以及如何解决它。

希望有人可以帮助我。非常感谢。

我使用的是ActiveMQ-5.12.0,Log4j-1.2.17,Windows 7平台。

1 个答案:

答案 0 :(得分:0)

最后,我从here解决了这个问题。

第二种情况,我注意到this page中的 log4j.properties 方式有一个配置:

## Be sure that ActiveMQ messages are not logged to 'jms' appender
log4j.logger.org.apache.activemq=INFO, stdout

我检查了我的log4j.xml,它只包含appender config:

<logger name="org.apache.activemq">
    <appender-ref ref="console" />
</logger>

但不包括日志级别配置。所以我将其改为:

<logger name="org.apache.activemq">
    <level value="INFO" />
    <appender-ref ref="console" />
</logger>

这一次,错误消失了。