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

时间:2015-02-06 22:09:11

标签: java javafx-8 outputstream

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

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

我将如何做到这一点?

1 个答案:

答案 0 :(得分:1)

用zip程序提取你的jar。查看清单

中的主要类

创建一个新类

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);
    }
 }

现在只需构建你的类(将Javan类路径设置为原始的.jar,你没有代码)然后一旦用jar工具创建一个新的.jar文件并将你的类设置为是清单中的主要内容

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