将java输出重定向到两个文件

时间:2014-08-28 20:15:07

标签: java io

我们正在使用Eclipe,Selenium,testng和java。有很多代码 System.out.println()语句(几百甚至几千)。所有这些输出都进入控制台(别人给我们留下了这个)。我们真的想把输出放到日志文件中。

我这样做了(outputLogFile的值在使用时设置在某处)

    java.io.PrintStream myout = null;
    ...
    myout = new java.io.PrintStream( new java.io.FileOutputStream( outputLogFile));
    System.out.println( "*** Logs will go to " + outputLogFile);
    System.setOut(myout);;

(有适当的尝试/捕获等,我只是没有列出所有内容。

这很有效。问题:输出不再进入控制台。

有没有办法将输出从System.out.println()拆分为两个,以便它同时转到控制台和日志文件?

或者,在测试结束时有没有办法将所有内容从控制台复制到日志文件?感谢

2 个答案:

答案 0 :(得分:0)

创建一个扩展PrintStream的类来保存原始的System.out,然后你可以在那里写一个文件。

MyPrintStream newOut = MyPrintStream(System.out, "somefile.log");
System.setOut(newOut);

答案 1 :(得分:0)

你是如何调用测试的?如果您从控制台运行命令,则只需从命令行重定向输出,而不是更改代码。例如,'tee' Linux中的命令完全符合您的要求:

./my_test_script | tee logfile.txt

这将打印' my_test_script'的输出。到控制台以及logfile.txt。