原文链接:使用Log4j将程序日志实时写入Kafka

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

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

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

使用Log4j将程序日志实时写入Kafka(转)的更多相关文章

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

    第一部分 搭建Kafka环境 安装Kafka 下载:http://kafka.apache.org/downloads.html tar zxf kafka-<VERSION>.tgz c ...

  2. (一个)kafka-jstorm集群实时日志分析 它 ---------kafka实时日志处理

    package com.doctor.logbackextend; import java.util.HashMap; import java.util.List; import java.util. ...

  3. java实时监听日志写入kafka(转)

    原文链接:http://www.sjsjw.com/kf_cloud/article/020376ABA013802.asp 目的 实时监听某目录下的日志文件,如有新文件切换到新文件,并同步写入kaf ...

  4. java实时监听日志写入kafka(多目录)

    目的 实时监听多个目录下的日志文件,如有新文件切换到新文件,并同步写入kafka,同时记录日志文件的行位置,以应对进程异常退出,能从上次的文件位置开始读取(考虑到效率,这里是每100条记一次,可调整) ...

  5. java实时监听日志写入kafka

    目的 实时监听某目录下的日志文件,如有新文件切换到新文件,并同步写入kafka,同时记录日志文件的行位置,以应对进程异常退出,能从上次的文件位置开始读取(考虑到效率,这里是每100条记一次,可调整) ...

  6. 大数据学习day32-----spark12-----1. sparkstreaming(1.1简介,1.2 sparkstreaming入门程序(统计单词个数,updateStageByKey的用法,1.3 SparkStreaming整合Kafka,1.4 SparkStreaming获取KafkaRDD的偏移量,并将偏移量写入kafka中)

    1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Sp ...

  7. flume学习(三):flume将log4j日志数据写入到hdfs(转)

    原文链接:flume学习(三):flume将log4j日志数据写入到hdfs 在第一篇文章中我们是将log4j的日志输出到了agent的日志文件当中.配置文件如下: tier1.sources=sou ...

  8. 【Python】Python日志无延迟实时写入

    我在用python生成日志时,发现无论怎么flush(),文件内容总是不能实时写入,导致程序意外中断时一无所获. 以下是查到的解决方案(亲测可行): open 函数中有一个bufferin的参数,默认 ...

  9. weblogic开启http访问日志并实时写入日志文件

    由于http访问会产生大量日志,耗去不少IO和CPU所以在生产一般是不启用的:但有时我们会想启用http访问日志,尤其是在系统上线调试的时候. weblogic的日志默认在domain_name/se ...

随机推荐

  1. php返回上一页

    echo "<script>alert('没有获取到订单信息');history.go(-1);</script>";

  2. shiro xml标准配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  3. 在VC++中怎样改变控件间的TAB切换顺序?

    在编辑界面按下ctrl+D键,就会出现所有控件的Tab键顺序,按照自己想要的顺序依次点击控件,就可以重新安排顺序.

  4. [lisp] scheme学习2

    1.在scheme中,为了效率,对序对的操作 cons car 和cdr是内部实现的,这里是scheme实现, 其中cons用到了闭包 (define (cons a b) (define (disp ...

  5. Xamarin iOS教程之警告视图

    Xamarin iOS教程之警告视图 Xamarin iOS警告视图 如果需要向用户显示一条非常重要的消息时,警告视图(UIAlertView类)就可以派上用场了.它的功能是把需要注意的信息显示给用户 ...

  6. poj 1511 优先队列优化dijkstra *

    题意:两遍最短路 链接:点我 注意结果用long long #include<cstdio> #include<iostream> #include<algorithm& ...

  7. Spring boot整合jsp

    这几天在集中学习Spring boot+Shiro框架,因为之前view层用jsp比较多,所以想在spring boot中配置jsp,但是spring boot官方不推荐使用jsp,因为jsp相对于一 ...

  8. spring-boot 速成(10) -【个人邮箱/企业邮箱】发送邮件

    发邮件是一个很常见的功能,代码本身并不复杂,有坑的地方主要在于各家邮件厂家的设置,下面以qq个人邮箱以及腾讯企业邮箱为例,讲解如何用spring-boot发送邮件: 一.添加依赖项 compile ' ...

  9. 用Visio画泳道图

    在一次会议中看到有个同事在讲解业务流程时画了一个与PD中很类似的泳道图,但是在图的左侧确有一个阶段的列,事后与他沟通,才知道他这个图是”拼”出来的,也就是说所有的图都是他一点点的在画图工具中做出来的. ...

  10. [原创]Jmeter工具学习思维导图

    [原创]Jmeter工具学习思维导图