如何以正确的顺序打印stdout和stderr

时间:2011-11-04 16:34:08

标签: java exception

我注意到std out和err语句有时会按顺序打印出来。例如,如果我捕获和异常,使用sysout打印一些东西,然后将堆栈跟踪打印到错误流,则异常跟踪有时会出现在sysout语句之前。

当我将输出重定向到单个文件时,这会导致关于哪个堆栈跟踪“属于”哪个sysout的混淆。

我能想到每次都能获得正确序列的唯一方法是在每个sysout之后调用flush,但这似乎有点过分了。

这是唯一的方法吗?

2 个答案:

答案 0 :(得分:2)

错误在于使用System.outSystem.err

使用日志记录框架记录错误和消息。 SLF4j,logback和log4j都是常用的和开源的。

答案 1 :(得分:1)

您可以创建新的无缓冲输出流,并使用System.setOutSystem.setErr将stdout和stderr重定向到这些流。请参阅Tuning Java I/O Performance