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,避免程序启动位置对它造成影响

相关推荐
Han.miracle17 分钟前
Java EE --JUC
java·线程池·原子类·callable·semaphore·reentrantlcok
那我掉的头发算什么19 分钟前
【javaEE】多线程——线程安全初阶☆☆☆
java·jvm·安全·java-ee·intellij-idea
yzp-36 分钟前
Zookeeper 笔记
java·分布式·zookeeper
蜡笔大新7981 小时前
IDEA中的异常
java·ide·intellij-idea
金融小师妹1 小时前
基于多源政策信号解析与量化因子的“12月降息预期降温”重构及黄金敏感性分析
人工智能·深度学习·1024程序员节
后端小张1 小时前
【JAVA 进阶】Spring Boot 注解体系与工程实践
java·开发语言·spring boot·后端·spring·spring cloud·java-ee
9号达人1 小时前
接口设计中的扩展与组合:一次Code Review引发的思考
java·后端·面试
百***62851 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
键来大师1 小时前
Android15 源码关闭Selinux
android·java·framework·rk3588
合作小小程序员小小店2 小时前
桌面开发,在线%日记本,日历%系统开发,基于eclipse,jdk,java,无数据库
java·数据库·eclipse·jdk