使用 Java 实时重定向控制台输出流

Redirecting Console Output Streams in Real-Time Using Java

我有一个没有源代码的 jar 文件(相对较旧)。我知道当它运行时,它充当服务器(传入和传出连接),并吐出大量控制台输出。我想要做的是让另一个 java 应用程序使用 exec 启动它,并在其内部重定向流,以便它可以在 jar 的输出中监视某些关键字或时间戳。该程序的目的是跟踪某些事件并提供事件发生时间的更大图景,以及"learn"将来发生事件时如何做出反应。

我猜,从我到目前为止所做的阅读来看,棘手的部分是实时获取数据,而不是在流关闭之后。

我该怎么做?

使用 zip 程序解压您的 jar。查看清单中的主要class

新建一个class

public class MyLogger {
    public static void main (String args[]) throws Exception {
         System.setOut(new PrintStream("out.txt"));
         System.setErr(new PrintStream("err.txt"));
         OriginalClassName.main(args);
    }
 }

现在只需构建您的 class(将 Javan class 路径设置为您没有代码的原始 .jar),然后在完成后创建一个新的 .jar 文件jar 工具并将您的 class 设置为清单

中的主要工具

现在当您 运行 您可以使用像 tail 这样的工具(带有 -f 参数)在实时写入文件的同时将文件内容打印到控制台。 Tail 在 Linux 和其他 Unix 平台上可用。对于 Windows 安装例如cygwin.