kettle使用log4j管理輸出日志


  在使用kettle進行數據分析和清洗時日志非常多而且雜亂,使用原有的日志有時找不到異常的位置,有時日志不夠詳細,說簡單一點就是日志不是我們想要的。因而對kettle日志進行相應的管理就想得尤為重要了。大家都知道java最常用的日志管理包log4j可以很好地實現java日志的管理,然而kettle是使用java開發的,因而log4j是個不二的選擇。好了說了這么多,下面看看kettle怎么使用log4j進行日志的管理吧。

1、kettle加載和使用log4j

在轉換的JavaScript中添加log4j的支持

//Script here
//updateOuputLog();
//confFile  日志配置文件路徑
//增加日志輸出文件
//通過/../conf/log.xml文件配置日志輸出
function updateOutputLog(confFile){
   var first = getVariable("FIRST_TIME_UPDATE_LOG", "true");
   if(first == "true"){
       logWriter = org.pentaho.di.core.logging.LogWriter.getInstance();
       var softPath = getThisSoftPath();
       setVariable("WORKDIR", softPath, "s");//設置日志路徑變量
       var logConf = softPath + "/../conf/log.xml";
       if(confFile != null && confFile != ""){
          logConf = softPath + "/" + confFile;
       }else{
          if(!fileExists(logConf)){
              logConf = softPath + "/log.xml";
          }
          if(!fileExists(logConf)){
              logConf = softPath + "/conf/log.xml";
          }
       }
       writeToLog("m", "======logConfPath====>"+logConf);
       org.apache.log4j.xml.DOMConfigurator.configure(logConf);
       var logger = org.apache.log4j.Logger.getLogger("kettle_log");
       var appenders = logger.getAllAppenders();
       while(appenders.hasMoreElements()){
          var appender = appenders.nextElement();
          writeToLog("m", "======add==log====>"+appender.getName());
          logWriter.addAppender(appender);
       }
       setVariable("FIRST_TIME_UPDATE_LOG", "false", "r");
   }
}

//Alert(getThisSoftPath());
//返回程序所在目錄 不帶前綴file:
function getThisSoftPath(){
    var osName = java.lang.System.getProperty("os.name").toLowerCase();
    var path = getVariable("Internal.Transformation.Filename.Directory", "");
    if(osName.indexOf("windows") >= 0){//WINDOWS系統
        path = path.substring(8);
    }else{
        path = path.substring(7);
    }
    return path;
}

function getConfigPath(softDir,confPath,splitStr){
    var arr = confPath.split(splitStr);
    var str = softDir+arr[0];
    for(var i=1; i<arr.length; i++){
       var s = new java.lang.String(arr[i]);
       if(arr[i] != null && s.endsWith("properties")){
           str = str + splitStr + softDir+ arr[i];
       }
    }
    //Alert(str);
    return str;
}

2、准備log4j配置文件log.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="kettle_info" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="threshold" value="info" />
        <param name="File" value="${WORKDIR}/../log/run.log" />
        <param name="DatePattern" value="'.'yyyy-MM-dd" />
        <param name="Append" value="true" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p (%F:%L) -> %m%n" />
        </layout>
    </appender>
    <appender name="kettle_error" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="threshold" value="error" />
        <param name="File" value="${WORKDIR}/../log/error.log" />
        <param name="DatePattern" value="'.'yyyy-MM-dd" />
        <param name="Append" value="true" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p (%F:%L) -> %m%n" />
        </layout>
    </appender>
    <logger name="kettle_log">
        <appender-ref ref="kettle_info" />
        <appender-ref ref="kettle_error" />
    </logger>
</log4j:configuration>

此處需要注意log4j日志的存放路徑,路徑由變量${WORKDIR}控制,存放路徑為項目根目錄下的log目錄。

3、測試

  運行結果:

2011-06-08 09:50:28,897 INFO  (LogWriter.java:450) -> 設置默認配置文件.0 - ======add==log====>kettle_error
2011-06-08 09:50:28,897 INFO  (LogWriter.java:450) -> 設置默認配置文件.0 - 增加配置日志成功
2011-06-08 09:50:28,912 INFO  (LogWriter.java:450) -> 設置默認配置文件.0 - E:/test/src/../conf/config_static.properties
2011-06-08 09:50:28,912 INFO  (LogWriter.java:450) -> 設置默認配置文件.0 - 完成處理 (I=0, O=0, R=1, W=1, U=1, E=0
2011-06-08 09:50:28,943 INFO  (LogWriter.java:450) -> 拆分路徑 2.0 - 完成處理 (I=0, O=0, R=1, W=1, U=1, E=0
2011-06-08 09:50:28,943 INFO  (LogWriter.java:450) -> 讀取配置文件.0 - 配置文件:TO_DB_PWD1=test
2011-06-08 09:50:28,943 INFO  (LogWriter.java:450) -> 配置文件輸入.0 - 完成處理 (I=20, O=0, R=1, W=20, U=20, E=0
2011-06-08 09:50:28,943 INFO  (LogWriter.java:450) -> 讀取配置文件.0 - 配置文件:DEST_DB_UNAME2=test

 注:11年測試的日志文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM