8

知りたいのですが、Java stderrは標準でどこに行きますか?

「「標準」エラー出力ストリームを再割り当てする System.setErr を使用して stderr を変更できることは知っていますが、どれが「標準」であるかはわかりません。

私の質問をもっと具体的にしたいと思います:Java(jni)で使用するC++ライブラリがあります。問題は、私の C++ ライブラリからの stderr への出力が見えないように見えることです。C++ ライブラリで assert () を呼び出し、ライブラリを使用する Java API を実行すると、コンソールに出力が表示されません。

4

6 に答える 6

14

設定が何であれ、プロセスの標準エラーストリームに送られます。

  • コンソールからアプリケーションを実行すると、おそらくコンソールにも書き込みます。
  • GUI では、標準出力/エラーが頻繁にドロップされます。つまり、出力が失われます。
  • サービス (Web サーバーなど) では、標準エラー/出力は通常、ローテーションされたログ ファイルのどこかにキャプチャされますが、それは完全にサービスに依存します。

ほとんどのプラットフォームでは、標準エラー ストリームを別の場所 (テキスト ファイルなど) にリダイレクトできます。

System.setErr の考え方は、プロセス自体の標準エラー ストリームを使用せSystem.err.printlnに、 etc の呼び出しが指定されたストリームに行くように変更できるようにすることです。

于 2009-03-16T11:07:41.107 に答える
3

デフォルトでは、System.out と同様に System.err がコンソールです。

于 2009-03-16T11:06:18.380 に答える
2

呼び出し元のファイル記述子 2。そこからどこへ行くか — 呼び出し元に依存します。コンソールでは、次のように別の場所にリダイレクトできます。

java Example 2>> errors.log
于 2009-03-16T11:09:53.067 に答える
0

を実行する小さなテスト プログラムを作成したところSystem.err.println、コンソールに出力されるように見えます。

于 2009-03-16T11:08:24.257 に答える
0

これは 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));
于 2009-03-16T11:10:01.820 に答える
-1

標準エラー出力ストリームはコンソールに送られます。このストリームはすでに開いており、出力データを受け入れる準備ができています。

詳細については、Java Sun APIを参照してください。

于 2009-03-16T11:07:18.253 に答える