java - 将 STDOUT 复制到文件而不停止它在屏幕上显示

标签 java stdout stderr

我正在制作的程序设计为无人值守运行,因此我已将 stdout 和 stderr 流重定向到一个日志文件。虽然这没有任何问题,但我仍在制作和调试软件,我希望它也能显示在屏幕上。这可能吗?

重定向我使用过的流

System.setErr(logWriter);
System.setOut(logWriter);

谢谢。

最佳答案

是的。日志记录框架(即 log4j)是最好的,isDebugMode 在开发环境中很方便但是如果你真的需要“tee”你的标准输出你可以喜欢这样。

import java.io.PrintStream;
import java.io.File;
public class TeeStream extends PrintStream {
    PrintStream out;
    public TeeStream(PrintStream out1, PrintStream out2) {
        super(out1);
        this.out = out2;
    }
    public void write(byte buf[], int off, int len) {
        try {
            super.write(buf, off, len);
            out.write(buf, off, len);
        } catch (Exception e) {
        }
    }
    public void flush() {
        super.flush();
        out.flush();
    }
}

http://www.exampledepot.com/egs/java.lang/Redirect.html

// import java.io.FileOutputStream;
String dateString = new SimpleDateFormat("yyyyMMdd").format(new Date());
File logFile = new File("mylogfile_" + dateString +".log");
PrintStream logOut = new PrintStream(new FileOutputStream(logFile, true));

PrintStream teeStdOut = new TeeStream(System.out, logOut);
PrintStream teeStdErr = new TeeStream(System.err, logOut);

System.setOut(teeStdOut);
System.setErr(teeStdErr);

您很快就会发现 LOG.somelevel(msg)System.out.println(msg) 更易于管理。在没有部署调试版本的情况下,当事情运行良好时提高日志级别并在它们运行不正常时降低级别是很好的。

关于java - 将 STDOUT 复制到文件而不停止它在屏幕上显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1356706/

相关文章:

java - "less storage taking"数字的算法/数字格式

function - Elixir 检查是否从 ExUnit 测试中调用了一个函数?

python - python 无法获取标准输出数据

Java OPENCV 模板匹配给出错误的坐标?

java - 我可以在 MOXy DynamicEntities 上设置空的嵌套值吗?

java - 对 LinkedList 中 ListIterator 的 add() 方法感到困惑

node.js - 是否有任何标准警告(stdwarn),如 stdout 和 stderr?

c++ - 将 stdout、stderr、cout、cerr 重定向到文件和屏幕

file - 错误[P​​e020] : identifier "FILE" is undefined in IAR Workbench

Python sys.stderr 刷新频率