0

プログラム内で呼び出されたクラスのメソッドから出力ストリーム(特にSystem.out)を取得またはインターセプトする方法はありますか?

と呼ばれる新しいMethodオブジェクトを作成しmain、を使用してクラスにロードし、適切な引数を使用URLClassLoaderして呼び出しています。main.invoke();

そのメソッドの実行からの出力をキャプチャできるようにしたいのですが、それでも画面に表示されても問題ありませんが、出力も処理できる必要があります。

注:このメソッドは、実際には継続的に実行されるサーバーアプリケーションです。

さらに説明が必要な場合はお知らせください。また、このようなことが可能かどうかもお知らせください。

助けてくれてありがとう!

4

1 に答える 1

1

System.outまたはSystem.err出力ストリームについて話していると仮定します...

提案した内容を実装する最良の方法は、OutputStreamを引数として渡すことです。これは可能ですSystem.outが、簡単に変更できます。

引数を渡さずにこれを行う方法は、デフォルトのSystem.outを、スタックをチェックして呼び出し元を判別する独自のSystem.outに置き換えることです。他に選択肢がない場合を除いて、これを行うことをお勧めします。たとえば、呼び出しているメソッドのコードにアクセスできません。

他のOutputStreamについて話している場合は、使用されているoutputstreamのコードを、出力をトレースできるコードに置き換える必要があります。これは最もハッキーなソリューションですが、機能します。

于 2012-06-24T10:25:57.010 に答える