http://blog.sina.com.cn/s/blog_76a8411a01010u2h.html

首先:当我们引入data-integration\lib文件夹下的所有jar包后 运行java程序要求我们必须引入log4j,由此我们可以确认控制台输出的信息为log4j做的:

程序如下:

public static void main(String[] args) throws Exception{
  KettleEnvironment.init();
  try {

JobMeta
jobMeta = new JobMeta("E:\\BI\\sample.kjb", null,null);
   Job job = new
Job(null, jobMeta);
   jobMeta.setArguments(new
String[]{"aaaaa","bbbbbb"});//传参数
           
job.getJobMeta().setInternalKettleVariables(job);

job.setLogLevel(LogLevel.BASIC);
           
// Start the Job, as it is a Thread itself by Kettle.
           
job.start();
           
job.waitUntilFinished();

if (job.getResult() != null &&
job.getResult().getNrErrors() != 0) {
           
 //Do something here.
           
}
           
// Now the job task is finished, mark it as finished.
           
job.setFinished(true);

// Cleanup the parameters used by the job. Post that invoke
GC.
           
jobMeta.eraseParameters();
           
job.eraseParameters();
       
} catch (Exception e) {
            
e.printStackTrace();
       
}

}

 解决步骤:

1、首先想到查看输出这些日志的来源:Job类

2、通过反编译软件 或者 查看源文件 查看代码
找到:this.log = new LogChannel(this);

3、进入LogChannel找到:  private static
LogWriter log = LogWriter.getInstance();

可以看出是单例

4、查看LogWiter的构造方法:

private LogWriter()
  {
   
this.pentahoLogger = Logger.getLogger("org.pentaho.di");
   
this.pentahoLogger.setAdditivity(false);

   
this.pentahoLogger.setLevel(Level.ALL);

   
layout = new Log4jKettleLayout();

   
boolean consoleAppenderFound = false;
    Enumeration
appenders = this.pentahoLogger.getAllAppenders();
    while
(appenders.hasMoreElements()) {
     
Appender appender = (Appender)appenders.nextElement();
     
if ((appender instanceof ConsoleAppender)) {
       
consoleAppenderFound = true;
       
break;
     
}

   
}

    if
(!consoleAppenderFound) {
     
Layout patternLayout = new PatternLayout("%-5p %d{dd-MM
HH:mm:ss,SSS} - %m%n");
     
ConsoleAppender consoleAppender = new
ConsoleAppender(patternLayout);
     
consoleAppender.setName("ConsoleAppender:org.pentaho.di");
     
this.pentahoLogger.addAppender(consoleAppender);
   
}

   
LogManager.getLogger("org.apache.commons.vfs").setLevel(Level.WARN);

}
5、看出 原来 他们是判断有没有控制台输出的,如果没有就加入一个控制台输出的,

log的识别符为:Logger.getLogger("org.pentaho.di");

6、==============================================================

=================================================================

由此,我们可以再我们程序中加入一行代码:
手动的去加入一个FileAppender

在try中第一行加入:

Logger.getLogger("org.pentaho.di").addAppender(new
FileAppender(new SimpleLayout(),
"E:\\logger.log"));

这样我们就可以把console端打印出来的log
直接输入到一个log文件中去了


 

