添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

最近公司做一个任务调度项目,其中一个小任务需要调度kettle,现有一需求,就是kettle产生的日志,不管正确与否,都要写入日志文件中

问题分析:

目前java调入job 代码如下(简化)

//设定kettle文件地址
JobMeta jobMeta = new JobMeta(kjbPath, null);
Job job = new Job(null, jobMeta);
// 配置作业参数
for (String key : parmap.keySet()) {
    job.setVariable(key, parmap.get(key));
// 启动作业
job.start();
// 等待作业执行完毕
job.waitUntilFinished();

kettle日志是输出到console 控制台的,网上有日志入数据库表的办法,但不能解决本次需求;日志输出到文件解决思路有两个,第一个思路:截获控制台System.out标准输出流,重定向到文件; 第二个思路:寻找kettle API,监听kettle日志然后进行处理。

第一步: 截获System.out 输出到文件 代码如下(简化)

//设定kettle文件地址
JobMeta jobMeta = new JobMeta(kjbPath, null);
Job job = new Job(null, jobMeta);
// 配置作业参数
for (String key : parmap.keySet()) {
    job.setVariable(key, parmap.get(key));
//将标准输出重定向到文件
PrintStream out = System.out;
String logFileName = 'd:\\logfile.log' //此处根据业务动态获取日志文件
System.setOut(new PrintStream(logFileName));
// 启动作业
job.start();
// 等待作业执行完毕
job.waitUntilFinished();
 //恢复标准输出
System.setOut(out);

第一步完成后发现实际效果与预期不符,日志文件里记录了部分日志,不是全部日志,查看kettle源码后发现,kettle 执行任务时,里边的转换是多线程调用的,所以,在main中改变标准输出后,其他线程还是照样输出到控制台,只有main线程乖乖输出到文件。所以,采取第二步行动。

第二步: 监听kettle日志,代码如下

//设定kettle文件地址
JobMeta jobMeta = new JobMeta(kjbPath, null);
Job job = new Job(null, jobMeta);
// 配置作业参数
for (String key : parmap.keySet()) {
    job.setVariable(key, parmap.get(key));
//监听kettle日志
KettleLogStore.getAppender().addLoggingEventListener(new KettleLoggingEventListener() {
       @Override
       public void eventAdded(KettleLoggingEvent logs) {
          //logs为kettle运行时输出的日志。
          System.out.println(logs.getMessage());
// 启动作业
job.start();
// 等待作业执行完毕
job.waitUntilFinished();

至此,圆满完成老板需求。
 

需求:最近公司做一个任务调度项目,其中一个小任务需要调度kettle,现有一需求,就是kettle产生的日志,不管正确与否,都要写入日志文件中问题分析:目前java调入job 代码如下(简化)//设定kettle文件地址JobMeta jobMeta = new JobMeta(kjbPath, null);Job job = new Job(null, jobMeta);// 配置作业参数for (String key : parmap.keySet()) { job.
网上有很多关于如何实现Kettle日志输出日志文件的方法,但需要修改代码,重新编译,比较麻烦。 这里面提供的方法可以解决两个问题:1、把日志输出文件;2、日志的时间精确到毫秒; 有时Kettle运行的很快,1 秒之内就输出好几条记录,而默认日志的时间只到秒级,这样日志的顺序就是混乱的。用这种方法就可以部分解决,因为控制台的默认日志无法去除掉,需要改代码。在Kettle的程序目录下data-
将DB连接信息修改为错误的时,在kettle 界面上操作可以看到错误日志。 但通过kettle 的 Kitchen.bat 脚本调用时却在log中不能显示错误日志。 (F:\***\data-integration\...
kettlekettle调度方式Kettle自身调度Windows定时任务调度Linux定时任务调度Linux部署kettlekettle安装包上传数据库连接驱动上传配置环境变量验证安装是否成功Linux配置kettle资源库检查.kettle目录准备资源库配置文件Linux调度kettle采集目录准备编辑调度文件 Kettle自身调度 在主调度作用的start上设置作业的定时调度后启动该调度即可 需要时刻保持kettle打开,以及资源库连接,不建议使用 Windows定时任务调度 在kettle部署
这个是说kettle配置的Mysql jar包有问题,之前的kettle版本,只要把jar包换成5.1.48或者5.1.49就可以解决,这次我换了很多版本,都还是报错,然后我找到了找对应jar包的方法。 1.打开mysql installer community 2.如图,下面写了,connector/j 版本,去官网下载对应版本,放到kettle的lib目录下,连接成功。
kettle 5+的日志模块重写了,将log4j改成插件,但存在BUG,无法正法初始化, 可以查看相关文章http://jira.pentaho.com/browse/PDI-13206 导致的问题就是在程序中调用kettle时,日志只能打在控制台,无法输出日志文件, 解决办法: 在环境初始化时 KettleEnvironment.init(); KettleClientEnvironment....
0 ETL简介 ETL (Extract-Transform-Load 的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种数据的处理,转换,迁移,所以了解并掌握一种ETL工具的使用,必不可少。 市面上常用的ETL工具有很多,比如Sqoop,DataX, Kettle, Talend 等,作为一个大数据工程师,我们最好要掌握其中的两到三种,这里我们要学习的ETL工具是Kettle! 1 Kettle简介 1.1 Kettle是什么 Kettle是一款国外开源的ETL工具,纯ja
这个问题可能是因为你的计算机上没有安装Java环境或者Java环境没有正确配置所导致的。你可以尝试以下步骤来解决这个问题: 1. 首先,确保你的计算机已经安装了Java环境。你可以在控制面板中的“程序和功能”中查找Java是否已经被安装。 2. 如果Java已经被安装,你需要检查一下Java的环境变量是否正确配置。在系统环境变量中,应该有一个名为“JAVA_HOME”的变量,其值应该指向Java的安装目录。 3. 如果Java环境已经安装并配置正确,那么你可以尝试重新安装Kettle软件,确保它能够正确识别Java环境。 如果你仍然无法解决这个问题,你可以尝试在网上搜索相关解决方案或者咨询相关技术支持。