幫我在辯論在這裏.. :)即使使用slf4j,你應該保護你的日誌嗎?
這裏http://www.slf4j.org/faq.html#logging_performance的SLF4J網站表示由於參數測井,錄井衛兵是沒有必要的。即而不是寫:
if(logger.isDebugEnabled()) {
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
}
你可以逃脫:
Object entry = new SomeObject();
logger.debug("The entry is {}.", entry);
這真的是好,或者它招致了(雖然更低)創建傳遞給此跟蹤方法的靜態字符串的成本..?
謝謝fgelz,這是最明確的解釋,所以我改變了主意。讓你認爲,儘管有所有不同的框架,但在日誌世界中仍然有創新的空間,在推遲昂貴的操作方面..也許與代表 –
@MarkD JDK 8項目Lambda將幫助創新(http:// openjdk .java.net/projects/lambda /) – fglez
你也應該知道調用可變參數方法(如logger.debug(String,Object ..)實際上是在封面logger.debug(String,new Object [所以如果你沒有包裝這些調用,那麼你每次遍歷這個方法時都會創建一個新的Object數組,即使你從來沒有寫過內容,如果你有一個高性能的系統或者經歷內存壓力,那麼隨着時間的推移,這可能會增加;如果使用了很多,logger.isDebugEnabled()調用將被一個體面的JIT所吸引,SLF4J專門爲此提供了一個和兩個參數,但是對於更多的參數流失 – AlBlue