我在使 log4j2 与 ActiveMQ 一起使用时遇到一些问题。
这是我的 log4j2.xml :
<Configuration>
<ThresholdFilter level="all"/>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n"/>
<Filters>
<ThresholdFilter level="info" />
</Filters>
</Console>
<File name="baseLog" filename="\\\\p02630\\c$\\tmp\\logs\\logws-gendb.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Filters>
<ThresholdFilter level="error"/>
</Filters>
</File>
<JMS name="AMQError" providerurl="tcp://169.3.200.150:61616" password="admin" userName="admin">
<factoryName>org.apache.activemq.jndi.ActiveMQInitialContextFactory</factoryName>
<factoryBindingName>ConnectionFactory</factoryBindingName>
<TopicBindingName>logError</TopicBindingName>
</JMS>
<Failover name="FailOverAMQ" primary="AMQError">
<Failovers>
<appender-ref ref="baseLog"/>
</Failovers>
</Failover>
</Appenders>
<Loggers>
<root>
<AppenderRef ref="STDOUT" />
<AppenderRef ref="baseLog" />
<AppenderRef ref="FailOverAMQ" />
</root>
</Loggers>
</Configuration>
目标是能够在 ActiveMQ 中记录错误。但是,如果/当 AMQ 服务器关闭时,我希望记录器能够自动重新连接,并仍然在文件 Appender 中记录错误。
当服务器运行时,一切正常。但是当我关闭服务器时,ActiveMQ(正常)和文件 Appender 都不起作用,并且当服务器恢复时,log4j 在 60 秒自动重新连接时间(默认)后不会自动重新连接。更麻烦的是,我的文件附加器在服务器关闭后不再工作。
我首先遇到了“没有与元素故障转移匹配的参数”的问题,详情here并尝试添加注册“故障转移”元素的 FallBack 类。它确实删除了错误消息,但故障转移附加程序并没有更好地工作。我的印象是这个类所做的一切都是为了混淆错误。
您在使用故障转移附加程序方面运气好吗?
感谢您的帮助。
快速跟进。
我找不到解决此问题的方法。似乎是 log4j2 中的一个错误。
最后,我使用 javax.jms 包开发了一个简短的类来管理与 ActiveMQ 的连接。
并不完美,但至少,它有效。
我是一名优秀的程序员,十分优秀!