You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否根据运行时选择的LogLevel调整Pentaho转换功能?

在PDI转换中运行时访问日志级别(LogLevel)的方法

完全可以在PDI运行时访问日志级别并据此调整流程,PDI默认确实没有将LogLevel暴露到Internal.*或KETTLE_*这类内置变量中,但可以通过以下两种常用方法实现:

方法一:通过Java脚本步骤直接获取转换的日志级别

PDI的转换对象(Trans)内置了日志级别相关的API,你可以在Java脚本步骤中直接调用获取,然后将结果存入字段供后续步骤判断:

import org.pentaho.di.trans.Trans;
import org.pentaho.di.core.logging.LogLevel;
import org.apache.commons.lang3.ArrayUtils;

// 获取当前转换实例
Trans currentTrans = (Trans) getTrans();
// 获取日志级别枚举对象
LogLevel logLevel = currentTrans.getLogLevel();
// 提取日志级别描述字符串(如"DEBUG"、"BASIC")
String logLevelStr = logLevel.getDescription();

// 将日志级别作为新字段添加到输出行中
data.outputRowMeta.addValueMeta(new ValueMetaString("CURRENT_LOG_LEVEL"));
Object[] newRow = ArrayUtils.add(data.row, logLevelStr);
putRow(data.outputRowMeta, newRow);

执行这个步骤后,后续可以用过滤记录步骤设置条件(比如CURRENT_LOG_LEVEL = "DEBUG"),将数据流分流:符合条件的走额外处理分支(如日志写入、记录转储),不符合的走正常执行流程。

方法二:通过作业传递日志级别到转换

如果你的转换是由PDI作业(Job)调用的,可以先在作业中获取日志级别,再通过自定义变量传递给转换:

  1. 在作业中添加Java脚本步骤,获取作业的日志级别并设置为变量:
import org.pentaho.di.job.Job;
import org.pentaho.di.core.logging.LogLevel;

Job currentJob = (Job) getJob();
String jobLogLevel = currentJob.getLogLevel().getDescription();
// 设置自定义环境变量
setVariable("JOB_LOG_LEVEL", jobLogLevel);
  1. 在作业的转换任务配置中,勾选“传递所有变量”选项,这样转换就能通过${JOB_LOG_LEVEL}访问到日志级别变量,后续同样可以用过滤步骤实现分支逻辑。

这两种方法都能满足你的需求,其中方法一更适合独立运行的转换,方法二更适合作业调度下的转换场景。

内容的提问来源于stack exchange,提问作者Rownum Highart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 16:42:19