文档章节

log4j直接输出日志到flume

cloud-coder
 cloud-coder
发布于 2015/07/06 14:55
字数 469
阅读 12605
收藏 59

log4j直接输出日志到flume

        此jar是由Cloudera的CDH发行版提供的一个工具类,通过配置,可以将log4j的日志直接输出到flume,方便日志的采集。

        在CDH5.3.0版本中是:flume-ng-log4jappender-1.5.0-cdh5.3.0-jar-with-dependencies.jar

        所在目录是:/opt/cloudera/parcels/CDH/lib/flume-ng/tools/

具体使用示例

log4j配置(log4j.properties)

log4j.category.com.xxx=INFO,console,flume
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern="%d{yyyy-MM-dd HH:mm:ss} %p [%c:%L] - %m%n

log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
log4j.appender.flume.Hostname = localhost
log4j.appender.flume.Port = 4444
log4j.appender.flume.UnsafeMode = true
log4j.appender.flume.layout=org.apache.log4j.PatternLayout
log4j.appender.flume.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c:%L] - %m%n

配置classpath

        在classpath中要包含log4j.properties和flume-ng-log4jappender-1.5.0-cdh5.3.0-jar-with-dependencies.jar

编写JAVA测试类并导出为test.jar 

import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class WriteLog {
    protected static final Log logger = LogFactory.getLog(WriteLog.class);


    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        while (true) {
            // 每隔两秒log输出一下当前系统时间戳
            logger.info(new Date().getTime());
            Thread.sleep(2000);
            try {
                throw new Exception("exception msg");
            }
            catch (Exception e) {
                logger.error("error:" + e.getMessage());
            }
        }
    }
}

编写flume agent配置文件

a1.sources = r1
a1.sinks = k1
a1.channels = c1
 
# Describe/configure the source
a1.sources.r1.type = avro
a1.sources.r1.bind = localhost
a1.sources.r1.port = 4444
 
# Describe the sink
a1.sinks.k1.type = file_roll
a1.sinks.k1.sink.directory = /data/soft/flume/tmp
a1.sinks.k1.sink.rollInterval=86400
a1.sinks.k1.sink.batchSize=100
a1.sinks.k1.sink.serializer=text
a1.sinks.k1.sink.serializer.appendNewline = false
 
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 1000
 
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

运行程序

        将相关程序上传到服务器,并先启动agent

        进入flume安装目录后,执行

        bin/flume-ng agent -c conf -f conf/avro.conf --name a1 -Dflume.root.logger=INFO,console

        执行测试程序

        java -classpath ./:flume-ng-log4jappender-1.5.0-cdh5.3.0-jar-with-dependencies.jar:test.jar com.xxx.WriteLog

检查运行结果

        tail -f /data/soft/flume/tmp/1436164166461-1 

2015-07-06 14:51:36 ERROR [com.xxx.WriteLog:27] - error:exception msg
2015-07-06 14:51:36 ERROR [com.xxx.WriteLog:28] - error:stack
2015-07-06 14:51:36 INFO [com.xxx.WriteLog:21] - 1436165496975
2015-07-06 14:51:38 ERROR [com.xxx.WriteLog:27] - error:exception msg
2015-07-06 14:51:38 ERROR [com.xxx.WriteLog:28] - error:stack
2015-07-06 14:51:38 INFO [com.xxx.WriteLog:21] - 1436165498977


© 著作权归作者所有

cloud-coder
粉丝 247
博文 193
码字总数 141277
作品 0
广州
架构师
私信 提问
加载中

评论(4)

0xcafebaby
0xcafebaby

引用来自“gm100861”的评论

博主有试过flume和项目不在同一台机器上吗?比如我的flume在测试机上面搭建.我这边开发环境有一个项目,我项目中的log4j.properties中log4j.appender.flume.Hostname = flumehost
这样指定了,但是flume还是没接到日志,博主有遇到过吗
我这边测试成功了.主要是因为 conf文件写的有问题.你的问题应该就是conf端口绑定的问题
0xcafebaby
0xcafebaby

引用来自“gm100861”的评论

