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






本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/4545818.html,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
24天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
77 1
|
25天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
78 1
|
29天前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
|
4天前
|
Java
log4j异常日志过滤规则配置
log4j异常日志过滤规则配置
15 0
|
16天前
|
运维 安全 Ubuntu
`/var/log/syslog` 和 `/var/log/messages` 日志详解
`/var/log/syslog` 和 `/var/log/messages` 是Linux系统的日志文件,分别在Debian和Red Hat系发行版中记录系统事件和错误。它们包含时间戳、日志级别、PID及消息内容,由`rsyslog`等守护进程管理。常用命令如`tail`和`grep`用于查看和搜索日志。日志级别从低到高包括`debug`到`emerg`,表示不同严重程度的信息。注意保护日志文件的安全,防止未授权访问,并定期使用`logrotate`进行文件轮转以管理磁盘空间。
24 1
|
17天前
|
网络协议 应用服务中间件 Linux
centos7 Nginx Log日志统计分析 常用命令
centos7 Nginx Log日志统计分析 常用命令
33 2
|
17天前
|
Ubuntu Linux 网络安全
/var/log/auth.log日志详解
`/var/log/auth.log`是Linux(尤其是Debian系如Ubuntu)记录身份验证和授权事件的日志文件,包括登录尝试(成功或失败)、SSH活动、sudo使用和PAM模块的操作。登录失败、SSH连接、sudo命令及其它认证活动都会在此记录。查看此日志通常需root权限,可使用`tail`、`less`或`grep`命令。文件内容可能因发行版和配置而异。例如,`sudo tail /var/log/auth.log`显示最后几行,`sudo grep &quot;failed password&quot; /var/log/auth.log`搜索失败密码尝试。
74 8
|
30天前
|
监控 Java 测试技术
日志框架到底是Logback 还是 Log4j2
日志框架到底是Logback 还是 Log4j2
20 0
|
SQL 数据采集 监控
基于日志服务数据加工分析Java异常日志
采集并脱敏了整个5月份的项目异常日志,准备使用日志服务数据加工做数据清洗以及分析。本案例是基于使用阿里云相关产品(OSS,RDS,SLS等)的SDK展开自身业务。需要对异常日志做解析,将原始日志中时间、错误码、错误信息、状态码、产品信息、请求方法、出错行号提取出来。然后根据提取出来的不同产品信息做多目标分发处理。对清洗后的数据做异常日志数据分析。
714 0
基于日志服务数据加工分析Java异常日志
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
51 0