如何使用JMS追加程序?(How to use JMS Appender?)

2019-07-30 19:41发布

Inmy有关JMS附加目的地的研究,我发现turorial1和tutorial2 。 我试着跟随他们,但我不能运行示例程序。

Fistly我创建的文件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();
        }
    }
}

我需要做接收机从项目收集所有日志,但我甚至无法运行这个简单的例子。 也许我不知道如何正确地配置它,因为我得到这样的输出:

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

Answer 1:

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

路径的conf文件可以是:在类路径之外的路径文件,如果是用文件的前缀是:///,例如:

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

否则,在这种情况下的类路径:

  • -Dlog4j.configuration = foobar.lcf其中foobar.lcf是在源文件夹的根

看到:

  • http://logging.apache.org/log4j/1.2/manual.html

为JMS:

-add jms.jar至少类路径

  • 确保你运行一个JMS代理(ActiveMQ的举例)

问候

菲利普



Answer 2:

你需要移动log4j.properties下的“SRC”文件夹,以便它会被包含在类路径,因为它不存在它没有被加载。



Answer 3:

您确认,您的方法setProperties()被调用你用你的记录之前?

通常这类型的错误,只弹出,既可以当同时通过初始化log4j的未找到配置文件(log4j.properties) PropertyConfigurator ,或者你试过你与你的log4j初始化之前登录的东西PropertyConfigurator

首先你应该确保,即setProperties()被调用,你希望它被调用,如果这应该工作,你可以尝试验证如果配置可加载的方式。 从我所看到的,我猜你的配置文件应该被发现。 为了验证这一点,你可以加载几个步骤的配置以确保,人们发现:

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

如果您的配置将不会被发现,你会收到一个FileNotFoundException



文章来源: How to use JMS Appender?
标签: java log4j jms