Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JMS Appender?_Java_Log4j_Jms - Fatal编程技术网

Java 如何使用JMS Appender?

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

在我对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.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
在这种情况下,类路径中的Else:

  • -Dlog4j.configuration=foobar.lcf,其中foobar.lcf位于源文件夹的根目录下
见:

对于jms:

-至少将jms.jar添加到类路径

  • 确保运行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中),但没有帮助。也许我不明白我该做什么。