如何去除Pentaho Data Integration 9中kitchen执行产生的大量无用日志行
这个问题我之前帮同行排查过,本质是PDI 9(也就是Pentaho Data Integration 9.x)引入了基于Karaf的OSGi架构,命令行工具(kitchen/pan)在Linux环境下启动时会完整加载Karaf容器的日志配置,而Windows的Spoon GUI因为启动方式不同,没有触发这部分冗余日志输出。下面是具体的解决步骤:
1. 修改Karaf核心日志配置文件
PDI 9的Karaf配置文件位于data-integration/karaf/etc/org.ops4j.pax.logging.cfg,这是控制Karaf相关组件日志的核心文件:
- 找到所有以
log4j2.logger.*开头的配置项,比如针对org.apache.karaf、org.ops4j、org.eclipse这类集成库的日志级别设置,把默认的INFO改成WARN或者ERROR:log4j2.logger.karaf.name = org.apache.karaf log4j2.logger.karaf.level = WARN log4j2.logger.karaf.additivity = false - 如果你不需要任何Karaf相关日志,甚至可以把级别设为
OFF,彻底屏蔽这部分输出。
2. 强制Kitchen使用PDI主日志配置
Linux下运行kitchen时,可以通过启动参数强制指定PDI的主日志配置文件,避免加载Karaf的默认配置:
在运行kitchen的命令中添加系统属性参数:
./kitchen.sh -file=/path/to/your/job.kjb -Dlog4j.configurationFile=/path/to/data-integration/log4j2.xml
或者直接修改kitchen.sh脚本,在JAVA_OPTS变量里加入这个参数,这样每次运行都会自动生效:
JAVA_OPTS="$JAVA_OPTS -Dlog4j.configurationFile=${BASEDIR}/log4j2.xml"
3. 调整PDI主日志配置文件
打开PDI安装目录下的data-integration/log4j2.xml(如果是旧版9.x可能是log4j.xml),添加专门针对冗余日志来源的过滤配置:
<Logger name="org.apache.karaf" level="WARN" additivity="false"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Logger> <Logger name="org.ops4j.pax" level="WARN" additivity="false"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Logger> <Logger name="org.eclipse.equinox" level="WARN" additivity="false"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Logger>
这个配置会直接把这些集成库的日志级别降到WARN,只输出重要的警告和错误信息。
4. 检查是否启用了Karaf调试模式
有时候Linux环境下的kitchen脚本可能被误配置了调试参数,检查kitchen.sh里有没有类似-Dkaraf.debug=true的设置,如果有的话改成false或者直接删除,调试模式会输出大量额外的容器启动日志。
完成上述配置后,重新运行Kitchen,你会发现日志行数回到了和PDI 7类似的水平,那些来自Karaf的无用日志会被彻底屏蔽。
内容的提问来源于stack exchange,提问作者SlimFilter

