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文件扔进项目代码,然后部署运行,发现没有日 ...
随机推荐
- Java 并发编程 Executor
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括线程池,Executor,Executors,ExecutorService,Completion ...
- 获取IplImage 数据并打印
int main(int argc, char* argv[]){ IplImage *img=cvLoadImage("c://fruitfs.bmp",1); CvSca ...
- Core Animation编程指南
本文是<Core Animation Programming Guide>2013-01-28更新版本的译文.本文略去了原文中关于OS X平台上Core Animation相关内容.因为原 ...
- xcode6.3插件失效
1.打开终端,输入以下代码:defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 2.获取到DV ...
- Mac 鼠须管 合并词库 简单使用
之前一直没用过合成词库这功能,有个同步用户数据的选项,点它后,生成一个文件夹,里面就有当前的一些配置,词库之类的 /Users/dfpo/Library/Rime/sync 这样我们就得到了一个装着用 ...
- js通过alert查看对象或数组内容
var arr=new Array("Saab","Volvo","BMW"); for(i in arr ){ alert(i); //获 ...
- Windows 2008远程多用户登录的配置方法(转载)
在使用Windows2008远程登录功能时,如果需要进行多用户登录,可以采用以下配置方法: 首先要启用远程桌面这一功能:右击“我的电脑”→属性→远程配置→远程桌面,就可以配置相应的远程桌面功能了.下 ...
- 【Derby 系列】Apache Derby 功能特点
前言 进入Derby 的应用开发之前,浏览一下derby的功能集,这样在真正选择的时候,可以决定Derby是不是适合你的应用. 本篇的是[Derby 系列]初级的第3篇. 1. Derby 是关系型数 ...
- MySql数据类型详解
可配合http://www.cnblogs.com/langtianya/archive/2013/03/10/2952442.html学习 MySql数据类型 1.整型(xxxint) MySQ ...
- 手机wifi密码的保存位置
subjects: adj. 受制于...的, 被统治的; n. 主题,学科, 国民 the subjects had to kneel down before the king. kneel -& ...