2015-02-06 86 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的。

相關問題