flume的log4j日志无输出排查

1. 背景

用作采集日志的flume程序,突然发现没有有效的日志输出,改$FLUME_HOME/conf/log4j.properties下面的配置,在命令行里面加日志级别的控制参数,都没有日志输出。

2. 解决过程记录

2.1 步骤1

在进程的启动参数里面加上如下参数:

bash 复制代码
-Dlog4j.debug=true

在日志输出内容中,找以下内容:

复制代码
log4j: Trying to find [log4j.properties] using context classloader...
log4j: Using URL [log4j的文件路径] for configuration.

最后发现输出:

复制代码
log4j: Trying to find [log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@65b54208.
log4j: Using URL [file:/xxxx/hadoop/etc/hadoop/log4j.properties] for automatic log4j configuration.
log4j: Reading configuration from URL file:/xxxx/hadoop/etc/hadoop/log4j.properties

即它的log4j日志文件路径引用错误,引入了hadoop的日志配置文件。

2.2 步骤2

它为什么会引入Hadoop下面的log4j.properties

用ps -ef|grep 查看进程的实际启动命令会发现它其中有这么一段:

复制代码
-cp 'conf:/xcloud/flume-1.9.0/lib/*:/xcloud/hadoop/etc/hadoop:...

-cp命令是指定class-path,log4j.properties就放在conf目录下,可这里运行flume的路径位置是FLUME_HOME/bin目录下,显然这样指定相对目录,它会是指定到$FLUME_HOME/bin/conf,显然是不对的。

查看flume_ng脚本,也会发现能正确定位conf的目录配置时,它会把启动时-c或-conf指定的路径转化为绝对路径,加入到-cp中,显然这里因为没有找到conf相对路径,而没有改成绝对位置。

2.3 步骤3

解决方法

方法1:这里-c命令之后用绝对路径引入conf,避免程序启动位置对它造成影响

相关推荐
银河系的一束光4 小时前
tomcat问题
1024程序员节
weixin_445476684 小时前
Vue 项目全局水印功能完整实现指南
vue·vue2·1024程序员节
黄毛火烧雪下4 小时前
【居中】相对定位 + 绝对定位 或 Flexbox 居中
1024程序员节
Samuel-Gyx4 小时前
数据结构--顺序表与链表
数据结构·算法·链表·1024程序员节
板鸭〈小号〉4 小时前
应用层自定义协议与序列化
运维·服务器·网络·1024程序员节
柳鲲鹏4 小时前
多种方法:OpenCV中修改像素RGB值
前端·javascript·opencv·1024程序员节
wanhengidc4 小时前
传奇手游可以使用云手机挂机搬砖吗
服务器·arm开发·智能手机·玩游戏·1024程序员节
吴禅染4 小时前
爱思唯尔期刊投稿经验
1024程序员节
MATLAB代码顾问4 小时前
MATLAB 实现基于短时傅里叶变换 (STFT) 的音频信号时频分析与可视化
1024程序员节