关于 “文档注释”

用于 logger sink 的 log4j.properties 配置


今天在使用 logger sink 测试自定义拦截器的时候,遇到了 ”控制台没显示日志“ 的问题


但翻看 Flume 的日志文件,又能看到自定义的拦截器其实已经正常工作了,只是 logger sink 没输出日志

1.png
1

可能是因为 logger sink 较少使用,基本只会拿来做测试,所以网上也没找到相关资料

  1. 然后找了个之前写的,单纯测试 netcat source + logger sink 的 Agent ,发现也是一样的问题(而之前测试的时候不存在这个问题)。

  2. 回想之前测试和这次测试的差异,想到可能是因为做了调优,修改了 $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 这种细节😂)
    • 这两条配置都不像是会导致这个问题的样子
  3. 索性不用 --conf /opt/servers/flume-1.9.0/conf 参数测试一下

    • 咦,好了。这下可以完全确定是配置文件引起的了
    • 眼尖的同学可能注意到了,这个参数并不是指向某一个具体的配置文件,而是指向整个配置文件目录。既然 flume-env.sh 文件中的配置不像会导致这个问题,那么也许是其他配置文件引起的
  4. 检查该目录下的文件,除了 flume-env.sh 和三个模板文件,就剩下一个 log4j.properties 文件,正好 log4j 就是用来实现日志记录功能的,于是就重点排查这个文件

    • 草草看了一遍,没看出来什么问题(这块不熟)
    • 把这个文件改名为 log4j.properties.bak ,再次添加 --conf /opt/servers/flume-1.9.0/conf 参数执行 Agent ,测试功能正常,这下能 100% 确定是这个文件造成的问题了
  5. 问题有了新进展

    • 翻了一遍官方文档的相关部分,没找到相关说明
    • 使用新的关键词组合进行互联网检索:flumelogger sinklog4jlog4j.properties ,尝试不同组合,都没找到相关的结果(确实 logger sink 没什么应用场景)
  6. 再回过头看 log4j.properties 文件,发现一句可能相关的注释:

    • # Add “console” to flume.root.logger above if you want to use this

    • 于是改改看:

    • 2.png
      1
  7. 结果好了😆


  • 在不使用 --conf /opt/servers/flume-1.9.0/conf 参数的时候
    • Flume 使用缺省配置启动 Agent ,JDK 应该是从环境变量获取
  • 使用了 --conf /opt/servers/flume-1.9.0/conf 参数之后
    • 会加载 flume-env.shlog4j.properties 文件的配置(覆盖缺省参数)来启动 Agent
    • 如果启动的 Agent 使用了的 sink 类型是 logger ,由于 log4j.properties 文件的默认配置只启用了 log4j.appender.LOGFILE 这一个 appender(且称之为 “追加器” 吧),只会把日志往日志文件里面写,不会显示到控制台上
    • 这拓展了本 X 对 logger sink 的认识
      • 本以为只是简单地把消息显示到控制台
      • 实际上不但可以显示到控制台,还可以写入日志文件,还可以通过不同的 appender( “追加器” )实现不同的输出(虽然也没什么其他大用途,有其他类型的 sink 可以用)
  • 解决方法如上

相关内容