kettle pentaho log4j 日志记录

42 篇文章 6 订阅

kettle pentaho log4j 日志记录

版本:kettle 4.1

需求描述:

使用java集成kettle插件,执行脚本时,控制台可以显示kettle和调用类的日志,但是日志文件却只能显示调用类的日志,kettle日志不显示。

需求分析:

分析发现 kettle-engine.jar包中有一个log4j.xml,其中仅包含CONSOLE 这一个appender;
提取log4j.xml文件,然后在其中新增一个DailyRollingFileAppender,然后在java中引用该appender,问题解决。

完整代码:

1、log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<!-- ===================================================================== -->
<!-- -->
<!-- Log4j Configuration -->
<!-- -->
<!-- ===================================================================== -->

<!-- $Id: log4j.xml,v 1.1.2.4 2005/10/06 23:05:58 bill Exp $ -->

<!-- | For more configuration infromation and examples see the Jakarta Log4j 
    | owebsite: http://jakarta.apache.org/log4j -->

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
    debug="false">

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <param name="Threshold" value="INFO" />
        <param name="encoding" value="utf-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss} - %m%n" />
        </layout>
    </appender>

    <!-- 文件日志 -->
    <appender name="etl-core" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="logs/etl-core.log" />
        <param name="Threshold" value="INFO" />
        <param name="encoding" value="utf-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss} - %m%n" />           
        </layout>
    </appender>

    <category name="org.pentaho">
        <priority value="DEBUG"/>
    </category>

    <category name="com.healthmarketscience.jackcess">
        <priority value="WARN" />
    </category>

    <category name="org.apache.commons.httpclient">
        <priority value="WARN" />
    </category>

    <category name="org.mortbay">
        <priority value="ERR" />
    </category>

    <category name="java.net">
        <priority value="NONE" />
    </category>

    <category
        name="org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient">
        <priority value="WARN" />
    </category>

    <category
        name="org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient.auth">
        <priority value="WARN" />
    </category>

    <root>
        <priority value="info" />
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="etl-core" />
    </root>

</log4j:configuration>

2、java代码

import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;
import org.pentaho.di.core.DBCache;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleXMLException;
import org.pentaho.di.core.logging.LogLevel;
import org.pentaho.di.core.logging.LogWriter;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;

/**
 * @description Kettle Api 调用示例
 * @author hury
 */

public class EtlExample {
    static Logger logger = Logger.getLogger(EtlExample.class);

    public static void init() {

        try {
            KettleEnvironment.init();
            DBCache.getInstance();
            LogWriter.getInstance().addAppender(Logger.getRootLogger().getAppender("etl-core"));
        } catch (KettleException e) {
            logger.error("初始化kettle环境异常。");
            e.printStackTrace();
        }

    }

    public static void runJob(String jobname) {
        try {
            // jobname 是Job脚本的路径及名称
            JobMeta jobMeta = new JobMeta(jobname, null);
            Job job = new Job(null, jobMeta);
            job.setLogLevel(LogLevel.DEBUG);
            // 向Job 脚本传递参数,脚本中获取参数值:${参数名}
            // job.setVariable(paraname, paravalue);
            job.start();
            job.waitUntilFinished();
            if (job.getErrors() > 0) {
                logger.error("runJob fail!");
            }
        } catch (KettleException e) {
            logger.error(e);
        }
    }

    // 调用Transformation示例:
    public static void runTrans(String filename) {
        try {
            // 外部参数
            Map<String, String> ps = new HashMap<String, String>();
            ps.put("jgid", "参数1");
            ps.put("jgmc", "参数2");

            // 调用ktr脚本
            TransMeta transMeta = new TransMeta(filename);

            for (String key : ps.keySet()) {
                String value = ps.get(key);
                transMeta.setParameterValue(key, value);
            }

            Trans trans = new Trans(transMeta);
            trans.prepareExecution(null);
            trans.startThreads();
            trans.waitUntilFinished();
            if (trans.getErrors() != 0) {
                logger.error("Error");
            }
        } catch (KettleXMLException e) {
            e.printStackTrace();
        } catch (KettleException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        init();
        // String jobname = "config/test/test.kjb";
        // runJob(jobname);
        logger.info("start etl");
        String filename = "config/test/test_ktr.ktr";
        runTrans(filename);
        logger.info("over");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值