java - 如何使用JMS附加组件?

  显示原文与译文双语对照的内容

我在对JMS的研究中发现了 turorial1tutorial2. 我试图跟踪它们,但我无法运行示例程序。

Fistly我创建了文件 log4j.properties


log4j.rootLogger=INFO, stdout, jms

#
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

#
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

还有 jndi.properties


topic.logTopic=logTopic

然后我在我的项目中添加了 Receiver.java


public class Receiver implements MessageListener {

 public Receiver() throws Exception {
 ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
 Connection conn = factory.createConnection();
 Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
 conn.start();
 MessageConsumer consumer = sess.createConsumer(sess.createTopic("logTopic"));
 consumer.setMessageListener(this);
 Logger log = Logger.getLogger(Receiver.class);

 log.info("Test log");

 Thread.sleep(1000);
 consumer.close();
 sess.close();
 conn.close();
 System.exit(1);
 }

 public static void main(String[] args) throws Exception {
 new Receiver();
 }

 @Override
 public void onMessage(Message message) {
 try {
//receive log event in your consumer
 LoggingEvent event = (LoggingEvent)((ActiveMQObjectMessage)message).getObject();
 System.out.println("Received log [" + event.getLevel() +"]:"+ event.getMessage());
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
}

我需要让Receiver收集来自项目的所有日志,但我甚至无法运行这个简单的示例。 可能我不知道如何正确配置它,因为我得到了以下输出:


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

在代码中添加一些行或者将某些文件添加到类路径中时我是否错过了? 我是 Log4J的新手。

编辑:我在 AspectJ 类中设置 Logger 。 但是我认为 Receiver 记录器中也创建了日志并发送了日志,所以可能应该在 Receiver 中完成,而不是在我的项目中的其他。


static final Logger logger = Logger.getLogger(ReportingAspect.class);

@Before("setLoggingFile()")
public void setProperties() {
 PropertyConfigurator.configure("log4j.properties");
}

ProjectJMS
|
_ src
| _ packages...
_jndi.propeties
_log4j.properties

时间: 原作者:

...