2016-04-26 45 views
0

我已經構建了一個使用外部罐子的Java控制檯程序。我想在控制檯中觀察我自己的System.out.println日誌,但是它們大部分都會被某些Logger(來自軟件包org.slf4j;)生成的控制檯上的消息所淹沒,該消息會輸出大量文本。Java:如何僅顯示System.out.print調用?

我的問題是我不能改變使用的記錄器的代碼,因爲它是在一個罐子裏包着的,沒有它的來源。有沒有辦法只顯示我的System.out.println電話?或者以其他方式安靜通過此代碼生成的消息我沒有源代碼?

謝謝!

+1

可能更改日誌級別省略大部分消息。 –

+0

如何做到這一點? – ThePartyTurtle

+0

@KevinO爲您的問題解決了更詳細的問題。 –

回答

1

有一對夫婦的做法。

  1. 更改日誌級別或位置。除非以編程方式設置,否則SLF4j系統有一個配置文件。修改級別,使其僅顯示警告或僅顯示錯誤。或者,更改記錄器,使其轉到文件而不是stdout。

  2. 如果你在一個* nix系統上,並根據你如何調用程序,可以做類似於java PROGRAM | grep -v "org.slf4j"(或者任何包)。這種方法將刪除與顯示相匹配的所有行。

0

這聽起來像你正在使用的使用SLF4J其日誌記錄,這是一個相當標準的庫庫。雖然所有這些庫都可以做有用的事情,但有一點很有幫助,使用它們的挑戰之一是需要將它們的日誌記錄集成到應用程序使用的日誌中。 SLF4J提供了許多庫使用的標準日誌記錄界面,並允許它們綁定到Logback或log4j等standard logging implementation

我希望大多數使用SLF4J的庫將取決於只有SLF4J的API,並沒有一個具體的日誌實現他們的依賴性結合。默認情況下,SLF4J使用「no-op」記錄器,這意味着不輸出日誌記錄(除了初始警告,它就是這樣做的)。如果您想要進行測試,可以添加slf4j-nop庫來刪除所有日誌記錄。

但因爲你實際看到的輸出,似乎你正在使用的圖書館也是因某些原因包括結合到實際的日誌框架。在這一點上,您的選擇是:

  1. 找出綁定和實際日誌框架如何進入您的類路徑並將其刪除。 (如果你使用Maven來管理你的依賴,例如,你可能會爲他們添加一個<exclude>元素。),或
  2. 圖出正在使用的日誌框架(如果你使用Maven的,我覺得依賴:樹型輸出很有用),本質上也是將它用於您的應用程序,並將其配置爲以您想要的方式進行記錄,從而隱藏您認爲不相關的消息。

如果當初你是如何在你的應用程序獲得這個庫的依賴關係(我已經給信息Maven的,因爲它是我最熟悉的,它是相當標準)的詳細信息,或者什麼日誌框架你從而無意中添加到您的應用程序,有人可能能夠進一步指導您。