java - 如何使用JMS Appender?

标签 java log4j jms

在我关于 JMS Appenders 的研究中我发现了 turorial1tutorial2 。我尝试遵循它们,但无法运行示例程序。

首先我创建了文件 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 中创建了 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

最佳答案

要配置 log4j 使用: -Dlog4j.configuration=配置文件路径

conf 文件的路径可以是: À 文件位于 classpath 之外的路径中,如果是,则使用 file:///作为前缀,例如:

  • -Dlog4j.configuration=文件:/c:/foobar.lcf

在这种情况下,类路径中的其他内容:

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

参见:

对于 jms:

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

  • 确保您有一个正在运行的 JMS 代理(例如 activemq)

问候

菲利普

关于java - 如何使用JMS Appender?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11830415/

相关文章:

java - 关于 Solace 属性何时有效的困惑

java - Selenium WebDriver 没有通过 XPATH 找到元素

log4j - 如何在 ADempiere 的日志文件中跟踪日志详细信息

java - Log4j2:如何指定要保留的最大副本数?

java - 带有 HornetQ 的 JBoss 7 中 JMS 队列的 'durable' 属性的含义是什么?

java - 使用来自 JMS 主题的消息时出现延迟

java - ByteArrayInputStream() 显示 null

java - KafkaStreams 在读取主题时写入磁盘

java排序如果包含然后按abc

logging - 如何在Weblogic服务器中使用log4j