kettle使用log4j管理输出日志

在使用kettle进行数据分析和清洗时日志非常多而且杂乱,使用原有的日志有时找不到异常的位置,有时日志不够详细,说简单一点就是日志不是我们想要的。因而对kettle日志进行相应的管理就想得尤为重要了。大家都知道java最常用的日志管理包log4j可以很好地实现java日志的管理,然而kettle是使用java开发的,因而log4j是个不二的选择。好了说了这么多,下面看看kettle怎么使用log4j进行日志的管理吧。

1、kettle加载和使用log4j

在转换的JavaScript中添加log4j的支持

<pre style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; color: rgb(51, 51, 51); word-break: break-all; overflow-wrap: break-word; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); border-radius: 4px;">//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;
}</pre>

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

<pre style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; color: rgb(51, 51, 51); word-break: break-all; overflow-wrap: break-word; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); border-radius: 4px;"><?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></pre>

此处需要注意log4j日志的存放路径,路径由变量${WORKDIR}控制,存放路径为项目根目录下的log目录。

3、测试

运行结果:

<pre data-spm-anchor-id="a2c4e.11153940.0.i2.15797f4a4BAHBk" style="box-sizing: border-box; overflow: auto; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; display: block; padding: 9.5px; margin: 0px 0px 10px; line-height: 1.42857; color: rgb(51, 51, 51); word-break: break-all; overflow-wrap: break-word; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); border-radius: 4px;">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</pre>

注:11年测试的日志文件

版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

kettle作业,转换日志
0.207
2018.08.10 15:11:16
字数 783
阅读 2206
Kettle以文本行的方式输出日志信息,步骤结束时,可以生成下面的一行日志:

2010/06/18 10:36:29 - step name.0 -
Finished processing (I=0,O=0,R=0,W=25,U=0,E=0)
这个日志行里有以下主要内容:

日期和时间。
步骤名,步骤名的后面有一个点号,点号后面是步骤的拷贝号。
日志内容。
4.每个部分之间都使用空格、横线、空格来分割。
作业,转换的日志基本
行级日志:打印出Kettle里所有可用的日志信息,包括在一些比较复杂的步骤里的每一行数据。
调试日志:也打印出很多日志信息,但没有到每一行数据都打印出来的级别。
详细日志:比基本日志多一些日志内容,如多了SQL查询语句和DDL语句等。
基本日志:默认的日志级别,只打印出执行到哪个步骤和作业项的日志信息。
最小日志:只打印出执行到哪个转换和作业的日志信息。
错误日志:只打印出错误日志,如果没有错误也不打印日志。
无日志:不打印任何日志,即使有错误也不打印。
日志架构
实际上中心缓存里保存了以下内容:

日期和时间:让Spoon在日志窗口用蓝色显示日志的日期和时间。
日志级别:让Spoon在日志窗口用红色显示错误行。
递增的唯一编号:Kettle对不同日志窗口或者远程日志抽取分配的递增的编号。
日志文本内容:实际的日志文本内容。
日志通道ID:这个ID是随机生成的唯一字符串,用来唯一标识生成日志行的Kettle组件。
把日志保存在内存里是导致内存溢出的一个主要的原因。当你执行一个作业或转换而且日志级别设置的比较高时,在执行过程中就会产生大量日志。如果你要求Kettle把这些日志信息存储在日志表里,那么这些日志信息就会暂时保存在内存里,最后就会发生内存溢出问题。
设置缓存大小
限制日志数量通常想到的第一个方法就是设置缓存大小。可以在Spoon的“选项”对话框里设置这个参数。在对话框里的“日志窗口的最大行数”输入框里设置。要注意该选项只在Spoon里有效
另一个选择就是设置KETTLE_MAX_LOG_SIZE_IN_LINES环境变量。可以在kettle.properties文件里设置这个环境变量。
最后,也可以在Carte的配置文件中设置这个参数。例如在服务器的配置XML文件中加入下面的配置行,将中心日志缓存的大小设置为10000行:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,953评论 0 6
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,928评论 1 13
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一、L...
    enshunyan阅读 3,272评论 0 0
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,689评论 0 3
  • 我会自己好好的, 自己想要的自己给自己。 不依靠其他人。 不靠谱,不可靠,不真实。
    return_to_zero阅读 225评论 0 1