关于JMS Appenders的Inmy研究我发现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.
我是否错过了在代码或某些文件中添加一些行到classpath?我是log4j的新手。
编辑:
我在AspectJ
课程中设置了Logger。但我认为同样在Receiver
Logger中创建并发送日志,所以可能应该在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
答案 0 :(得分:1)
配置log4j使用: -Dlog4j.configuration =配置文件的路径
conf文件的路径可以是: À文件在类路径之外的路径中,如果是这样,请使用file:///进行修复,例如:
在那种情况下,在类路径中:
请参阅:
对于jms:
- 至少将jms.jar添加到classpath
此致
菲利普
答案 1 :(得分:1)
你需要移动'src'文件夹下的log4j.properties,这样它才会被包含在类路径中,因为它没有被加载。
答案 2 :(得分:0)
您是否验证过,在使用记录器之前调用了方法setProperties()
?
通常只有在PropertyConfigurator
初始化log4j时找不到配置文件(log4j.properties),或者在用{{1}初始化log4j之前尝试记录某些内容时,才会弹出那种错误}}
首先,您应该确保PropertyConfigurator
被调用的方式是您希望它被调用的方式,如果这应该有效,您可以尝试验证是否可以加载配置。从我看到的,我猜你应该找到你的配置文件。要验证这一点,您可以通过几个步骤加载配置,以确保找到它:
setProperties()
如果找不到您的配置,您将收到 Properties props = new Properties();
props.load( new FileInputStream( "log4j.properties" ) );
PropertyConfigurator.configure( props );
。