2 つの Jar ファイルを持つ Java アプリケーションを作成しました。Jar1 は、次のコードを使用して、Jar2 を初期化および実行するために使用されます。
Process process = runtime.exec( "java -jar Jar2.jar" );
printLogs( process );
.
.
.
private static boolean printLogs( Process process ) {
try {
BufferedInputStream logStream = new BufferedInputStream( process.getInputStream() );
String logs = "";
int buffer = 0;
while ( ( buffer = logStream.read() ) != -1 ) {
logs += (char)buffer;
}
if( !logs.isEmpty() ) logger.debug( logs );
} catch (IOException e) {}
return true;
}
Log4Jを使用してJar2から多くのログを出力します。
logger.debug( "..." );
しかし、Jar2 のログはどれもコンソールに出力されませんでした。ログがコンソールではなくJar1に返されるためだとわかったので、上記のコードを使用して返されるストリームを出力しました。ログは正常に出力されるようになりましたが、すべての Jar2 プロセスが終了した後、Jar1 ですべてのログが一度に出力されます。
問題は、Jar2 のすべてのプロセスが終了するのを待つ代わりに、Jar2 の各ログ行を時間内に出力できますか?
Jar2 は長いプロセスであるため、アプリケーションの処理中にこれらのログを確認できることが重要です。