java调用kettle,使用logback或log4j管理日志

问题简述

java调用kettle脚本,详细日志只能在控制台打印,不能直接输出到log文件。
由于kettle相关资料比较少,没找到合适的,暂时通过简单添加几行代码,实现了kettle运行日志打印输出至log文件。
使用的日志框架是logback,使用log4j 或其他日志框架,使用该方法也可以实现。

java调用kettle脚本,主要使用以下3个jar包

<dependency>
	<groupId>pentaho-kettle</groupId>
	<artifactId>kettle-core</artifactId>
	<version>7.1.0.1-34</version>
</dependency>
<dependency>
	<groupId>pentaho-kettle</groupId>
	<artifactId>kettle-engine</artifactId>
	<version>7.1.0.1-34</version>
</dependency>
<dependency>
	<groupId>pentaho</groupId>
	<artifactId>metastore</artifactId>
	<version>7.1.0.1-34</version>
</dependency>

一个调用的简单示例

/**
 * kettle测试
 *
 * @author Juveniless
 * @create 2020-12-04 22:42
 **/
@Slf4j
public class KettleTest1 {

  public static void main(String[] args) throws Exception {
    String path = "D:\\workspaces\\idea\\git\\EHR_DOCS\\报告.ktr";
    System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
    KettleEnvironment.init();
    JobMeta jobMeta = new JobMeta(path, null);
    Job job = new Job(null, jobMeta);
    job.start();
    job.waitUntilFinished();
    if (job.getErrors() > 0) {
      System.out.println("执行job发生异常:" + job.getResult().toString());
    }
  }
}

查看 org.pentaho.di.job.Job类的源码。new Job(null, jobMeta)构造方法调用如下构造方法
在这里插入图片描述
在构造方法中执行this.log = new LogChannel(this, parentLogging);
后续打印log操作,均使用此log实例打印

在这里插入图片描述

查看 LogChannel源码

在这里插入图片描述
在这里插入图片描述

LogChannel内所有打印log的方法,均调用``println(LogMessageInterface logMessage, LogLevel channelLogLevel)方法实现,
在这里插入图片描述

入参 LogMessageInterface代码如下,可以获取到日志信息与日志等级
在这里插入图片描述

修改代码

取到了日志内容和等级,添加打印日志的代码即可,主要修改2处代码

  1. LogChannel 中添加打印日志逻辑

在这里插入图片描述

  1. 修改 println 方法
    在这里插入图片描述

  2. 之后将修改后的java文件编译为class文件替换回jar包即可

如何修改和替换

  1. 在idea中新建 org.pentaho.di.core.logging.LogChannel.java

在这里插入图片描述

  1. kettle-core-7.1.0.1-34.jar 包中,找到 LogChannel的源代码,复制粘贴过来,然后修改即可

  2. 修改完毕,编译项目,在idea 项目 target/classes 下找到LogChannel.class文件

在这里插入图片描述

使用 解压缩软件打开 kettle-core-7.1.0.1-34.jar,定位到kettle-core-7.1.0.1-34.jar\org\pentaho\di\core\logging ,将LogChannel.class拖入,替换,保存即可。
在这里插入图片描述

  1. 在 idea项目中 删除新建的 LogChannel.java文件,在 resources 目录下新建jar文件夹,将修改后的 kettle-core-7.1.0.1-34.jar 拖入,然后在maven的pom文件中,注释掉原先的 kettle-core,添加新的坐标,引入修改后的jar即可
    在这里插入图片描述
<!--<dependency>
            <groupId>pentaho-kettle</groupId>
            <artifactId>kettle-core</artifactId>
            <version>7.1.0.1-34</version>
        </dependency>-->


        <!-- 2021-03-12-该jar包修改过代码,用于将kettle的运行日志使用logback输出至log文件 -->
        <dependency>
            <groupId>pentaho-kettle</groupId>
            <artifactId>kettle-core</artifactId>
            <version>7.1.0.1-34</version>
            <scope>system</scope>
            <systemPath>
                ${basedir}/src/main/resources/jar/kettle-core-7.1.0.1-34.jar
            </systemPath>
        </dependency>
  1. 最终效果

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值