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年测试的日志文件
kettle使用log4j管理输出日志的更多相关文章
- 使用log4j无法输出日志
前段时间在项目的过程中使用log4j来输出日志,但是在一个项目里我明明已经在src/main/resource目录下创建了log4j.properties.具体配置如下: log4j.rootLogg ...
- log4j配置输出日志文件
在测试程序时,有时候运行一次可能需要很久,把日志文件保存下来是很有必要的,本文给出了scala程序输出日志文件的方式,同时使用本人的另一篇博客中介绍的将log4j.properties放到程序jar包 ...
- log4j不输出日志错误分析
1.rootLogger不输出 代码如下: 配置文件代码: log4j.rootLogger=info, R,userLog log4j.appender.R=org.apache.log4j.Rol ...
- log4j直接输出日志到flume
log4j.properties配置: log4j.rootLogger=INFOlog4j.category.com.besttone=INFO,flumelog4j.appender.flume ...
- Log4j指定输出日志的文件
在Log4j的配置文件中,有一个log4j.rootLogger用于指定将何种等级的信息输出到哪些文件中, 这一项的配置情况如下: log4j.rootLogger=日志等级,输出目的地1,输出目的地 ...
- 排查log4j不输出日志到文件的问题
问题描述 项目使用Spring Boot框架,在pom文件中添加了如下配置: <dependency> <groupId>org.slf4j</groupId> & ...
- log4j不输出日志的解决方案
参考:http://blog.csdn.net/qq994406030/article/details/53433159 主要是log4j.properties log权限和log输出方式没配好.
- Log4j按级别输出日志到不同文件配置
1.自定义LogFileAppender类,继承DailyRollingFileAppender,实现Log4j按级别输出日志到不同文件. package com.liying.mango.commo ...
- log4j日志优先级导致的不输出日志
在sae部署微信代码的时候,发现它的默认日志很不友好,看起来很费劲,详细看了一下说明发现它可以根据log4j的输出级别而分类输出,就拖了一个log4j的xml文件扔进项目代码,然后部署运行,发现没有日 ...
随机推荐
- 转:浅谈CSS在前端优化中一些值得注意的关键点
前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...
- Java设计模式-原型模式(Prototype)
原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象.这就是选型模式的用意. 原型模式的结构 原型模式要求对象实现一个可以“克 ...
- dispatch_sync may result in dead-lock
以下代码会引起死锁 dispatch_block_t block = ^{ ; i < ; i++) { NSLog(@"dispatch_sync:%d", i); } } ...
- NOI题库
07:机器翻译 总时间限制: 1000ms 内存限制: 65536kB 描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个 ...
- Alpha阶段个人总结
一. 工作总结 第一次接触通信和服务端框架,在前期准备阶段学习了很多不同的技术,也相应花费了很多时间去尝试.刚开始时还不知道框架这种东西,准备自己写,于是学习并尝试了一些简单的HTTP通信,比较麻烦, ...
- jQuery的插入
append(content) 概述 : 向每个匹配的元素内部追加内容. 这个操作与对指定的元素执行appendChild方法,将它们添加到文档中的情况类似 append(function(index ...
- Android学习笔记03-搭建Win8下的Android开发环境
一 配置环境变量 (绿色文字标出代码,路径换为自己的SDK路径) ANDROID_HOME = C:\software\adt-bundle-windows-x86_64-20140702\sdk ...
- Swift开发学习-03 Swift技巧
一 两个数字交换算法 1.算法1 func swap(inout num1:int , inout num2:int){ num1 = num1 ^ num2 ; num2 = num1 ^ num2 ...
- C#实现自动升级(附源码)
http://blog.csdn.net/zhuweisky/article/details/50439386 OAUS
- 锋利的jQuery-7--编写插件基础知识
插件的基本要点: 1.命名推荐:jquery.[插件名].js,避免和其他js库插件混淆. 2.对象方法附加到:jQuery.fn上,全局函数附加到:jQuery对象本身. 3.在插件内部,this指 ...