当前位置: 首页 > 知识库问答 >
问题:

将log4j JMSAppender与ActiveMQ一起使用-调试级别(客户端)的线格式超时

慕阳伯
2023-03-14

我在尝试用log4j JMSappender和ActiveMQ做一个POC。我成功地效仿了这个例子-

但这是信息级的。我做了一些修改以在调试级别使用它,我的程序和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:错误 激活名为 [jms] 的追加器的选项时出错。javax.jms.JMS例外:连线格式协商超时:对等方未发送他的连线格式。at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:72) at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1412) at org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1501) at org.apache.activemq.activemq Connect.createsession(ActiveMQConnection.java:323) at org.apache.activemq.ActiveMQConnection.createTopicSession(ActiveMQ连接.java:1134) atorg.apache.log4j.net.JMSAppender.activateOptions(JMSAppender.java:218) at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307) at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172) at org.apache.log4j.java.propertyConfigurator.parsecategory(PropertyConfigurator.java:842) at org.apache.log4j.PropertyConfigurator.parseCategory(属性配置器.java:768) at org.apache.log4j.PropertyConfigurator.configureRootCategory(属性配置器.java:648) at org.apache.log4j.PropertyConfigurator.doConfigure(属性配置器.java:514) at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfiator.java:580) at org.apache.log4j.helpers.OptionConverter.selectandConfigure(选项转换器.java:526) at org.apache.log4j.LogManager.(日志管理器.java:127) 在 org.apache.log4j.logger.getLogger(记录器.java:117) 在 awg.adb.producer.producerdebug.(制片人显示.java:13)在 awg.adb.制片人主要(制片人德布格.java:9) 由: java.io.IO异常: 电线格式协商超时: 对等方没有发送他的电线格式.at org.apache.activemq.transport.WireFormatNegotiator.oneway(WireFormatNegotiator.java:98) at org.apache.activemq.transportsport.oneway(互斥传输.java:68) 在 org.apache.activemq.transport.responseCorrelator.asyncRequest(响应相关.java:81) at org.apache.activemq.transportmq.ResponseCorreator.request(响应相关方.java:86) 在 org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1387) ...另外 17

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

有关信息:我正在使用 - ActiveMQ 5.12.1 - Log4j 1.2.17

共有1个答案

皇甫聪
2023-03-14

是的,如果级别是调试,这是由于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
 类似资料:
  • 很多关于Service Bus的资料都提到它使用AMQP 1.0。然而,我发现的示例使用了隐藏AMQP层的库,因此不清楚如何使用通用AMQP 1.0客户端并执行此服务总线示例中列出的操作 在几种情况下,能够使用独立的AMQP客户端而不是提供的更高级别客户端可能很重要。例如,提供的客户端可能在某些平台上不可用,或者通用客户端可能为特定问题提供更合适的工作方式。 可能相关问题

  • 我想使用Quarkus中的JooqDSL来构建我的SQL(并希望执行它们) 因此,我添加了以下Quarkus JOOQ扩展。 因为我想在我的项目中使用反应式PG SQL客户端,所以我问自己,例如JOOQ的< code>fetch()方法是否会阻塞线程?它是与引擎盖下的反应式vertx客户端兼容还是使用阻塞式客户端?看起来像后者,因为它不返回未来或者类似的东西。 在这种情况下,我应该只使用JOOQ来

  • 问题内容: 我正在使用以下代码创建多个JMS会话,以供多个使用者使用消息。我的问题是代码以单线程方式运行。即使消息存在于队列中,第二个线程也无法接收任何内容,而是继续轮询。同时,第一个线程完成对第一批的处理,然后返回并使用剩余的消息。这里的用法有什么问题吗? 问题答案: 您的问题是prefetchPolicy。 所有消息都被分派到第一个连接的使用者,当另一个连接时他没有收到消息,因此,如果您有一个

  • 我们试图在查询中使用请求超时,但它似乎不适合我们。 以下是我们在安装过程中所做的工作: 搜索。default\u allow\u partial\u结果:false(在服务器端和客户端上) 在我们命中的每个搜索查询中设置10ms的超时。(客户端) 除此之外,我们还设置了全局超时,如下代码所示: 查询耗时超过8秒,但仍未超时。我们已经禁用了部分结果,希望得到一个超时错误,但我们也没有得到任何错误。

  • 我想使用Apache连接器和Jersey 2.3客户端进行HTTPS连接。 我尝试了以下方法: 但是,sslContext似乎被忽略,因为服务器的证书被拒绝为不受信任(sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径) 如果删除“.withConfig(clientConfig)”部分,SSL连接可

  • 问题内容: 我想使用jQuery函数对REST服务进行XHR调用。基本上,这可以正常工作,但是REST服务只能通过https访问,并且要求客户端使用客户端证书进行身份验证。 如何使用jQuery的功能发送客户端证书? 问题答案: 如果请求源和目标位于同一域中,并且使用https:保护AJAX和SSL,则可以进行ssl ajax调用。但是您不能在ajax调用中进行ssl认证。