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

相关推荐
java干货8 小时前
优雅停机!Spring Boot 应用如何使用 Hook 线程完成“身后事”?
java·spring boot·后端
tealcwu8 小时前
【Unity技巧】实现在Play时自动保存当前场景
java·unity·游戏引擎
uup8 小时前
Java 多线程下的可见性问题
java
用户8307196840828 小时前
通过泛型限制集合只读或只写
java
Pluchon8 小时前
硅基计划4.0 算法 记忆化搜索
java·数据结构·算法·leetcode·决策树·深度优先
CoderYanger8 小时前
动态规划算法-简单多状态dp问题:18.买卖股票的最佳时机Ⅳ
开发语言·算法·leetcode·动态规划·1024程序员节
大飞哥~BigFei8 小时前
deploy发布项目到国外中央仓库报如下错误Project name is missing
java
白羊无名小猪8 小时前
正则表达式(捕获组)
java·mysql·正则表达式
狂奔小菜鸡8 小时前
Day23 | Java泛型详解
java·后端·java ee
onejson8 小时前
idea中一键执行maven和应用重启
java·maven·intellij-idea