Как вывести стандартный вывод и стандартный вывод ошибки в правильной последовательности - PullRequest
2 голосов
/ 04 ноября 2011

Я заметил, что операторы std out и err иногда выводятся не по порядку. Например, если я поймаю исключение, напечатаю что-нибудь с помощью sysout, а затем выведу трассировку стека в поток ошибок, трассировка исключения иногда появляется перед оператором sysout.

Это вызывает некоторую путаницу в отношении того, какой трассировке стека «принадлежит» какой sysout, когда я перенаправляю вывод в один файл.

Единственный способ, которым я могу думать о получении правильной последовательности каждый раз, это вызывать flush после каждого sysout, но это кажется излишним.

Это единственный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Ошибка заключается в использовании System.out и System.err.

Использование каркаса ведения журнала для регистрации ошибок и сообщений.SLF4j, logback и log4j - все они широко используются и имеют открытый исходный код.

1 голос
/ 04 ноября 2011

Вы можете создавать новые небуферизованные выходные потоки и использовать System.setOut и System.setErr для перенаправления stdout и stderr в эти потоки. См. Настройка производительности ввода-вывода Java .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...