我想通過在 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? 了解這些方法之間的細微差別的問題,但最重要的是它們會很懶惰。
添加回答
舉報
0/150
提交
取消