java程序中输出console的日志到文本
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的日志到文本的更多相关文章
- 在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行
在java程序中,对于数据的输入/输出操作以“流”(stream)方式进行
- SQL函数TIMEDIFF在Java程序中使用报错的问题分析
需求背景 (读者可略过)司机每天从早到晚都会去到不同的自动售货机上补货,而且补货次数和路线等也是因人而异,补货依据是由系统优化并指派.但是目前系统还无法实施有效指挥和优良的补货策略,司机的补货活动因此 ...
- 如何在java程序中调用linux命令或者shell脚本
转自:http://blog.sina.com.cn/s/blog_6433391301019bpn.html 在java程序中如何调用linux的命令?如何调用shell脚本呢? 这里不得不提到ja ...
- Java程序中调用Python脚本的方法
在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法. 1.在Eclipse中新建Maven工程: 2.pom.xml文件中添加如下依赖包之后 ...
- java程序中的经常出现的的异常处理课后总结
一.JDK中常见的异常情况 1.常见异常总结图 2.java中异常分类 Throwable类有两个直接子类: (1)Exception:出现的问题是可以被捕获的 (2)Error:系统错误,通常由JV ...
- Linux上从Java程序中调用C函数
原则上来说,"100%纯Java"的解决方法是最好的,但有些情况下必须使用本地方法.特别是在以下三种情况: 需要访问Java平台无法访问的系统特性和设备: 通过基准测试,发现Jav ...
- 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案
方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...
- 在java程序中访问windows有用户名和密码保护的共享目录
在java程序中访问windows有用户名和密码保护的共享目录 Posted on 2015-11-20 14:03 云自无心水自闲 阅读(3744) 评论(0) 编辑 收藏 --> Jav ...
- 在 ASP.NET MVC Web 应用程序中输出 RSS Feeds
RSS全称Really Simple Syndication.一些更新频率较高的网站可以通过RSS让订阅者快速获取更新信息.RSS文档需遵守XML规范的,其中必需包含标题.链接.描述信息,还可以包含发 ...
随机推荐
- Pureftp SSL/TLS配置
一.准备 & 安装 启用 Pure-FTPd SSL/TLS 连接方式在安装时需要检查以下两项: 1.系统中是否已经安装了 openssl 和 openssl-devel 包? 2.在编译 P ...
- 读TIJ -7 多形性
<Think in java·第 7 章 多形性> [面向对象的程序设计语言三种最主要的特征:数据抽象.继承和多态] 在这个层面是没有什么"思想"好谈的!当你依照人们 ...
- PHPNOW如何添加虚拟主机
1 打开PHPNow控制面板,输入0,点回车 2 新增主机名称(你可以输入127.0.0.2到127.0.0.255),点击回车之后要求输入主机别名,不要写,直接回车,再要求输入网站目录,也不选,再回 ...
- Java中equals和==的解析
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(== ...
- Python list替换元素
替换直接对应位置赋值 假设现在班里仍然是3名同学: >>> L = ['Adam', 'Lisa', 'Bart'] 现在,Bart同学要转学走了,碰巧来了一个Paul同学,要更新班 ...
- 【Oracle】在win10上安装Oracle客户端报错:[INS-13001]环境不满足最低要求
环境:win10 64bit 客户端工具: 安装的时候报错: 解决方案: 在\client\stage\cvu目录下找到如下两个文件: 编辑这两个文件,在文件中分别添加如下内容 <OPERATI ...
- 重新安装Drupal?
因个人需要需要重新安装Drupal.如何操纵呢?Drupal是在_drupal_bootstrap_database()函数里面检查是否已经安装过的.检查的依据是有没有$GLOBALS['databa ...
- EL和自定义函数库
问题:在数据显示的时候经常需要调用一些方法对需要显示的数据进行基本的处理,如: 数据过滤.求子串等操作.那么就需要使用EL表达式进行快速的函数调用. 引入HTMLFilter.java类 描述为函数 ...
- PHP-权限控制类(转)
<?php /** * 权限控制类 */ class include_purview { /** * 类的唯一实例 */ private static $instance; /** * 权限常量 ...
- Linux命令-帮助命令:whatis,apropos
whatis可以查看命令简化版的帮助内容 whatis ls 查看简化版的ls命令的帮助内容 whatis ifconfig 查看简化版的ifconfig命令的帮助内容 apropos可以查看配置文件 ...