Javaのエラーをファイルにリダイレクトする

JavaをWindowsのコマンドプロンプト等で実行していた場合に、エラーが出力されることがあります。

エラー内容を見ようとして、

java -classpath libaxis.jar;libwsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java -a sand_enterprise.wsdl -o src > log.txt

のように単純にリダイレクトしても、何も出力されていない。。ということありますよね。

Javaには標準出力と標準エラー出力があり、標準エラー出力の方がリダイレクトされていないためです。

標準エラー出力もログファイル等にリダイレクトするには、以下のようにします。

java -classpath libaxis.jar;libwsdl4j-1.5.1.jar org.apache.axis.wsdl.WSDL2Java -a sand_enterprise.wsdl -o src > log.txt 2>&1

これでめでたくファイルにエラーが出力されるのですが、「2>&1」ってどういう意味なんだっけ?という人のために、解説。

マイクロソフトのHPに「コマンド リダイレクト演算子を使用する」というページがあります。

ここの記述によると、1とか2はハンドル番号で、

ハンドル

ハンドル番号

説明

STDIN 0 キーボード入力
STDOUT 1 コマンド プロンプト ウィンドウへの出力
STDERR 2 コマンド プロンプト ウィンドウへのエラーの出力
UNDEFINED 3-9 ハンドルはアプリケーションによって個別に定義され、各ツールで固有です

 

となっています。

また、>や&に関しては、

記号

説明

> コマンド プロンプト ウィンドウやハンドルの代わりに、ファイルまたはデバイス (プリンタなど) にコマンドの出力を書き込みます。
< コマンドの入力を、キーボードやハンドルからの入力の代わりに、ファイルから読み取ります。
>> 既にファイルにある情報を削除しないで、ファイルの最後にコマンドの出力を追加します。
>& あるハンドルからの出力を別のハンドルの入力に書き込みます。
<& あるハンドルからの入力を読み取り、別のハンドルの出力に書き込みます。
| あるコマンドからの出力を読み取り、別のコマンドの入力に書き込みます。パイプとも呼ばれます。

 

ですから、STDERRを、STDOUTの入力に書き込むことになりますね。



こんな記事も関係あるかも。読んでみてね。

コメントを残す

サブコンテンツ

このページの先頭へ