Java プログラムの stdout と stderror を 1 行ずつキャプチャする方法はありますか?
おそらく、 を使用して Logger インスタンスにハンドラーを追加する方法に似たものですaddHandler
。
編集:デフォルトのハンドラーを置き換えたくありません。コマンド ラインに出力を表示する必要があります。
System.setOut()とSystem.setErr()を使用すると、標準出力とエラー ストリームを任意の PrintStream に設定し、すべてをキャプチャできます。
追加:
これを行うエレガントな方法が存在するかどうかはわかりませんが、その方法の 1 つは次のとおり
です。 1. デフォルトの出力ストリームを保存します
PrintStream defaultOut = System.out;
(ただし、System.getOut() があると楽しいでしょう)
2. System.out を必要な印刷ストリーム (たとえば、任意のファイル) にリダイレクトします
。 3. System.out.println() を使用する代わりに、以下を実行する印刷関数を使用します。
print(Object o){
defaultOut.println(o);//この関数で defaultOut が可視であると仮定
System.out.println(o); }
メソッドSystem.setOut
および を使用すると、および変数が参照するオブジェクトSystem.setErr
を変更できます。これらを使用して、デフォルトのオブジェクトを出力をキャプチャするオブジェクトに置き換えたり、それを使って好きなことをしたりできます。PrintStream
System.out
System.err
PrintStream
ファローアップ
出力をコマンドラインに送る必要があるため、PrintStreams を置き換えたくありません。
あなたのコードはそれを処理できます:
OutputStream
書き込み、さらに出力をキャプチャする のサブクラスを作成します。OutputStream
「その他」のインスタンスをコンストラクターのパラメーターにします。 System.out
ますSystem.err
。System.out
とのSystem.err
値をそれぞれコンストラクター パラメーターとして使用します。PrintStream
ます。System.setOut
て andをインスタンスSystem.setErr
に置き換えます。System.out
System.err
PrintStream
メッセージコンソールを使用すると、出力をテキストペインに表示し、コマンドラインに表示できます。