2010-03-08 53 views
8

我正在使用一個庫,當我參考它時,會向控制檯輸出一堆多餘的信息。有沒有辦法讓圖書館的輸出消失?如何阻止Java庫打印到控制檯?

+1

哪個庫是類似的方法signatutes全部更換sys.out.printXXx? – Romain 2010-03-08 17:58:34

回答

15

如果使用日誌框架(log4j,commons-logging等),則可以編輯/創建屬性文件來指示高日誌記錄閾值。在log4j的,這將是這樣的:

log4j.logger.org.library=error 

如果磁帶庫使用System.out,這不是擺在首位好的庫。您可以致電System.setOut(yourDummyPrintStream)(和System.setErr(..))更改PrintStream。您的虛擬打印流只會吞下數據,而不會打印到任何地方。

0

我不認爲任何像樣/理智的圖書館都使用System.out來記錄消息。所以我可以放心地假設它使用某種記錄框架。將特定軟件包配置爲處於更高日誌記錄級別,如「錯誤」或「致命」,以便您不會看到這些消息。

0

該庫可能使用記錄器,log4j或slf4j。您可以爲該記錄器創建配置文件,然後將日誌級別設置爲WARN或更高。這將停止打印信息。

7

您是否嘗試過使用System.setOut()System.setErr()來設置OUT和ERR通道?

4

我投了簡的答案,並想補充:

使用放樣意味着你不能打印到在你的程序的System.out了。

你可以做

PrintStream oldOut=System.out 

首先要保存它,然後調用專列去改變它 - 然後就打印到oldOut。

我已經使用它作爲迷你日誌記錄器 - 抓住System.out,用自己的流替換它,並讓我自己的流抓取堆棧跟蹤並找出調用方法,以便它可以在轉發到原始System.out之前添加方法名稱。

非常慢,但很好的調試。有一個設置,所以你可以恢復到只是打印字符串,隱藏所有輸出或篩選消息來自哪個方法(這是我的主要用法,隱藏所有其他垃圾,所以我可以看到我自己的輸出)。

2

考慮使用AspectJ,它可以用你所選擇的語句來替換所有的System.out.println(),這是一個日誌語句。這也適用於第三方jar文件(查找加載時織入)。

0

如果LIB使用打印我會使用ASM與另一個類的調用與燕子等