保存控制台而不更改System.out.println(“blabla”);

时间:2015-08-19 18:49:27

标签: java log4j

我对编程非常陌生,所以如果我的问题有点主要,请提前道歉。

我有一段JAVA代码(超过10,000行),它有数百System.out.println("blabla");,我需要将它们保存在.txt文件中。我无法完成所有这些并更改代码,因此我想知道是否有任何方法可以添加一些代码然后运行程序,最后在Java程序完成时保存日志。

4 个答案:

答案 0 :(得分:2)

您可以在应用开头的某处使用此说明:

System.setOut(new PrintStream("a.txt"));

更新: 如果要同时编写控制台和文件,可以实现简单的SplitStream:

public class SplitStream extends OutputStream {
    OutputStream o1,o2;
    public SplitStream(OutputStream o1, OutputStream o2) {
        this.o1=o1; this.o2=o2;
    }
    public void write(int b) throws IOException {
        o1.write(b);
        o2.write(b);
    }
}

然后以这种方式使用它(在主要方面):

OutputStream other=new FileOutputStream("a.txt");
System.setOut(new PrintStream(new SplitStream(System.out,other)));

答案 1 :(得分:1)

从System.out更改“out”以打印到输出文件。

PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);

答案 2 :(得分:1)

也许不完全是你问题的答案,但是不改变任何代码行的解决方案是调用程序并将输出重定向到文本文件

java your.Program > logfile.txt

答案 3 :(得分:0)

由于我想在两个流中编写数据,我尝试使用TeeOutputStream中的Apache Commons。在程序开始时添加代码。

try {
    FileOutputStream fos = new FileOutputStream(new File("BlaBla.txt"));
    //we will want to print in standard "System.out" and in "file"
    TeeOutputStream myOut=new TeeOutputStream(System.out, fos);
    PrintStream ps = new PrintStream(myOut);
    System.setOut(ps);
} catch (Exception e) {
    e.printStackTrace();
}

感谢Writing to console and text file