收集日誌(logback)--》 kafka緩衝佇列之自帶元件Log4jAppender
阿新 • • 發佈:2019-01-10
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檔案內容如下:
- log4j.rootLogger=INFO,console,KAFKA
- ## appender KAFKA
- log4j.appender.KAFKA=kafka.producer.KafkaLog4jAppender
- log4j.appender.KAFKA.topic=lxw1234
- log4j.appender.KAFKA.brokerList=brokerNode1:9091,brokerNode2:9092
- log4j.appender.KAFKA.compressionType
- log4j.appender.KAFKA.syncSend=true
- log4j.appender.KAFKA.layout=org.apache.log4j.PatternLayout
- log4j.appender.KAFKA.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%-5p%c{1}:%L %%-%m%n
- ## appender console
- log4j.appender.console=org.apache.log4j.ConsoleAppender
- log4j.appender.console.target=System.err
- log4j.appender.console.layout=org.apache.log4j.PatternLayout
- log4j.appender.console.layout.ConversionPattern=%d (%t)[%p -%l]%m%n
注意:KAFKA appender的配置引數,和Kafka版本有關,具體引數可參考kafka.producer. KafkaLog4jAppender中的定義。
一個使用了Log4j記錄日誌的Java Application Demo:
- package com.lxw1234.kafka;
- import org.apache.log4j.Logger;
- publicclassTestLog4j2Kafka{
- privatestaticLogger logger =Logger.getLogger(TestLog4j2Kafka.class);
- publicstaticvoid main(String[] args)throwsInterruptedException{
- for(int i =0;i <=10; i++){
- logger.info("This is Message ["+ i +"] from log4j producer .. ");
- Thread.sleep(1000);
- }
- }
- }
先啟動Kafka自帶的consumer模擬指令碼,消費Topic lxw1234的訊息:
- cd $KAFKA_HOME/bin
- ./kafka-console-consumer.sh --zookeeper localhost:2181--topic lxw1234 --from-beginning
再執行上面的Java Demo程式,控制檯列印的內容:
在Consumer控制檯列印消費的訊息:
如圖所示,KafkaLog4jAppender已經將訊息正常傳送至Kafka。
您可以關注 lxw的大資料田地 ,或者 加入郵件列表 ,隨時接收部落格更新的通知郵件。
如果覺得本部落格對您有幫助,請 贊助作者 。
(3)個小夥伴在吐槽- log4j.appender.kafka.syncSend=true 這個比較擔心 ,加入kafka 掛掉,同步傳送失敗,業務程序會不會崩潰? false 選項表示嘛意思?有沒有比如1M的緩衝佇列,傳送不成功的就丟棄? 2016-01-15 10:48
- 使用 KafkaLog4jAppender 不需要引入額外的包嗎? 2016-02-16 13:51
- 查了下,應該要引入一下依賴 org.apache.kafka hadoop-producer 0.8.0 2016-02-16 17:35