Куда идет java stderr?

Я хотел бы знать, куда обычно идет java stderr?

Я знаю, что могу изменить stderr с помощью System.setErr, который «переназначает «стандартный» поток вывода ошибок», но я не знаю, какой из них является «стандартным».

Я хотел бы уточнить свой вопрос: у меня есть библиотека C++, которую я использую в java (jni). Проблема в том, что я не вижу вывод в stderr из моей библиотеки C++. Я вызываю assert() в библиотеке C++ и не вижу вывода в консоли, когда запускаю java API, который использует библиотеку.


person Community    schedule 16.03.2009    source источник
comment
Вы пробовали System.stderr.writeln(я здесь)? Что ты видел?   -  person S.Lott    schedule 16.03.2009


Ответы (6)


Он переходит к стандартному потоку ошибок процесса, каким бы он ни был.

  • Если вы запускаете приложение из консоли, оно, вероятно, также будет писать в консоль.
  • В графическом интерфейсе стандартный вывод/ошибка часто отбрасывается, т. е. вывод теряется.
  • В службе (например, на веб-сервере) стандартная ошибка/вывод обычно фиксируется где-то в файле журналов с ротацией, но это полностью зависит от службы.

Большинство платформ позволяют вам перенаправить стандартный поток ошибок в другое место (например, в текстовый файл).

Идея System.setErr состоит в том, чтобы позволить вам не использовать стандартный поток ошибок самого процесса, а изменить его так, чтобы вызовы System.err.println и т. д. направлялись в заданный поток.

person Jon Skeet    schedule 16.03.2009

По умолчанию System.err является консолью, как и System.out.

person Joonas Pulakka    schedule 16.03.2009

Файловый дескриптор 2 вызывающего объекта. Куда он идет оттуда, зависит от вызывающего абонента. На консоли вы можете перенаправить его в другое место, например:

java Example 2>> errors.log
person vartec    schedule 16.03.2009

Я только что написал небольшую тестовую программу, которая выполняет System.err.println, и похоже, что она выводится на консоль.

person John Topley    schedule 16.03.2009

Это должно перейти к java.io.FileDescriptor.err https://docs.oracle.com/javase/1.5.0/docs/api/java/io/FileDescriptor.html

System.setErr(new PrintStream(new BufferedOutputStream(new FileOutputStream(java.io.FileDescriptor.err),128),true));
person Mork0075    schedule 16.03.2009

Стандартный поток вывода ошибок отправляется на консоль. Этот поток уже открыт и готов принимать выходные данные.

См. API Java Sun для получения дополнительной информации.

person Tobias    schedule 16.03.2009