在有关JMS Appender的调查中,我找到了turorial1和tutorial2。我尝试遵循它们,但是无法运行示例程序。
我首先创建了文件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 。但是我认为在ReceiverLogger中也会创建日志并发送日志,因此可能应该在Receiver而不是在项目的其他类中完成。
AspectJ
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
要配置log4j,请使用:-Dlog4j.configuration =配置文件的路径
conf文件的路径可以是:Àfile位于classpath之外的路径中,如果这样,请使用file:///对其进行前缀修复,例如:
在这种情况下,其他在类路径中:
看到:
对于jms:
-将jms.jar至少添加到classpath
问候
菲利普