kafka利用log4j输出日志到哪里
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka利用log4j输出日志到哪里相关的知识,希望对你有一定的参考价值。
参考技术A 引言前段时间写的《Spring+Log4j+ActiveMQ实现远程记录日志——实战+分析》得到了许多同学的认可,在认可的同时,也有同学提出可以使用Kafka来集中管理日志,于是今天就来学习一下。
特别说明,由于网络上关于Kafka+Log4j的完整例子并不多,我也是一边学习一边使用,因此如果有解释得不好或者错误的地方,欢迎批评指正,如果你有好的想法,也欢迎留言探讨。
第一部分 搭建Kafka环境
安装Kafka
下载:http://kafka.apache.org/downloads.html
?
1
2
tar zxf kafka-<VERSION>.tgz
cd kafka-<VERSION>
启动Zookeeper
启动Zookeeper前需要配置一下config/zookeeper.properties:
接下来启动Zookeeper
?
1
bin/zookeeper-server-start.sh config/zookeeper.properties
启动Kafka Server
启动Kafka Server前需要配置一下config/server.properties。主要配置以下几项,内容就不说了,注释里都很详细:
然后启动Kafka Server:
?
1
bin/kafka-server-start.sh config/server.properties
创建Topic
附上出处链接:http://my.oschina.net/itblog/blog/540918本回答被提问者采纳
如何收集项目日志统一发送到kafka中?
上一篇( )写了收集sparkstreaming的日志进入kafka便于后续收集到es中快速统计分析,今天就再写一篇如何在普通应用程序实时收集日志,上一篇写的毕竟是分布式环境下的操作,有一定的特殊性,如MapReduce,运行的日志和普通项目的日志是不太一样的。
所谓的普通程序就是web项目的或者非web项目的的程序,大部分都是单机版本的。
大多数时候,我们的log都会输出到本地的磁盘上,排查问题也是使用命令来搞定,如果web程序组成负载集群,那么就有多台机器,如果有几十台机器,几十个服务,那么想快速定位log问题和排查就比较麻烦了,所以很有必要有一个统一的平台管理log,现在大多数公司的套路都是收集重要应用的log集中到kafka中,然后在分别导入到es和hdfs上,一个做实时检索分析,另一个做离线统计和数据备份。
如何能快速收集应用日志到kafka中?
方法一:
kafka官网已经提供了非常方便的log4j的集成包 kafka-log4j-appender,我们只需要简单配置log4j文件,就能收集应用程序log到kafka中。
注意,需要引入maven的依赖包:
非常简单,一个maven依赖加一个log4j配置文件即可,如果依然想写入log到本地 文件依然也是可以的,这种方式最简单快速,但是默认的的log日志是一行一行的纯文本,有些场景下我们可能需要json格式的数据。
方法二:
重写Log4jAppender,自定义输出格式,支持json格式,如果是json格式的数据打入到kafka中,后续收集程序可能就非常方便了,直接拿到json就能入到或者es中,如果打入到kafka中的数据是纯文本,那么收集程序,可能需要做一些etl,解析其中的一些字段然后再入到es中,所以原生的输出格式,可能稍不灵活,这样就需要我们自己写一些类,然后达到灵活的程度,github连接:
感兴趣的朋友可以看下。
总结:
(1)方法一简单快速,不支持json格式的输出,打到kafka的消息都是原样的log日志信息
(2)方法二稍微复杂,需要自己扩展log收集类,但支持json格式的数据输出,对于想落地json数据直接到存储系统中是非常适合的。
此外需要注意,在调试的时候log发送数据到kafka模式最好是同步模式的否则你控制台打印的数据很有可能不会被收集kafka中,程序就停止了。生产环境最好开启异步发送数据模式,因为内部是批量的处理,所以能提升吞吐,但有一定的轻微延迟。
官网log4j-appender的源码:
以上是关于kafka利用log4j输出日志到哪里的主要内容,如果未能解决你的问题,请参考以下文章