亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Log4J2 進行延遲日志記錄中的“Lambda 可以用方法引用替換”

使用 Log4J2 進行延遲日志記錄中的“Lambda 可以用方法引用替換”

飲歌長嘯 2023-03-17 15:25:29
我想通過在 Log4J2 中使用惰性日志記錄來提高我的日志記錄效率。這意味著我正在使用 lambda,它僅在日志級別正確/滿足時執行。例子:List<Integer> someList = Arrays.asList(1,2,3); log.info("Size of list is {}.", () -> someList.size());我的 IDE 告訴我,我可以用方法引用替換這個符號,如下所示:log.info("Size of list is {}.", someList::size);我現在的問題是:這種方法(方法參考)是否仍然具有惰性日志記錄的好處,即昂貴的計算任務僅在日志記錄中執行,當日志級別達到時,或者我是否失去了全部好處,當我'我沒有明確使用 lambdas 嗎?
查看完整描述

1 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

查看 Log4j2 源代碼,您會發現該類Logger定義Supplier<?>為使其惰性,例如在您可以找到的AbstractLogger.logIfEnabled()方法之一中:

@Override

public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final String message,

            final Supplier<?>... paramSuppliers) {

        if (isEnabled(level, marker, message)) {

            logMessage(fqcn, level, marker, message, paramSuppliers);

        }

}

Supplier<?>只有在啟用關卡時才會調用 ,使其變得懶惰。

Supplier如果您提供使用 lambda、方法引用或通過編寫new Supplier() { }匿名類,這沒有區別。您可以看看Do lambda expressions have any use except saving lines code? 了解這些方法之間的細微差別的問題,但最重要的是它們會很懶惰。


查看完整回答
反對 回復 2023-03-17
  • 1 回答
  • 0 關注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號