Как контролировать STDERR в Java?

1

Мы интегрируемся с сторонним 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: "? Это может усложниться из-за буферизации потока, поэтому я не уверен, какой должен быть правильный подход.

Теги:
monitor
stderr

1 ответ

2

Во-первых, если есть другой способ обнаружить ошибки, которые не связаны с этим, сделайте это вместо этого. Ваше будущее будет благодарно вам.

Но если вам действительно нужно слушать System.err, вы можете использовать System.setErr(PrintStream). Создайте собственный подкласс PrintStream, который ищет в тексте текст "Ошибка:".

  • 0
    Спасибо @immibus (+1) - я предполагаю, что мне следует, вероятно, сохранить существующий System.err до вызова FizzBuzz.doSomething() , а затем заменить его вместо моего пользовательского PrintStream после выполнения метода (чтобы сохранить оставшуюся часть приложение, правильно направляющее трафик STDERR? Кроме того, что еще более важно, как может выглядеть этот пользовательский PrintStream ? PrintStream раз спасибо!
  • 0
    К сожалению, я тоже должен был сделать что-то подобное в последнее время; Я наткнулся на следующую библиотеку, которая перенаправляет sysout и ошибку на slf4j. Это может быть использовано в качестве примера для подражания. github.com/Mahoney/sysout-over-slf4j .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню