【问题标题】:How to use JMS Appender?如何使用 JMS Appender?
【发布时间】:2012-08-07 04:16:04
【问题描述】:

我发现了 turorial1tutorial2 对 JMS Appenders 的研究。我尝试关注他们,但我无法运行示例程序。

我首先创建了文件 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 的新手。

编辑: 我将 Logger 设置为 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。这不是代码不起作用的原因。
  • @CoolBeans 正如我所说,它可能没有配置,所以你是对的。我的问题是:如何配置它。不在源代码中?在哪里/如何?你能帮忙吗?
  • 请将初始化记录器的代码贴在哪里,以及属性文件放在哪里?
  • @ftom2 我编辑了我的问题。这两个文件都在主项目文件夹中。
  • 当你说在主项目文件夹中时,你的意思是在'src'下?我的意思也是你做Logger logger = Logger.getLogger("someLogger")的代码。

标签: java log4j jms


【解决方案1】:

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

配置文件的路径可以是: À 文件在 classpath 之外的路径中,如果是这样,请使用 file:/// 前缀,例如:

  • -Dlog4j.configuration=file:/c:/foobar.lcf

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

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

见:

对于jms:

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

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

问候

菲利普

【讨论】:

  • 我已将activemq-all-5.60.jar 添加到类路径,并在我的控制台中运行activemq。您能否更详细地解释添加配置?我在参数中添加了-Dlog4j.configuration=log4j.properties(在 Eclipse 中),但它没有帮助。可能我误解了我应该做什么。
【解决方案2】:

您需要将 log4j.properties 移动到 'src' 文件夹下,以便将其包含在类路径中,因为它不存在,因此不会被加载。

【讨论】:

    【解决方案3】:

    您是否验证过,您的方法 setProperties() 在您使用记录器之前已被调用?

    通常这种错误只会在PropertyConfigurator初始化log4j时找不到配置文件(log4j.properties),或者你在用PropertyConfigurator初始化log4j之前尝试记录一些东西。

    首先您应该确保setProperties() 的调用方式与您期望的调用方式相同,如果这可行,您可以尝试验证是否可以加载配置。从我所看到的,我想应该找到你的配置文件。要验证这一点,您可以分几个步骤加载配置以确保已找到:

      Properties props = new Properties();
      props.load( new FileInputStream( "log4j.properties" ) );
      PropertyConfigurator.configure( props );
    

    如果找不到您的配置,您将收到FileNotFoundException

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      相关资源
      最近更新 更多