使用Log4j扩展发送消息

killme2008 edited this page Mar 8, 2013 · 3 revisions

Metaq还支持log4j发送消息,通过log4j写入的任何日志信息都将以消息的方式发送到Metaq的Broker服务器,只要通过简单的配置就可以。

#依赖

如果要用到log4j扩展,你需要使用client-extenstion的包:

 <dependency>
     <groupId>com.taobao.metamorphosis</groupId>
     <artifactId>metamorphosis-client-extension</artifactId>
     <version>1.4.4</version>
 </dependency>

#配置log4j.properties

 log4j.logger.testLog=info, testMessage
 log4j.additivity.testMessage=false
 log4j.appender.testMessage=com.taobao.metamorphosis.client.extension.log4j.StreamAppender
 log4j.appender.testMessage.topic=meta-test
 log4j.appender.testMessage.zkConnect=127.0.0.1:2181
 log4j.appender.testMessage.EncodeType=1
 log4j.appender.testMessage.BufferedIO=true
 log4j.appender.testMessage.DatePattern='.'yyyy-MM-dd_HH
 log4j.appender.testMessage.File=../../logs/test.log
 log4j.appender.testMessage.layout=org.apache.log4j.PatternLayout
 log4j.appender.testMessage.layout.ConversionPattern=%d{MM-dd HH:mm:ss} - %m%n

最重要的三个参数就是`appendertopiczkConnect`,分别指定使用metaq扩展的log4j appender,设定metaq发送消息的topic以及zookeeper的服务器地址列表。其他log4j相关的参数只是为了提供给log4j,防止错误的产生,不会产生作用。

#使用

在Java代码里使用就很简单了:

static final Log log = LogFactory.getLog("testLog");
log.info("just a test");

默认日志将使用Java序列化成byte[]并发送,这可以通过EncodeType控制,0表示Java序列化,1表示hessian1序列化。