Мы интегрируемся с сторонним API и приобрели лицензию на использование своей библиотеки Java (обертывает вызовы API объектно-ориентированным способом).
Единственная проблема с этой Java-библиотекой заключается в том, что она не генерирует исключений или сбоев, если API вызывает ошибки. Единственное указание, которое мы получаем с клиентской стороны, выводится либо STDOUT (при успешном завершении), либо STDERR (при сбое).
Следовательно, запуск:
try {
com.the.third.party.java.lib.FizzBuzz.doSomething();
} catch(Throwable t) {
log.error(t);
}
... никогда ничего не поймает. Если при выполнении doSomething()
происходит ошибка, мы просто увидим следующую строку, напечатанную в STDERR:
Error: <details of the error here>
Поэтому мне интересно, есть ли способ контролировать STDERR (System.err
) для любого вывода, содержащего подстроку " Error:
"? Это может усложниться из-за буферизации потока, поэтому я не уверен, какой должен быть правильный подход.
Во-первых, если есть другой способ обнаружить ошибки, которые не связаны с этим, сделайте это вместо этого. Ваше будущее будет благодарно вам.
Но если вам действительно нужно слушать System.err
, вы можете использовать System.setErr(PrintStream)
. Создайте собственный подкласс PrintStream, который ищет в тексте текст "Ошибка:".
System.err
до вызоваFizzBuzz.doSomething()
, а затем заменить его вместо моего пользовательскогоPrintStream
после выполнения метода (чтобы сохранить оставшуюся часть приложение, правильно направляющее трафик STDERR? Кроме того, что еще более важно, как может выглядеть этот пользовательскийPrintStream
?PrintStream
раз спасибо!