2012-08-06 2 views
1

this example을 따르려고했지만이 클래스를 프로젝트에 복사 할 때 실행하지 못했습니다.Log4j JMS appender 예제

eclipse에서 많은 옵션을 제안했기 때문에 필자의 가져 오기가 어떻게 생겼는지 잘 모르겠습니다. 나는

import javax.jms.Connection; 
import javax.jms.Message; 
import javax.jms.MessageConsumer; 
import javax.jms.MessageListener; 
import javax.jms.Session; 

import org.apache.activemq.ActiveMQConnectionFactory; 
import org.apache.activemq.command.ActiveMQObjectMessage; 
import org.apache.log4j.Logger; 
import org.apache.log4j.spi.LoggingEvent; 

을 시도하지만 내가 가지고 :

log4j:WARN No appenders could be found for logger (org.apache.activemq.transport.tcp.TcpTransport). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

이 튜토리얼 나를 위해 명확하지 않다. 더 자세한 내용을 아는 사람이 있습니까 (절대적으로 초심자에게)? 아니면이 예외로 내 문제를 해결하는 방법을 알고 있습니까?

편집 :

log4.properties 난 당신이 구성 log4j.properties 파일을 당신의 문제가 있다고 생각 예를

log4j.rootLogger=INFO, stdout, jms 

## Be sure that ActiveMQ messages are not logged to 'jms' appender 
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 

## 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 
+0

log4j.properties 파일을 표시 할 수 있습니까? –

+0

@trebuchet log4j 초기화가 실패했습니다. 루트 로거에서 jms appender를 제거하여 테스트하십시오. 단일 클래스에 대해서만 jms appender를 구성하고 거기에 로깅을 확인하십시오. –

답변

1

에서 파일의 정확한 복사본입니다. 조심해 구성하십시오.

<appender name="amqAppender" class="com.appender.JMSQueueAppender"> 
     <param name="brokerUri" value="failover:(tcp://host1:port,tcp://host2:port,tcp://host3:port)?randomize=false" /> 
     <param name="queueName" value="MobiviteQueue" /> 
</appender> 

그리고 그것을 사용하는 - 아래와 같이 JMSAppender 클래스에 대한 항목을 의 log4j.xml에서 - 당신은 예를 들어 구글과 구성 log4j에 대한 튜토리얼이는 테스트 코드 this

+0

'log4j.properties' 파일을 추가했는데 예제와 같은 파일 복사본입니다. 그것은 틀릴 수 있 었는가? – alicjasalamon

+0

Btw 나는 그것을 구글하려고 노력했다. 하지만 그다지 간단하지 않습니다. (예 : 자습서에서 JMSAppender는 전혀 언급하지 않았습니다.) – alicjasalamon

+0

지금이 사례를 반복하려고합니다. –

1

보면 찾을 시도 할 수 있습니다 -

<root> 
    <level value="ERROR" /> 
    <appender-ref ref="amqAppender" /> 
</root> 

그리고 appeneder 클래스입니다 -

package com.appender; 

import javax.jms.DeliveryMode; 
import javax.jms.Destination; 
import javax.jms.MessageProducer; 
import javax.jms.ObjectMessage; 
import javax.jms.Session; 

import org.apache.activemq.ActiveMQConnectionFactory; 
import org.apache.log4j.Appender; 
import org.apache.log4j.AppenderSkeleton; 
import org.apache.log4j.Logger; 
import org.apache.log4j.spi.LoggingEvent; 


public class JMSQueueAppender extends AppenderSkeleton implements Appender { 

private static Logger logger = Logger.getLogger(JMSQueueAppender.class); 

private String brokerUri; 
private String queueName; 


@Override 
protected synchronized void append(LoggingEvent event) { 

    try { 
     //System.out.println("JMSQueueAppender -----append method is called brokerUri ------ "+brokerUri); 
     ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUri); 

     // Create a Connection 
     javax.jms.Connection connection = connectionFactory.createConnection(); 
     connection.start(); 

     // Create a Session 
     Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

     // Create the destination (Topic or Queue) 
     Destination destination = session.createQueue(queueName); 

     // Create a MessageProducer from the Session to the Topic or Queue 
     MessageProducer producer = session.createProducer(destination); 
     producer.setDeliveryMode(DeliveryMode.PERSISTENT); 

     ObjectMessage message = session.createObjectMessage(event); 

     // Tell the producer to send the message 
     producer.send(message); 
     // Clean up 
     session.close(); 
     connection.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 



public String getBrokerUri() { 
    return brokerUri; 
} 



public void setBrokerUri(String brokerUri) { 
    this.brokerUri = brokerUri; 
} 



public String getQueueName() { 
    return queueName; 
} 



public void setQueueName(String queueName) { 
    this.queueName = queueName; 
} 



     public void close() { 
     // TODO Auto-generated method stub 

     } 

     public boolean requiresLayout() { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 
관련 문제