2010-08-08 19 views
0

有沒有辦法讓我攔截從外部JAR文件使用的STDERR流?捕獲並修改從外部JAR發送的stderr

我的情況是,我有我自己的程序使用STDERR for XYZ,以及使用STDERR作爲ABC的外部JAR。我想合併兩個,以便它們爲最終用戶正確格式化,但我不知道如何捕獲重定向或(什麼是正確的術語?)JAR的STDERR?

謝謝,

回答

2

標準誤差流中的Java程序是System.err和標準輸出流是System.out

您可以使用System.setErr(java.io.PrintStream)和System.setOut覆蓋這兩者到PrintStream對象。但這將在全球範圍內取代。提供一個PrintStream的實現,它將執行格式化並將其設置爲兩者的標準錯誤流。

如果你有兩個不同的進程,那麼你可以得到另一個processes's error流(作爲輸入流)從它讀取內容(fromat)並將它寫入到標準錯誤流。

+0

這裏的問題是我不知道每個JAR何時打印。例如。我需要知道它們來自哪個JAR,以便我可以正確格式化它們。沒有辦法來檢測哪些JAR來自哪裏? – sholsapp 2010-08-08 22:14:54

0

不是一個簡單的解決方案,但您可以創建一個類加載器,Java代理或預處理器來修改所選類的字節碼,並將所有對靜態字段System.err的引用替換爲訪問您的自定義輸出流。

+0

有創意,但不是正確的做法。 – TheLQ 2010-08-08 22:57:35