java程序中输出console的日志到文本的更多相关文章

  1. 在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行

    在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行

  2. SQL函数TIMEDIFF在Java程序中使用报错的问题分析

    需求背景 (读者可略过)司机每天从早到晚都会去到不同的自动售货机上补货,而且补货次数和路线等也是因人而异,补货依据是由系统优化并指派.但是目前系统还无法实施有效指挥和优良的补货策略,司机的补货活动因此 ...

  3. 如何在java程序中调用linux命令或者shell脚本

    转自:http://blog.sina.com.cn/s/blog_6433391301019bpn.html 在java程序中如何调用linux的命令?如何调用shell脚本呢? 这里不得不提到ja ...

  4. Java程序中调用Python脚本的方法

    在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法. 1.在Eclipse中新建Maven工程: 2.pom.xml文件中添加如下依赖包之后 ...

  5. java程序中的经常出现的的异常处理课后总结

    一.JDK中常见的异常情况 1.常见异常总结图 2.java中异常分类 Throwable类有两个直接子类: (1)Exception:出现的问题是可以被捕获的 (2)Error:系统错误,通常由JV ...

  6. Linux上从Java程序中调用C函数

    原则上来说,"100%纯Java"的解决方法是最好的,但有些情况下必须使用本地方法.特别是在以下三种情况: 需要访问Java平台无法访问的系统特性和设备: 通过基准测试,发现Jav ...

  7. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案

    方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...

  8. 在java程序中访问windows有用户名和密码保护的共享目录

    在java程序中访问windows有用户名和密码保护的共享目录 Posted on 2015-11-20 14:03 云自无心水自闲 阅读(3744) 评论(0)  编辑  收藏 --> Jav ...

  9. 在 ASP.NET MVC Web 应用程序中输出 RSS Feeds

    RSS全称Really Simple Syndication.一些更新频率较高的网站可以通过RSS让订阅者快速获取更新信息.RSS文档需遵守XML规范的,其中必需包含标题.链接.描述信息,还可以包含发 ...

随机推荐

  1. (剑指Offer)面试题52:构建乘积数组

    题目: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不能 ...

  2. iOS核心动画 - CALayer

    大家知道,在iOS中所有的视图都继承自UIView. UIView处理所有的触摸事件和画图. 事实上,UIView所有的渲染和动画是托管给另一个类来负责的,它就是CALayer. 但是,需要记住的是, ...

  3. SIP(Session Initiation Protocol,会话初始协议)

    SIP(Session Initiation Protocol,会话初始协议)的开发目的是用来帮助提供跨越因特网的高级电话业务.因特网电话(IP电话)正在向一种正式的商业电话模式演进,SIP就是用来确 ...

  4. FlatBuffers与protobuf性能比較

    FlatBuffers发布时.顺便也发布了它的性能数据,详细数据请见Benchmark. 它的測试用例由下面数据构成"a set of about 10 objects containing ...

  5. Android中将一个图片切割成多个图片[转]

    有种场景,我们想将一个图片切割成多个图片.比如我们在开发一个拼图的游戏,就首先要对图片进行切割. 以下是封装好的两个类,可以实现图片的切割.仅供参考和学习. 一个是ImagePiece类,此类保存了一 ...

  6. sqlserver学习笔记(二)—— 创建登录名、用户名

    (重要参考:51自学网——SQL Server数据库教程) 登录名与用户名的区别: 1.登录名是指可以使用新建的登录名和密码登录数据库这个程序软件,但不能打开或展开用户自己创建的数据库: 2.用户名是 ...

  7. Java 字符串转为字符串数组

    String strSalesStaff_init="李世民,朱元璋,刘秀,李自成"; String[] arrSalesStaff =strSalesStaff_value.sp ...

  8. 文件流(fstream, ifstream, ofstream)的打开关闭、流状态

    一.文件流 ofstream,由ostream派生而来,用于写文件 ifstream,由istream派生而来, 用于读文件 fstream,由iostream派生而来,用于读写文件 二.打开文件 说 ...

  9. static 与单例模式、auto_ptr与单例模式、const 用法小结、mutable修饰符

    一.static 与单例模式 单例模式也就是简单的一种设计模式,它需要: 保证一个类只有一个实例,并提供一个全局访问点 禁止拷贝  C++ Code  1 2 3 4 5 6 7 8 9 10 11 ...

  10. 关于flex,好像有12个属性非常重要

    关于Flex,有12个属性非常重要 这几天在学习Flex布局,发现Flex真的好厉害! Flex是Flexible Box的缩写,意为"弹性布局",用来为盒模型提供最大的灵活性. ...