欢迎来到天天文库
浏览记录
ID:16415219
大小:144.70 KB
页数:4页
时间:2018-08-09
《logback+jms用法小结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、logback+jms用法小结一.背景介绍1.Logback想必大家都很熟悉,作为jms的协议提供者之一的activeMQ,项目中也在频繁的使用。如果对这两者还存在用法上的疑问,请先google之。2.之前的日志采集方式,我们采取随项目随物理机器分而存之的方式,这种方式的好处便是可以使日志的来源很清晰,但是随着项目的不断变大,总有一天,这种每台机器查一次的方式会成为开发人员调试和查找问题的累赘,于是,集中收集日志便有了其生存之所。3.日志的采集与分析向来是兵家必争之地,而其中兵器可谓五花八门,各种采集方式都会有其适合的生存场景。Liao童鞋给我们介绍的scribe便是其中的杰出一员,而我们这次
2、采用logback+jms的方式,来处理这一问题。二.具体应用1.关于logback:logback的其他配置,我们在各个项目中均已经见识过。下面重点介绍有关jms方面的配置和用法。下面来稍加解释。1)Appender:想必大家都不会陌生,这里我们使用JMSQueueAppender。2)InitialContextFactoryName:因为activeMQ在jndi环境中公布其地址,所以jndi中默认用于查找jms目标和连接工厂的配置即为,org.apache.activemq.jndi.ActiveMQInitialContextFactory。3)Providerurl:用于配置标准c
3、onnector。即需要使用的activeMQ的队列地址。4)QueueConnectionFactoryBindingName,连接工厂BindingName5)QueueBindingName:队列于jndi中的BindingName6)Filter:用来过滤log内容。当然也可以将这一步转移至consumer中处理。需要说明的一点是,如果我们要使该配置生效,需要显示的在jndi环境中增加配置,因为进入到logback源码ch.qos.logback.classic.net.JMSQueueAppender与ch.qos.logback.core.net.JMSAppenderBase4、>这两个方法即为JMSAppender构建jndi的InitialContext的方法,我们并未看到QueueConnectionFactoryBindingName和QueueBindingName的方法的出现,所以推测必须要经过手动声明,才可在jndi环境中使用jmsappender。此处为activeMQ在jndi环境中配置的官方支持文档,用法也很明确。经试验,该方法可行。Ps:此种方法亦可以在jndi环境中获取得到队列名称。如此便可省去jndi.properties配置文件。1.关于activeMQProducer已经由logback-jms自动生成,我们只需要关心comsumer即可5、。(具体配置可参考jms包中的大量标准配置)。根据这段代码得知,ch.qos.logback.classic.spi.LoggingEvent类,便为producer的send方法内填充内容,所以只需要在consumer中将其取出即可。System.out.println(((LoggingEvent)((ObjectMessage)message.getObject())).getMessage());将其打印至控制台,即看到了我们的日志内容。作者:刘钰2010-03-14
4、>这两个方法即为JMSAppender构建jndi的InitialContext的方法,我们并未看到QueueConnectionFactoryBindingName和QueueBindingName的方法的出现,所以推测必须要经过手动声明,才可在jndi环境中使用jmsappender。此处为activeMQ在jndi环境中配置的官方支持文档,用法也很明确。经试验,该方法可行。Ps:此种方法亦可以在jndi环境中获取得到队列名称。如此便可省去jndi.properties配置文件。1.关于activeMQProducer已经由logback-jms自动生成,我们只需要关心comsumer即可
5、。(具体配置可参考jms包中的大量标准配置)。根据这段代码得知,ch.qos.logback.classic.spi.LoggingEvent类,便为producer的send方法内填充内容,所以只需要在consumer中将其取出即可。System.out.println(((LoggingEvent)((ObjectMessage)message.getObject())).getMessage());将其打印至控制台,即看到了我们的日志内容。作者:刘钰2010-03-14
此文档下载收益归作者所有