微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

使用Log4j将程序日志实时写入Kafka

Kafka lxw1234@qq.com 33718℃ 4评论

关键字:log4j、Kafka、KafkaLog4jAppender

很多应用程序使用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=none
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;

public class TestLog4j2Kafka {
	 private static Logger logger = Logger.getLogger(TestLog4j2Kafka.class);
	 
	 public static void main(String[] args) throws InterruptedException {
		 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程序,控制台打印的内容:

log4j kafka

在Consumer控制台打印消费的消息:

log4j kafka

如图所示,KafkaLog4jAppender已经将消息正常发送至Kafka。

您可以关注 lxw的大数据田地 ,或者 加入邮件列表 ,随时接收博客更新的通知邮件。

如果觉得本博客对您有帮助,请 赞助作者

转载请注明:lxw的大数据田地 » 使用Log4j将程序日志实时写入Kafka

喜欢 (30)
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(4)个小伙伴在吐槽
  1. log4j.appender.kafka.syncSend=true 这个比较担心 ,加入kafka 挂掉,同步发送失败,业务进程会不会崩溃? false 选项表示嘛意思?有没有比如1M的缓冲队列,发送不成功的就丢弃?
    poboy2016-01-15 10:48 回复
  2. 使用 KafkaLog4jAppender 不需要引入额外的包吗?
    xiezefan2016-02-16 13:51 回复
  3. 查了下,应该要引入一下依赖 org.apache.kafka hadoop-producer 0.8.0
    xiezefan2016-02-16 17:35 回复
  4. 請問作者,有試過kafka關閉後,log4j 配置還是不變,AP Server重啟後,有發生咬住,無法順利啟動之情形嗎?
    hostname2020-08-20 17:08 回复