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

相关推荐
吴声子夜歌31 分钟前
Java面试——Spark原理及应用(二)
java·面试·spark
吴声子夜歌43 分钟前
Java面试——Spark原理及应用(一)
java·面试·spark
慧一居士2 小时前
ThreadLocal 功能及使用场景介绍,使用详解
java
zh73142 小时前
typephp的编译核心phpx原理解析
android·java·开发语言
2401_894915534 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
Java牛马8 小时前
SpringBoot Starter 依赖相关总结
java·spring·springboot·starter·自动装配·依赖
吴声子夜歌8 小时前
Java面试——Spring Cloud原理及应用(二)
java·spring cloud·面试
东小西9 小时前
【SAA实战】第 1 篇:ReactAgent 入门——先撸个"会调工具的助手"跑起来
java·人工智能·spring
mqiqe10 小时前
AgentScope Java 2.0 协议集成全景解析:A2A、AG-UI、Agent Protocol 三大开放协议实战指南
java·开发语言·ui
脉动数据行情10 小时前
Java 实现台股 TWSE/TPEx 行情采集(个股 + K 线)
java·开发语言·twse·tpex·台股