我有一个简单的测试应用程序,使用AmqpAppender记录消息。 当我运行我的应用程序时,我可以看到基于控制台的消息被写出来,但AMQP却没有。更让我感到担心的是,我根本没有看到appender的任何输出表明它可能有问题。我已经测试了无效的交换名称,以及关闭了rabbitmq服务器(测试我的本地盒子),但没有任何东西出现。
当它无法找到appender的主机时,我不应该至少在System.err中出错吗?
我正在使用WebApplicationInitializer初始化我的webapp,但我没有为Rabbit定义任何其他spring-beans,因为目前只有记录器正在使用它。
这是我的log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
</layout>
</appender>
<!-- Complete Logger -->
<appender name="amqp" class="org.springframework.amqp.rabbit.log4j.AmqpAppender">
<param name="host" value="www.yousuck.io" />
<param name="port" value="5672" />
<param name="virtualHost" value="platform" />
<param name="username" value="username" />
<param name="password" value="password" />
<param name="exchangeName" value="testExchange" />
<param name="exchangeType" value="topic" />
<param name="routingKeyPattern" value="test" />
<param name="applicationId" value="ErrorsAppenderTest" />
<param name="declareExchange" value="true" />
<param name="durable" value="true" />
<param name="contentType" value="text/plain" />
<param name="senderPoolSize" value="2" />
<param name="maxSenderRetries" value="30" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n" />
</layout>
</appender>
<root>
<!-- <level value="debug" /> -->
<priority value="debug" />
<appender-ref ref="amqp" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
我在这里错过的是导致这甚至没有初始化的原因。
答案 0 :(得分:1)
如果您确定要选择正确的log4j.xml(使用-Dlog4j.debug=true
),那么您可能不会等待足够长的时间。重试以指数方式退出;如果最大重试次数为30,则记录错误需要几分钟(最后一次重试等待30秒,最后一次重试等等)等等。减少重试次数,您应该看到:
log4j:ERROR Could not send log message This is an INFO message with properties after 1 retries
org.springframework.amqp.AmqpIOException: java.net.UnknownHostException: junk
(这来自我们的一个主机名错误的测试用例)。
某些错误(例如此错误)应该被认为是致命的而不是重试的;随意打开JIRA 'Improvement' Issue。