外部 JAR ファイルから使用されている STDERR ストリームをインターセプトする方法はありますか?
私の状況では、XYZ に STDERR を使用する独自のプログラムと、ABC に STDERR を使用する外部 JAR があります。両方をマージしてエンドユーザー向けに正しくフォーマットしたいのですが、JAR の STDERR をキャッチまたはリダイレクトする方法 (正しい用語は何ですか?) がわかりません。
ありがとう、
Java プログラムの標準エラー ストリームは でSystem.err
、標準出力ストリームはSystem.out
です。
System.setErr(java.io.PrintStream)と System.setOut を PrintStream オブジェクトに使用して、これらの両方をオーバーライドできます。しかし、これはグローバルに置き換えられます。書式設定を行う PrintStream の実装を提供し、これを両方の標準エラー ストリームとして設定します。
2 つの異なるプロセスがある場合、別のプロセスのエラーストリームを (入力ストリームとして) 取得し、そこからコンテンツを読み取り (そこから)、標準エラー ストリームに書き込むことができます。
簡単な解決策ではありませんが、選択したクラスのバイトコードを変更し、静的フィールド System.err へのすべての参照を置き換えるクラスローダー、Java エージェント、またはプリプロセッサを作成して、カスタム出力ストリームにアクセスすることができます。