2017-07-24 24 views
1

Log4j 2 manual給出瞭如何使用lambda表達式爲「懶記錄」的一個例子:的Log4j 2拉姆達「懶日誌」

logger.trace("Some long-running operation returned {}",() -> expensiveOperation()); 

它還給出瞭如何使用格式參數,以避免不必要的字符串連接的例子:

logger.debug("Logging in user {} with birthday {}", user.getName(), user.getBirthdayCalendar()); 

我的問題:我可以通過簡單地用一個正常的字符串連接方法提供一個拉姆達獲得同樣的性能優勢?

logger.trace(() -> "Concatting " + user.getName() + " with " + expensiveOperation()); 

回答

2

最高效的在你的例子是

logger.trace("Concatting {} with {}",() -> user.getName(),() -> expensiveOperation()); 

這樣

  1. 既不方法被調用,除非調試級別TRACE
  2. 創建任何String對象: Log4j2使用一個線程本地的StringBuilder來實現垃圾回收
  3. 您避免爲String連接分配一個臨時的StringBuilder(當你使用「+」兩個字符串時,Java會做什麼)
+0

這會清除一切。謝謝! –