2011-11-04 110 views
2

我注意到std out和err语句有时会按顺序打印。例如,如果我捕获和异常,使用sysout打印一些内容,然后将堆栈跟踪打印到err流,异常跟踪有时会出现在sysout语句之前。如何获得std out和std err以正确的顺序打印

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

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

这是唯一的方法吗?

回答

1

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

2

错误在于使用了System.outSystem.err

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

相关问题