Java 如何按正确的顺序打印出std和std err

Java 如何按正确的顺序打印出std和std err,java,exception,Java,Exception,我注意到std out和err语句有时会打印出顺序错误。例如,如果我捕获和异常,使用sysout打印某些内容,然后将堆栈跟踪打印到err流,那么异常跟踪有时会出现在sysout语句之前 当我将输出重定向到单个文件时,这会导致关于哪个堆栈跟踪“属于”哪个sysout的一些混淆 我能想到的每次获得正确序列的唯一方法是在每次sysout之后调用flush,但这似乎有些过分 这是唯一的方法吗?您可以创建新的无缓冲输出流,并使用System.setOut和System.setErr将stdout和stde

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

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

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


这是唯一的方法吗?

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

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

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