关于 “文档注释”
目录
用于 logger sink 的 log4j.properties 配置
1 遇到的问题
今天在使用 logger sink 测试自定义拦截器的时候,遇到了 ”控制台没显示日志“ 的问题
2 排错过程
但翻看 Flume 的日志文件,又能看到自定义的拦截器其实已经正常工作了,只是 logger sink 没输出日志
可能是因为 logger sink 较少使用,基本只会拿来做测试,所以网上也没找到相关资料
-
然后找了个之前写的,单纯测试
netcat source
+logger sink
的 Agent ,发现也是一样的问题(而之前测试的时候不存在这个问题)。 -
回想之前测试和这次测试的差异,想到可能是因为做了调优,修改了
$FLUME_HOME/conf/flume-env.sh
文件,并在执行 Agent 的时候添加了--conf /opt/servers/flume-1.9.0/conf
参数。- 检查
flume-env.sh
文件(与原始文件备份对比),只有两条配置,一条是 JDK ,另一条是今天调优加的:export JAVA_OPTS="-Xms100m -Xmx100m -Dcom.sun.management.jmxremote"
(不要在意 100M 这种细节😂)
- 这两条配置都不像是会导致这个问题的样子
- 检查
-
索性不用
--conf /opt/servers/flume-1.9.0/conf
参数测试一下- 咦,好了。这下可以完全确定是配置文件引起的了
- 眼尖的同学可能注意到了,这个参数并不是指向某一个具体的配置文件,而是指向整个配置文件目录。既然
flume-env.sh
文件中的配置不像会导致这个问题,那么也许是其他配置文件引起的
-
检查该目录下的文件,除了
flume-env.sh
和三个模板文件,就剩下一个log4j.properties
文件,正好 log4j 就是用来实现日志记录功能的,于是就重点排查这个文件- 草草看了一遍,没看出来什么问题(这块不熟)
- 把这个文件改名为
log4j.properties.bak
,再次添加--conf /opt/servers/flume-1.9.0/conf
参数执行 Agent ,测试功能正常,这下能 100% 确定是这个文件造成的问题了
-
问题有了新进展
- 翻了一遍官方文档的相关部分,没找到相关说明
- 使用新的关键词组合进行互联网检索:
flume
、logger sink
、log4j
、log4j.properties
,尝试不同组合,都没找到相关的结果(确实logger sink
没什么应用场景)
-
再回过头看
log4j.properties
文件,发现一句可能相关的注释:-
# Add “console” to flume.root.logger above if you want to use this
-
于是改改看:
-
-
结果好了😆
3 结论
- 在不使用
--conf /opt/servers/flume-1.9.0/conf
参数的时候- Flume 使用缺省配置启动 Agent ,JDK 应该是从环境变量获取
- 使用了
--conf /opt/servers/flume-1.9.0/conf
参数之后- 会加载
flume-env.sh
和log4j.properties
文件的配置(覆盖缺省参数)来启动 Agent - 如果启动的 Agent 使用了的
sink
类型是logger
,由于log4j.properties
文件的默认配置只启用了log4j.appender.LOGFILE
这一个 appender(且称之为 “追加器” 吧),只会把日志往日志文件里面写,不会显示到控制台上 - 这拓展了本 X 对
logger sink
的认识- 本以为只是简单地把消息显示到控制台
- 实际上不但可以显示到控制台,还可以写入日志文件,还可以通过不同的 appender( “追加器” )实现不同的输出(虽然也没什么其他大用途,有其他类型的 sink 可以用)
- 会加载
- 解决方法如上