2010-08-08 1 views
0

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

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

Спасибо,

ответ

2

Стандартный поток ошибок в программах Явы System.err и стандартный поток вывода является System.out.

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

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

+0

Проблема в том, что я не знаю, когда/что печатает каждый JAR. Например. Мне нужно знать, из какого JAR они идут, чтобы я мог правильно отформатировать их. Невозможно определить, что происходит с JAR? – sholsapp

0

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

+0

Творческий, но не правильный способ сделать это. – TheLQ