分享

flume学习(一):log4j直接输出日志到flume

xioaxu790 2014-10-13 19:18:51 发表于 连载型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 62916
问题导读

1、如何让log4j直接输出日志到flume?
2、如何写一个简单的测试类来测试呢?
3、如何看到log4j的日志是否输出到了flume中?





log4j.properties配置:
  1. log4j.rootLogger=INFO
  2. log4j.category.com.besttone=INFO,flume
  3. log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
  4. log4j.appender.flume.Hostname = localhost
  5. log4j.appender.flume.Port = 44444
  6. log4j.appender.flume.UnsafeMode = true
复制代码



需要将/opt/cloudera/parcels/CDH-5.0.0-1.cdh5.0.0.p0.47/lib/flume-ng/tools/flume-ng-log4jappender-1.4.0-cdh5.0.0-jar-with-dependencies.jar添加到classpath下。
然后可以写一个简单的测试类来测试一下:
  1. package com.besttone.flume;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.apache.commons.logging.Log;  
  6. import org.apache.commons.logging.LogFactory;  
  7.   
  8. public class WriteLog {  
  9.     protected static final Log logger = LogFactory.getLog(WriteLog.class);  
  10.   
  11.     /**
  12.      * @param args
  13.      * @throws InterruptedException  
  14.      */  
  15.     public static void main(String[] args) throws InterruptedException {  
  16.         // TODO Auto-generated method stub  
  17.         while (true) {  
  18.         //每隔两秒log输出一下当前系统时间戳  
  19.             logger.info(new Date().getTime());  
  20.             Thread.sleep(2000);  
  21.         }  
  22.     }  
  23. }  
复制代码



然后写一个run.sh脚本运行这个类:
  1. #!/bin/bash  
  2. jarlist=`ls ./lib/*.jar`  
  3. CLASSPATH='./bin/'  
  4. for jar in ${jarlist}  
  5. do  
  6.    CLASSPATH=${CLASSPATH}:${jar}  
  7. done  
  8. echo ${CLASSPATH}  
  9.   
  10. java -classpath "$CLASSPATH" com.besttone.flume.WriteLog &
复制代码


执行run.sh,将sink设置为logger,去flume的日志文件里去看,可以看到log4j的日志输出已经传输到了flume中:
  1. 2014-07-16 14:23:54,193 INFO org.apache.flume.sink.LoggerSink: Event: { headers:{flume.client.log4j.log.level=20000, flume.client.log4j.message.encoding=UTF8, flume.client.log4j.logger.name=com.besttone.flume.WriteLog, flume.client.log4j.timestamp=1405491834189} body: 31 34 30 35 34 39 31 38 33 34 31 38 39          1405491834189 }
复制代码


相关文章:

flume学习(二):如何找到cm安装的flume的配置文件


flume学习(三):Flume Interceptors的使用


flume学习(四):Flume Channel Selectors使用




已有(3)人评论

跳转到指定楼层
itcareerist 发表于 2014-10-16 11:18:58
agent必须要在本机吗?我这边提示:
2014-10-16 10:58:19.520 [DEBUG] [id: 0x2c70a182, /10.30.30.118:54929 :> /192.168.0.202:41414] DISCONNECTED(org.apache.avro.ipc.NettyTransceiver:handleUpstream:575)[New I/O worker #1]
2014-10-16 10:58:39.472 [DEBUG] Disconnecting from hadoop2/192.168.0.202:41414(org.apache.avro.ipc.NettyTransceiver:handleUpstream:575)[New I/O worker #1]
回复

使用道具 举报

hahaxixi 发表于 2014-10-24 11:25:38
see see,try try~~~~~
回复

使用道具 举报

末世七年 发表于 2016-5-30 11:35:08
这个方案好像没有办法将错误的堆栈信息也发送到flume,有什么解决方案吗?还是得自定义才能解决
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条