有沒有一種方法可以逐行捕獲我的Java程序的stdout和stderror?Java:將stdout和stderr編程到某種處理程序
也許類似於您使用addHandler
向記錄器實例添加處理程序的方式。
編輯:我不想更換默認處理程序 - 我仍然需要輸出顯示在命令行上。
有沒有一種方法可以逐行捕獲我的Java程序的stdout和stderror?Java:將stdout和stderr編程到某種處理程序
也許類似於您使用addHandler
向記錄器實例添加處理程序的方式。
編輯:我不想更換默認處理程序 - 我仍然需要輸出顯示在命令行上。
通過使用System.setOut()和System.setErr()您可以將標準輸出和錯誤流設置爲任何PrintStream並捕獲所有內容。
此外: 我不知道是否存在任何優雅的方式來做到這一點,但這樣做的一個方法是:
1.保存默認的輸出流
的PrintStream defaultOut = System.out的;
(System.getOut()雖然會很有趣)
2.將System.out重定向到您想要的打印流(例如任何文件)
3.不要使用System.out.println()函數,它的確如下:
print(Object o){
defaultOut.println(o); //假設defaultOut在這個函數中是可見的
System.out.println(o); }
的方法System.setOut
和System.setErr
允許您更改PrintStream
對象的System.out
和System.err
變量參考。您可以使用它們將捕獲輸出的對象替換爲默認的對象,或者使用它來執行任何您想要的操作。
隨訪
我不想更換PrintStreams,因爲我還需要輸出去命令行。
您的代碼可以照顧的是:
OutputStream
一個子類,它會將所有輸出到另一個OutputStream
實例,還捕獲輸出。使「其他」實例成爲一個構造參數。System.out
和System.err
。System.out
和System.err
值分別作爲構造函數參數。PrintStream
實例。System.setOut
和System.setErr
將System.out
和System.err
替換爲PrintStream
實例。我遲了13秒:( – 2010-11-25 02:55:13
Message Console允許您在文本窗格中顯示輸出並將其顯示在命令行上。
要求是什麼原因?如果是用於日誌記錄或調試,則應考慮使用日誌記錄框架而不是stderr和stdout。如果你使用的是* nix系統,你可以將stdout和stderr重定向到一個文件中並拖拽文件... – beggs 2010-11-25 03:19:55
我正在編寫一個流API,您可以在其中獲得該程序的控制檯輸出。所以無論進入控制檯還可以將其視爲一個http流。 – 2010-11-25 03:33:01