1. 程式人生 > >收集日誌(logback)--》 kafka緩衝佇列之自帶元件Log4jAppender

收集日誌(logback)--》 kafka緩衝佇列之自帶元件Log4jAppender

Flume收集日誌(logback)--》 kafka緩衝佇列--》永久儲存mongodb (三)

 Kafka   2年前 (2015-11-30)  9737℃  3評論

關鍵字:log4j、Kafka、KafkaLog4jAppender

轉載地址:http://lxw1234.com/archives/2015/11/571.htm

很多應用程式使用Log4j記錄日誌,如何使用Kafka實時的收集與儲存這些Log4j產生的日誌呢?一種方案是使用其他元件(比如Flume,或者自己開發程式)實時監控這些日誌檔案,然後傳送至Kafka。而另外一種比較便捷的方案是使用Kafka自帶的Log4jAppender,在Log4j配置檔案中進行相應的配置,即可完成將Log4j產生的日誌實時傳送至Kafka中。

本文以Kafka0.8.2為例,介紹KafkaLog4jAppender的配置方法:

log4j.properties檔案內容如下:

  1. log4j.rootLogger=INFO,console,KAFKA
  2. ## appender KAFKA
  3. log4j.appender.KAFKA=kafka.producer.KafkaLog4jAppender
  4. log4j.appender.KAFKA.topic=lxw1234
  5. log4j.appender.KAFKA.brokerList=brokerNode1:9091,brokerNode2:9092
  6. log4j.appender.KAFKA.compressionType
    =none
  7. log4j.appender.KAFKA.syncSend=true
  8. log4j.appender.KAFKA.layout=org.apache.log4j.PatternLayout
  9. log4j.appender.KAFKA.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%-5p%c{1}:%L %%-%m%n
  10. ## appender console
  11. log4j.appender.console=org.apache.log4j.ConsoleAppender
  12. log4j.appender.console.target=System.err
  13. log4j.appender.console.layout=org.apache.log4j.PatternLayout
  14. log4j.appender.console.layout.ConversionPattern=%d (%t)[%p -%l]%m%n

注意:KAFKA appender的配置引數,和Kafka版本有關,具體引數可參考kafka.producer. KafkaLog4jAppender中的定義。

一個使用了Log4j記錄日誌的Java Application Demo:

  1. package com.lxw1234.kafka;
  2. import org.apache.log4j.Logger;
  3. publicclassTestLog4j2Kafka{
  4. privatestaticLogger logger =Logger.getLogger(TestLog4j2Kafka.class);
  5. publicstaticvoid main(String[] args)throwsInterruptedException{
  6. for(int i =0;i <=10; i++){
  7. logger.info("This is Message ["+ i +"] from log4j producer .. ");
  8. Thread.sleep(1000);
  9. }
  10. }
  11. }

先啟動Kafka自帶的consumer模擬指令碼,消費Topic lxw1234的訊息:

  1. cd $KAFKA_HOME/bin
  2. ./kafka-console-consumer.sh --zookeeper localhost:2181--topic lxw1234 --from-beginning

再執行上面的Java Demo程式,控制檯列印的內容:

log4j kafka

在Consumer控制檯列印消費的訊息:

log4j kafka

如圖所示,KafkaLog4jAppender已經將訊息正常傳送至Kafka。

您可以關注 lxw的大資料田地 ,或者 加入郵件列表 ,隨時接收部落格更新的通知郵件。

如果覺得本部落格對您有幫助,請 贊助作者 。

 (3)個小夥伴在吐槽
  1. log4j.appender.kafka.syncSend=true 這個比較擔心 ,加入kafka 掛掉,同步傳送失敗,業務程序會不會崩潰? false 選項表示嘛意思?有沒有比如1M的緩衝佇列,傳送不成功的就丟棄? 2016-01-15 10:48 回覆
  2. 使用 KafkaLog4jAppender 不需要引入額外的包嗎? 2016-02-16 13:51 回覆
  3. 查了下,應該要引入一下依賴 org.apache.kafka hadoop-producer 0.8.0 2016-02-16 17:35 回覆