我创建了一个包含 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 是一个漫长的过程,我可以在应用程序处理时看到这些日志,这一点很重要。