【问题标题】:Using log4j JMSAppender with ActiveMQ - wire format timeout in debug level (client side)使用带有 ActiveMQ 的 log4j JMSAppender - 调试级别(客户端)的线格式超时
【发布时间】:2017-06-01 11:22:20
【问题描述】:

我正在尝试使用 log4j JMSappender 和 ActiveMQ 制作 POC。我成功地遵循了这个例子 -> http://activemq.apache.org/how-do-i-use-log4j-jms-appender-with-activemq.html

但这是针对 INFO 级别的。我做了一些修改以在调试级别使用它,我的程序和 activeMQ 无法交换它们的有线格式。这是我的 log4j(客户端)

log4j.rootLogger=DEBUG, stdout, jms
log4j.logger.org.apache.activemq=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %c - %m%n
log4j.appender.stdout.Threshold=INFO

log4j.appender.jms=org.apache.log4j.net.JMSAppender
log4j.appender.jms.InitialContextFactoryName=org.apache.activemq.jndi.ActiveMQInitialContextFactory
log4j.appender.jms.ProviderURL=tcp://localhost:61616
log4j.appender.jms.TopicBindingName=logTopic
log4j.appender.jms.TopicConnectionFactoryBindingName=ConnectionFactory
log4j.appender.jms.Threshold=DEBUG

在运行我的客户端时,出现线路格式错误。

制作人计划:

import org.apache.log4j.Logger;

public class ProducerDebug {

public static void main( String[] args ) throws InterruptedException
{
    new ProducerDebug();
}

private ProducerDebug() throws InterruptedException {
    Logger logger = Logger.getLogger(ProducerInfo.class);

    while (true)
    {
        logger.debug("push DEBUG");
        logger.info("push INFO2");
        Thread.sleep(10000);
    }
}
}

还有错误信息:

log4j:ERROR 激活名为 [jms] 的附加程序选项时出错。 javax.jms.JMSException:有线格式协商超时:对等方没有 发送他的电汇格式。在 org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:72) 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1412) 在 org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1501) 在 org.apache.activemq.ActiveMQConnection.createSession(ActiveMQConnection.java:323) 在 org.apache.activemq.ActiveMQConnection.createTopicSession(ActiveMQConnection.java:1134) 在 org.apache.log4j.net.JMSAppender.activateOptions(JMSAppender.java:218) 在 org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) 在 org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) 在 org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104) 在 org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842) 在 org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768) 在 org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648) 在 org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514) 在 org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580) 在 org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526) 在 org.apache.log4j.LogManager.(LogManager.java:127) 在 org.apache.log4j.Logger.getLogger(Logger.java:117) 在 awg.adb.producer.ProducerDebug.(ProducerDebug.java:13) 在 awg.adb.producer.ProducerDebug.main(ProducerDebug.java:9) 原因: java.io.IOException:有线格式协商超时:对等体没有 发送他的电汇格式。在 org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:98) 在 org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:68) 在 org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:81) 在 org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:86) 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1387) ... 17 更多

我尝试了很多东西,但我不明白为什么会出现这个错误。

供参考:我正在使用 - ActiveMQ 5.12.1 - Log4j 1.2.17

【问题讨论】:

    标签: java logging log4j activemq appender


    【解决方案1】:

    是的,如果级别为调试,则由于 AMQ 日志,一种解决方案是像这样执行相反的操作:

    log4j.rootLogger=INFO, stdout
    
    ## Be sure that ActiveMQ messages are not logged to 'jms' appender
    log4j.logger.org.apache=INFO, stdout
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %-5p %c - %m%n
    
    ## Configure 'jms' appender. You'll also need jndi.properties file in order to make it work
    log4j.appender.jms=org.apache.log4j.net.JMSAppender
    log4j.appender.jms.InitialContextFactoryName=org.apache.activemq.jndi.ActiveMQInitialContextFactory
    log4j.appender.jms.ProviderURL=tcp://localhost:61616
    log4j.appender.jms.TopicBindingName=logTopic
    log4j.appender.jms.TopicConnectionFactoryBindingName=ConnectionFactory
    log4j.appender.jms.Threshold=DEBUG
    log4j.logger.your.package=jms
    

    【讨论】:

    • 谢谢哈森。我尝试了你的示例,将 'log4j.logger.your.package=jms' 更改为 'log4j.logger.your.package=DEBUG, jms' 并且它正在工作。
    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 2019-02-15
    • 2011-07-26
    • 2018-03-27
    • 2023-03-21
    • 2016-06-05
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多