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年测试的日志文件

时间: 2024-10-11 06:11:52

kettle使用log4j管理输出日志的相关文章

Log4j指定输出日志的文件

在Log4j的配置文件中,有一个log4j.rootLogger用于指定将何种等级的信息输出到哪些文件中, 这一项的配置情况如下: log4j.rootLogger=日志等级,输出目的地1,输出目的地2,... 日志等级可以是ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF,一般主要都是使用DEBUG, INFO, WARN, ERROR这四项. 指定日志等级后,可以指定日志输出的目的地,这个目的地可以是任意的符合命名规则的名字,给出这些名字后,会在后面对这些名

log4j分级输出日志文件

关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的 [java] view plain copy log4j.rootLogger=info,stdout,info,debug,error log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayo

使用slf4j + log4j.properties 输出日志 到 控制台 和 执行文件

-- log4j.properties内容如下,将该文件放入 src/main/resource下,如下图: ### 设置rootLogger : 将debug及其更高level的日志输出到 控制台 和 指定路径文件 ### log4j.rootLogger = debug,stdout,file ### 输出信息到控制台 ### ### 控制台输出 log4j.appender.stdout = org.apache.log4j.ConsoleAppender ### 默认是system.ou

log4j直接输出日志到flume

log4j.properties配置: log4j.rootLogger=INFOlog4j.category.com.besttone=INFO,flumelog4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppenderlog4j.appender.flume.Hostname = localhostlog4j.appender.flume.Port = 44444 log4j.appender.flume.

springboot配置Log4j(将输出日志打印在控制台)

在springboot整合mybatis开发过程中,配置Log4j文件以便查看Mybatis操作数据库的过程 编辑器:IDEA 第一步:pom.xml中引入依赖(mybatis依赖和log4j2依赖) 如下: #在spring-boot-starter-web中自动配置了logging依赖,在使用Log4j时需要先排除其依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g

Log4j按级别输出日志到不同文件配置

1.自定义LogFileAppender类,继承DailyRollingFileAppender,实现Log4j按级别输出日志到不同文件. package com.liying.mango.common.interceptor; import org.apache.log4j.DailyRollingFileAppender; import org.apache.log4j.Priority; public class LogFileAppender extends DailyRollingFi

【转】kettle 的内存设置及输出日志的时间类型

本文转载自:http://blog.csdn.net/dqswuyundong/archive/2010/10/19/5952004.aspx 设置kettle的内存 REM ******************************************************************REM ** Set java runtime options                                     **REM ** Change 256m to high

【转】Log4j按级别输出日志到不同文件配置分析

关于LOG4J 按照级别输出日志,并按照级别输出到不同文件中的说法有很多, 网上贴的最多的log4j.properties的设置是这样的 log4j.rootLogger=info,stdout,info,debug,error log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdou

log4j输出日志乱码(转)

log4j日志文件乱码问题的解决方法 log4j日志文件中文乱码处理方法 log4j 控制台和文件输出乱码问题解决 写在前面,第三篇文章中将原因解释的最清楚,为什么设置为UTF-8或者GBK就生效了,原因是类文件的编码和输入日志的编码必须一致,否则就会出现乱码. 转:log4j日志文件乱码问题的解决方法 近日在AIX上用log4j打印日志,出现乱码,经过努力解决问题. 症状:在默认语言非中文(或者说默认语言不支持中文的)的Windows.Linux.Unix上,用log4j打印日志,出现乱码,常