我之前使用System.out.println
在Netbeans中查看我的java控制檯應用程序的輸出。是否有可能加快log4j或slf4j輸出(也可能全局關閉它們)?
程序花費了大約10分鐘運行並顯示運行時的輸出。
現在我已經取代所有System.out.println's
與slf4j's
記錄
private final Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.info("number of rows of x: " + numberOfx);
現在程序需要28分鐘運行和顯示輸出(沒有進行任何的改變)。
我還沒有在pom
文件或其他任何地方做過任何額外的配置。我剛纔添加的slf4j-api:1.7.1
和slf4j-simple:1.7.18
當地罐子到NetBeans項目,並增加了進口
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
因爲我只是做了這麼多,而且由於輸出顯示紅色Netbeans的控制檯上,我假設輸出沒有寫入磁盤。
如果是這樣,有兩個問題:
1.是log4j
或slf4j
輸出已知比System.out.println
慢?
2.有什麼方法可以加快輸出嗎? (可能因爲一些可能被禁用的內部檢查而變得很慢)
3.我需要我的程序運行得很快。是否有辦法全局關閉日誌記錄,而不是去查看每個文件並註釋掉logger.info()
語句?
哇,如果日誌加入18分鐘的加時賽的時候,你必須像產生一個極大的日誌信息。 – Andreas
@Andreas:是的,有兩個功能;一個叫25000次,另一個叫6400萬次。這些函數每個都有一個輸出語句。註釋掉所有輸出,程序在45秒內執行(與啓用輸出的10分鐘和28分鐘相比)。但是這繼續顯示出輸出是多麼昂貴。不知怎的,我覺得如果設計得很好,輸出/記錄功能可能在計算上花費較少。我當然會刪除我的一些輸出語句... – Nav
因此,您的原始代碼是將6400萬行輸出寫入控制檯?它們的滾動速度比讀取它們的速度快並且消失,所以這有什麼意義呢?減少你的日誌。即使你將輸出重定向到一個文件,那也是太多的日誌記錄。 – Andreas