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规范的,其中必需包含标题.链接.描述信息,还可以包含发 ...
随机推荐
- .NET破解之爱奇迪(一)
今天无意中看到了wuhuacong(伍华聪)的专栏,界面写得还是很炫的感觉,于是在广州爱奇迪官网下载一个来试一下——客户关系管理系统.下面是成果: 00.总体把握 里面有Logon窗口(为什么不是Lo ...
- 微信小程序 - 自定义模态对话框
更新日期:2018-11-5 微信bug: 在for循环中使用组件时,遮罩层成黑层. 更新时间 2018-9-30 2018-9-30 1.在电脑上调试input超出输入框范围会出现文字模糊以及位移现 ...
- 我们为什么在移动端项目中选择jQuery而不是Zepto
1.文件大小比较 首先从cnd上(http://www.bootcdn.cn/)下载jquery和zepto. jquery下载的是2.2.4版本压缩: zepto下载的是是1.20压缩版本: 二个文 ...
- vim中翻页的命令
整页翻页 ctrl-f ctrl-b f就是forword b就是backward 翻半页 ctrl-d ctlr-u d=down u=up 滚一行 ctrl-e ctrl-y zz 让光标所杂 ...
- php 缓冲区总结
我们先来看一段代码. <?php for ($i=10; $i>0; $i--) { echo $i; flush(); sleep(1); } ?> 按照php手册里的说法 该函数 ...
- HttpClient + PATCH support
From - http://compiledexperience.com/blog/posts/patch-support-in-httpclient/ public static class Htt ...
- 【LeetCode】81. Search in Rotated Sorted Array II (2 solutions)
Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...
- 摘:常用函数(包括:宽字符函数、普通C函数 )
只要看见“W”就是宽的意思,左边wchar_t,右边char 字符分类: 宽字符函数 普通C函数 描述 iswalnum() isa ...
- jquery 鼠标拖动排序Li或Table
1.前端页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="拖动排序Li或Ta ...
- php 实现打印预览的功能
<inputid="btnPrint" type="button" value="打印"onclick="javascrip ...