私は bash ターミナルから Java プログラムを実行しておりOS X 10.8
、生成される出力をリダイレクトしようとしています。
ただし、これをパイプ経由で実行するか、ファイルにリダイレクトすると、出力は空白になりますが、ターミナルには出力が表示されます。
これを例に挙げると次のようになります。
> java program.java
13/10/02 14:18:30 WARN some
13/10/02 14:18:30 INFO log
13/10/02 14:18:30 INFO messages
...
> java program.java > log
> cat log
>
Java プログラムを、 とは別のストリームに書き込むように設定しstdout
、そのストリームがターミナルに出力を生成するようにすることはできますか。そのようなことは可能ですか?
答え1
がある三つ各プログラムで開かれる標準ファイルstdin
(標準入力)、stdout
(標準出力)、stderr
(標準エラー)。デフォルトでは両方に書き込まれstdout
、stderr
端末に出力されます。
ログやエラー メッセージを実際のプログラム出力と混同しないように、エラー メッセージやログ メッセージをstderr
ではなくに書き込むのが一般的な慣例です。を使用してリダイレクトできます。たとえば、次のようになります。stdout
stderr
2>
command 2> log