2013-01-15 50 views
1

我在很多地方使用logger.info("statement" + string)在我的應用程序,包括for循環如果語句。isInfoEnabled()爲共享日誌記錄

我檢查並發現,即使沒有啓用「INFO」級別,也會先創建字符串消息。

如何在創建字符串之前檢查是否啓用了INFO,而不是在我實現它的每個位置添加isInfoEnabled()

另外,在使用記錄器時,減少開銷的最佳方法是什麼?

而不是+如果我們使用實用方法,如使用Stringbuilder返回連接字符串,會更好。

我使用log4j.xml來配置記錄器杆。

回答

4

正確的解決方案是使用slf4j/logback,它支持在沒有前端字符串生成的情況下傳遞原始數據。使用Commons Logging時,如果將+替換爲StringBuilder,則無法完成此操作,並且性能也不會提高,因爲字符串連接表達式已編譯爲涉及StringBuilder的代碼。

0

我建議你創建程序調用的爲,自己的架構在記錄儀

是這樣的(僞代碼,我不知道記錄器實現)

class OwnLogger extends Logger { 

    public static function info(Object o){ 
     if(isInfoEnabled()){ 
      super.info(o); 
     } 
    } 

} 
+0

我使用公地日誌記錄,而不是log4j。這可以用於公用日誌記錄嗎? –

+0

@DebajyotiDas這對於任何日誌記錄實用程序都是抽象的,允許您僅將'isInfoEnabled'放在一個地方。 –

+0

你可以解釋一下如何創建實用工具方法嗎? –