Java控制台输出-文件和控制台同时输出

8

可能这个帖子是重复的,但有人可以指导吗? 我想同时将Java程序输出写入控制台文件。 我知道我可以使用以下代码将输出发送到控制台。

    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();
    }

但是如何在控制台和文件中同时保留输出??
附注: 不要寻找一种选项,在这种选项中,我会在文件中输出并在不同的线程中显示它。

2
应该查看log4j - mre
3个回答

7

1
该页面上没有TeeOutputStream - modulitos
使用Apache Commons IO JavaDoc链接修复。 - kervin

2
不要调用System.setOut(),只需调用print两次即可。这不是很优雅,但您可以创建一个输出到两个地方的方法。
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系统上运行,只要所有内容都打印到标准输出(stdout),你也可以使用tee命令。你可以像这样运行程序:

java MyClass | tee testlogger.txt

然后所有输出到标准输出的内容都会同时输出到文件和控制台。


0

当你运行程序时

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接