2011-04-29 106 views
5

大概这个线程是duplicate,但有人可以指导?我想同时将java程序输出写入控制台文件。我知道,我可以给输出,这段代码Java控制台输出 - 文件和控制台BOTH

PrintStream orgStdout = null; 
    PrintStream fileStdout = null; 

    orgStdout = System.out; 
    try { 
     fileStdout = new PrintStream(new FileOutputStream("C:\\testlogger.txt")); 
     System.setOut(fileStdout); 
     System.out.println("=============="); 
     for (int i = 0; i < 10; i++){ 
      System.out.println("" + i); 
     } 
     System.out.println("=============="); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

然而,如何使输出的控制台和文件,以及安慰?

P.S: 不寻找一个选项,我在文件中输出并在不同的线程显示控制台。

+2

应该看看[log4j的(HTTP: //logging.apache.org/log4j/1.2/manual.html) – mre 2011-04-29 22:05:20

回答

5

Apache Commons IO查找TeeOutputStream

+1

该页面没有'TeeOutputStream'。 – modulitos 2014-04-29 06:29:11

+0

已修复Apache Commons IO JavaDoc链接。 – kervin 2015-01-14 03:19:10

2

不要调用System.setOut(),只需打两个调用即可。这不是很优雅,但你可以制作一个输出到两者的方法。

PrintStream orgStdout = null; 
PrintStream fileStdout = null; 

orgStdout = System.out; 
try { 
    fileStdout = new PrintStream(new FileOutputStream("C:\\testlogger.txt")); 
    System.out.println("=============="); 
    for (int i = 0; i < 10; i++){ 
     System.out.println("" + i); 
     fileStdout.println("" + i); 
    } 
    System.out.println("=============="); 
    fileStdout.println("" + i); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 

如果你在Unix下运行,你也可以,只要使用tee命令,一切都被打印到标准输出。你会运行您的程序是这样的:

java MyClass | tee testlogger.txt 

然后,一切都打印到标准输出去这两个文件和控制台。

0

当你运行你的程序

的java {标志的JVM} {类名参数类}> output.txt的2> error.txt