Я бы не хотел использовать setOut (), потому что это глобальная переменная. Вы столкнетесь с «действием на расстоянии»: вы хотите перехватить стандартный вывод только для этой библиотеки, но не растоптать что-либо еще, что может потребоваться для использования стандартного вывода.
Если это вообще возможно, запустите код, который вызывает библиотечные функции, в отдельном пространстве процесса; затем вы можете написать поток, который читает stdout из этого процесса и отправляет его регистратору.
new Thread() {
public void run() {
ProcessBuilder pb = new ProcessBuilder(command);
Process p = pb.start();
BufferedReader in = new BufferedReader(p.getInputStream());
String line;
while ((line = in.readLine()) != null) {
log.info(line);
// or you could parse line and try to dynamically pick a log level
}
}
}
Вам понадобится хороший способ вернуть выходные данные из вызываемого процесса вызывающей стороне, но если это так же просто, как вернуть значение, тогда должно быть легко вернуть его в качестве последней строки вашего стандартного вывода или строка со специальным сигнальным кодом или что-то в этом роде.