平时开发时我们能很方便的在eclipse中看到控制图输出信息.一旦程序独立运行,我们就很难看到这些信息了.尤其是有时候我们程序对LOG4J使用不规范,开发中随意用System.out.println();输出程序运行信息.
反正是总有人因为某些原因要捕获控制台输入........(比如偶^_^)
对于普通的java程序包括swt程序,我们可以把控制台输出重定向到文本文件或者界面文本框.
1 class ConsoleThread extends Thread {
2 private PipedInputStream pis = new PipedInputStream();
3
4 private PipedOutputStream pos;
5
6 private BufferedReader reader = new BufferedReader(new InputStreamReader(pis));
7
8 private boolean run = true;
9
10 public ConsoleThread() throws IOException {
11 pos = new PipedOutputStream(pis);
12 }
13
14 public PipedOutputStream getOut() {
15 return pos;
16 }
17
18 public void run() {
19 String line = null;
20 while (run) {
21 try {
22 line = reader.readLine();
23 } catch (IOException ioe) {
24 break;
25 }
26 if (line == null) {
27 break;
28 } else {
29 addText(line);//这里处理截获的控制台输出
30 }
31 }
32 }
33
34 public boolean isRun() {
35 return run;
36 }
37
38 public void setRun(boolean run) {
39 this.run = run;
40 }
41 }
调用:
1 try {
2 ConsoleThread coThread = new ConsoleThread();
3 System.setOut(new PrintStream(coThread.getOut(), true));
4 System.setErr(new PrintStream(coThread.getOut(), true));
5 coThread.start();
6 } catch (IOException e) {
7 e.printStackTrace();
8 }
但是有个问题,log4j输出到控制台的信息捕获不到........
郁闷
log4j.properties
1 log4j.rootLogger=DEBUG , stdout
2
3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
4 log4j.appender.console.Target = System.out
5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
6 log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
posted on 2007-01-03 15:01
交口称赞 阅读(2728)
评论(0) 编辑 收藏 所属分类:
java相关