Java 如何使用JMS Appender?
在我对JMS附加器的研究中,我发现并使用了。我试着跟随他们,但我无法运行示例程序 首先,我创建了log4j.properties文件Java 如何使用JMS Appender?,java,log4j,jms,Java,Log4j,Jms,在我对JMS附加器的研究中,我发现并使用了。我试着跟随他们,但我无法运行示例程序 首先,我创建了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.log
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
topic.logTopic=logTopic
和jndi.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
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();
}
}
}
我需要makereceiver来收集项目中的所有日志,但我甚至不能运行这个简单的示例。可能我不知道如何正确配置它,因为我得到以下输出:
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
类中设置了记录器。但是我认为在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
要配置log4j,请使用:
-Dlog4j.configuration=配置文件的路径
conf文件的路径可以是:
À文件位于类路径之外的路径中,如果是这样,请使用file:///修复它,例如:
- -Dlog4j.configuration=文件:/c:/foobar.lcf
- -Dlog4j.configuration=foobar.lcf,其中foobar.lcf位于源文件夹的根目录下
- 确保运行JMS代理(例如activemq)
Philippe在使用记录器之前,您是否验证是否调用了方法
setProperties()
通常,只有在通过propertyconfigulator
初始化log4j时找不到配置文件(log4j.properties)时,或者在使用propertyconfigulator
初始化log4j之前尝试记录某些内容时,才会弹出这种错误
首先,您应该确保setProperties()
的调用方式与您期望的调用方式相同,如果可以,您可以尝试验证是否可以加载配置。据我所见,我想应该可以找到您的配置文件。要验证这一点,您可以分几个步骤加载配置,以确保找到:
Properties props = new Properties();
props.load( new FileInputStream( "log4j.properties" ) );
PropertyConfigurator.configure( props );
如果找不到您的配置,您将收到一个
FileNotFoundException
您需要将log4j.properties移动到'src'文件夹下,这样它就会包含在类路径中,因为它不在那里,所以不会被加载。这个警告只是说您没有正确设置log4j。这不是代码不工作的原因。@CoolBeans正如我所说的,它可能没有配置,所以你是对的。我的问题是:如何配置它。不是源代码?在哪里/如何?您能帮忙吗?请将代码张贴在初始化记录器的位置,以及属性文件的位置?@ftom2我编辑了我的问题。这两个文件都在主项目文件夹中。当你说在主项目文件夹中时,你的意思是在“src”下?另外,我指的是执行Logger Logger=Logger.getLogger(“someLogger”)
的代码。我已经将activemq-all-5.60.jar
添加到类路径中,并在控制台中运行activemq
。你能更详细地解释一下添加配置吗?我在参数中添加了-Dlog4j.configuration=log4j.properties
(在eclipse中),但没有帮助。也许我不明白我该做什么。