2017-01-02 3 views
1

まず、私はあなたがプロセスを開始し、それから、コンソール出力を取得したい場合、あなたはたとえば、このコードを使用することができることを承知している:Javaプログラムはどのようにして独自のコンソール出力を完全に読み取ることができますか?すべての

ProcessBuilder builder = new ProcessBuilder(command); 
builder.redirectErrorStream(true); 
Process proc; 
proc = builder.start(); 
InputStreamReader isr = new InputStreamReader(proc.getInputStream()); 
BufferedReader reader = new BufferedReader(isr); 
String line; 
while ((line = reader.readLine()) != null) { 
    System.out.println(line); 
} 

しかし、どのような場合、私は全体を取得したいです現在実行中のJavaプログラムのコンソール出力?それは何も欠落することなくそれを読むことが可能ですか?私は、コンソールにテキストを表示するためのプログラムがSystem.out.println()をいくつかの場所で使用していることを確信しています。ほとんどの場合、java.util.logging.Loggerのインスタンスが多く使用されています。

ちなみに、Loggerクラスは最後にSystem.outを使用してログを出力しますか、ログには他の特別な方法を使用していますか?

とにかく、私は何とかこれらのすべてを聞くことができますか?

ありがとうございます。

+0

おそらく、コンソールに出力されたテキストを自分のストリーム/リーダにリダイレクトするクラスのメモリインスタンスを検索する可能性があります。 – kukis

+1

私はあなたがこれをやりたい理由、これが必要だと思う。ほとんどのプログラマは、出力ストリームを悪くすることを悪い考え方と考えています。コンソールからの出力をリダイレクトする方法については以下の答えが正しいですが、より多くのコンテキストが必要になる可能性があります。 – markspace

+1

'Logger'クラスは通常' System.out'を使用しません。 'Logger'クラスは、設定に応じて、' System.err'に出力を送る 'ConsoleHandler'を使用します。しかし、ロガーはハンドラに委譲するだけで、出力メソッド自体は使用しません。 – markspace

答えて

0

これは問題の完全な解決策ではありません。しかし、それは私がどこかで使った一つの回避策です。

プログラムの標準出力をファイルにリダイレクトすることができます。プログラムの標準出力を変更すると、そのファイルを読むことができます。コンソールベースのアプリケーションのために

、あなたが使用してファイルにあなたのコンソール出力をリダイレクトすることができます -

java -cp temp.jar test.Main >> program.log 

program.logファイルでもプログラムがまだ実行されているすべての標準出力メッセージを使用して作成されます。

関連する問題