我正在閱讀Java中的參數化日誌記錄,因爲它執行延遲評估,所以它使用參數化日誌記錄而不是串聯。無法理解爲什麼要使用參數化日誌記錄
所以不是
logger.debug("My text is" + x);
使用:
logger.debug("My text is {}", x);
如果跟蹤級別設置爲只有信息的日誌,爲什麼拼接發生在第一個場景?
另外,如果我有一個耗時的日誌功能,據說使用:
logger.debug("My text is {}",() -> compute());
,而不是
logger.debug("My text is {}", compute());
在這種情況下,爲什麼被認爲是一個更好的辦法拉姆達方法。在字符串連接的情況下不會計算也會被稱爲懶惰嗎?
感謝您的詳細解釋。這是否意味着在調用任何函數之前,先評估所有參數,然後函數被稱爲 – user1692342
@ user1692342,如果需要一些參數,則爲yes –
@ user1692342正確。 lambda方法只允許將參數作爲運行'compute()'的'Supplier'來評估。因此它被完全評估,但實際的compute()方法尚未運行。 – Kayaman