2015-12-23 50 views
-1
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。我能夠看到隊列中的異常消息,而不是我發送的消息。以下是隊列中的錯誤消息無法使用log4j2將消息記錄在activemq中

javax.jms.JMSException:無法從內容構建主體。 可序列化類不可用於代理。原因: 拋出java.lang.ClassNotFoundException: org.apache.logging.log4j.core.impl.Log4jLogEvent $ LogEventProxy

+0

以下是我的Maven dependecy的pom.xml –

+0

\t org.apache.activemq \t 的ActiveMQ,所有 \t 5.9.0 org.apache.logging.log4j log4j-api 2.3 org.apache.logging.log4j log4j的核心 2.3

+0

我也是在控制檯 –

回答

0

由於Log4event被放在隊列中,您可以檢查是否有log4j2罐可用在經紀人結束。

+0

是的,我無法看到activemq jar中的log4j2類文件,如何解決這個問題,這樣如果我在java端使用log4j2登錄,我應該在沒有任何問題的情況下獲取隊列中的消息,由於我們沒有在activemq jar.log裏面有log4j2類,所以我們在activemq jar裏面有log4j1.2類,但是我需要用log4j2來實現!!!!! –

1

你用什麼appender將數據寫入ActiveMQ?我建議不要使用Java序列化來編寫將其序列化爲JSON的日誌事件,而應使用RFC5424佈局或某些在讀取事件時不需要Log4j2 jar的其他格式。

+0

我正在使用jms appender –

+0

JMSAppender允許您使用任何您想要的佈局,但默認使用SerializedLayout。選擇一些對您的用例更好的工作。 – rgoers

0

添加以下罐子從log4j2到ActiveMQ的服務器/ lib目錄,使這項工作

的log4j-API-2.6.1, log4j的核心 - 2.6.1

我只登錄字符串如果我嘗試記錄ObjectMessages,隊列條目將不會在隊列管理器視圖中打開,但JSP失敗。

+0

隊列管理器視圖進程的類路徑中是否有log4j2罐? –

+0

我用下面的鏈接來試圖讓我想被看作ObjectMessages的類。 http://activemq.apache.org/objectmessage.html。我使用http:// localhost:8161/admin/queues.jsp通過Chrome查看隊列。 jar文件需要在哪裏? – EMack