博主有试过flume和项目不在同一台机器上吗?比如我的flume在测试机上面搭建.我这边开发环境有一个项目,我项目中的log4j.properties中log4j.appender.flume.Hostname = flumehost
这样指定了,但是flume还是没接到日志,博主有遇到过吗
我flume的配置绑定ip为 0.0.0.0 我本地可以telnet 不知道你的是不是因为这个导致
0xcafebaby
0xcafebaby

引用来自“gm100861”的评论

博主有试过flume和项目不在同一台机器上吗?比如我的flume在测试机上面搭建.我这边开发环境有一个项目,我项目中的log4j.properties中log4j.appender.flume.Hostname = flumehost
这样指定了,但是flume还是没接到日志,博主有遇到过吗
我也是同样的问题.远程发送的时候 报错 log4j:ERROR Flume append() failed.
g
gm100861
博主有试过flume和项目不在同一台机器上吗?比如我的flume在测试机上面搭建.我这边开发环境有一个项目,我项目中的log4j.properties中log4j.appender.flume.Hostname = flumehost
这样指定了,但是flume还是没接到日志,博主有遇到过吗
使用Apache Flume监控Log4J产生的日志,但是如果日志文件因为容量的原因转储了会如何?

考虑使用Apache Flume监控Log4J产生的日志,也简单了解以一下Flume的原理,发现Flume Agent是利用Tail命令实时收集某一文件上追加的内容来实现的。那么问题来了,如果在两次Tail命令的间隔中...

cuiw
2015/12/22
994
1
【Flume】- 收集 Log4j 日志上送Kafka

Flume 收集 Log4j 日志上送Kafka存储 --- 环境准备 下载Flume: http://flume.apache.org/ 安装: 解压下载包到自定义路径 配置agent 解释: sources: avro 用于接收Log4j日志 interceptors: ...

ZeroneLove
04/10
34
0
Flume NG 学习笔记(一)简介

一、简介 Flume是一个分布式、可靠、高可用的海量日志聚合系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据的简单处理,并写到各种数据接收方的能力。 Flume在0...

jackwxh
2018/06/29
0
0
【Kafka】Kafka的代码实现及与Flume的集成

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/gongxifacai_believe/article/details/86547209 1、Kafka API Kafka分别提供了基于Java和Scala的API,由于Kafka不仅...

魏晓蕾
01/19
0
0
其他消息中间件及场景应用(下3)

版权声明:欢迎转载,但是看在我辛勤劳动的份上,请注明来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) https://blog.csdn.net/yinwenjie/article/details/51516329 目...

yunlielai
2018/04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

XXL-JOB使用命令行的方式启动python时,日志过多导致阻塞的解决方式

一、Runtime.getRuntime().exec()的阻塞问题 这个问题也不能算是XXL-JOB的问题,而是Java的Runtime.getRuntime().exec()造成的,BufferedReader的缓冲区大小有限,当不能及时从缓冲区中把输出...

codeobj
4分钟前
1
0
java后端获取字符串标签里面的具体值

1、如下:怎么获取value值,使用Jsoup解决 <select id='department' name='department' class='select' tabindex='6' onchange='changeDept()'><option value=''>院系</optio......

木九天
11分钟前
2
0
Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型

Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型 OxyPlot组件支持26种图表,这些图表按照功能和样式可以分为4大类,分别为线型图表、条型图表、金融图表和其它图表。 线型图表 OxyP...

大学霸
15分钟前
2
0
移动端input“输入框”常见问题及解决方法

移动端input“输入框”常见问题及解决方法 1. ios中,输入框获得焦点时,页面输入框被遮盖,定位的元素位置错乱: 当页input存在于吸顶或者吸底元素中时,用户点击输入框,输入法弹出后,fie...

tyou
17分钟前
2
0
初探Android线程池

前言 最近在看OkHttp的源码,看的时候发现有关线程池的运用,自己就仔细想了一下,这个块知识好像不是很牢固。没办法,再研究一下有关线程池的相关知识吧。学习就是一个查漏补缺的过程,最终...

二营长的意大利炮手
23分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部