import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Producer {
private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
private static String QUEUE_NAME = "kesaven";
private static final Logger logger = LogManager.getLogger(Producer.class.getName());
public static void main(String[] args) throws JMSException
{
//System.out.println(url);
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(QUEUE_NAME);
MessageProducer producer = session.createProducer(destination);
//TextMessage message = session.createTextMessage("My first log message to queue");
logger.info("My first log message to queue");
//producer.send(message);
//System.out.println("Sentage '" + message.getText() + "'");
connection.close();
}
}
我正在尝试使用log4j2和activemq将消息记录到队列中。我正在使用log4j2.3和队列我正在使用activemq 5.9.0。我能够在队列中看到异常消息而不是我发送的消息。以下是队列中的错误消息
javax.jms.JMSException:无法从内容构建正文。 可序列化的类不可用于代理。原因: 抛出java.lang.ClassNotFoundException: org.apache.logging.log4j.core.impl.Log4jLogEvent $ LogEventProxy
答案 0 :(得分:1)
您使用什么appender将数据写入ActiveMQ?我建议使用RFC5424布局或其他一些在阅读事件时不需要Log4j2 jar的格式,而不是使用Java序列化来编写将其序列化为JSON的日志事件。
答案 1 :(得分:0)
由于Log4event已放入队列,您可以检查代理端是否有可用的log4j2 jar。
答案 2 :(得分:0)
我将以下jar从log4j2添加到activeMQ server / lib目录以使其工作
的log4j-API-2.6.1, log4j的核-2.6.1
我只记录了Strings,如果我尝试记录ObjectMessages,队列条目将无法在队列管理器视图中打开,JSP就会失败。