Ловить и модифицировать stderr, отправленный с внешнего JAR - PullRequest
0 голосов
/ 08 августа 2010

Есть ли способ для меня перехватить поток STDERR, который используется из внешнего файла JAR?

Моя ситуация такова, что у меня есть мой собственный программа, использующая STDERR для XYZ, и внешний JAR, который использует STDERR для ABC.Я хочу объединить оба, чтобы они были правильно отформатированы для конечного пользователя, но я не могу понять, как перехватить или перенаправить или (каков правильный термин?) STDERR JAR?

Спасибо,

Ответы [ 2 ]

2 голосов
/ 08 августа 2010

Стандартный поток ошибок в программах Java System.err, а стандартный поток вывода System.out.

Вы можете переопределить их, используя System.setErr (java.io.PrintStream) и System.setOut для объекта PrintStream. Но это будет заменено глобально. Предоставьте реализацию PrintStream, которая будет выполнять форматирование, и установите его как стандартный поток ошибок для обоих.

Если у вас есть два разных процесса, вы можете получить другой поток ошибок поток (в качестве входного потока), прочитать содержимое из него (от него) и записать его в стандартный поток ошибок.

0 голосов
/ 09 августа 2010

Не простое решение, но вы можете создать загрузчик классов, агент Java или препроцессор, который изменяет байт-код выбранных классов и заменяет все ссылки на статическое поле System.err для доступа к вашему пользовательскому потоку вывода.

...