2015-02-06 46 views
1

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

我猜,从我迄今为止所做的阅读中,棘手的部分是要实时获取数据,而不是在数据流关闭之后。

我该怎么做呢?

+0

你想要执行它的任何理由,而不是简单地提供额外的类,然后直接在现有的JVM中调用jar?您可以轻松地将标准重定向。还要注意,如果这是日志输出,重新配置日志框架可能非常简单。 – 2015-02-06 22:10:42

+0

@ThorbjørnRavn Andersen我不知道这是可能的。有关如何做到这一点的任何提示? – 2015-02-06 22:22:15

+0

将jar放在你的类路径中。找出旧的main()方法在哪里。写一个新的main()来完成你所需要的,并调用旧的main()。另请参阅http://stackoverflow.com/questions/2851234/system-out-to-a-file-in-java – 2015-02-07 01:00:00

回答

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

现在只需建立自己的类(设置爪哇类路径是你原来的.jar,你不必为代码)那么一旦完成使用jar工具创建一个新的.jar文件并将您的类设置为清单中的主类

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

相关问题