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

相关推荐
MX_935916 小时前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
市场部需要一个软件开发岗位16 小时前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
历程里程碑16 小时前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
程序员泠零澪回家种桔子17 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
CodeCaptain17 小时前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
Anastasiozzzz18 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
骇客野人18 小时前
通过脚本推送Docker镜像
java·docker·容器
铁蛋AI编程实战18 小时前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘18 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
SunnyDays101118 小时前
使用 Java 冻结 Excel 行和列:完整指南
java·冻结excel行和列