日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

惰性日志

發(fā)布時間:2024/4/11 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 惰性日志 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點(diǎn)擊上方“朱小廝的博客”,選擇“設(shè)為星標(biāo)

做積極的人,而不是積極廢人


來源:itnext.io/lazy-logging-40314cf9bb25


在代碼中添加日志時要當(dāng)心:有時盡管并沒有記錄日志,也會執(zhí)行日志語句。例如下面的代碼:


```javalog.debug("I found {} and {}", getone(), gettwo());```


看起來很好,似乎沒有任何問題。日志輸出字符串中包含了兩個調(diào)試參數(shù)。


所以一切正常,沒有問題?也不盡然。


在記錄日志的代碼中可以看到下面兩個輸入:


  • ?`getone()`

  • ?`gettwo()`


這兩個方法會"一直"調(diào)用。這意味著,即使實(shí)際可能不會執(zhí)行 `log` 語句,仍然會計算所有 `log` 方法傳入的參數(shù)。


如果這些調(diào)用開銷很大,那么可能會浪費(fèi)大量 CPU 資源。


一種典型的解決方案像下面這樣:


```javaif (log.isDebugEnabled()) { log.debug("I found {} and {}", getone(), gettwo());}```


但這種方法相當(dāng)丑陋:這不正是 `log.debug` 完成的功能嗎?只在啟用調(diào)試時才記錄日志。


我們需要的是一個單行調(diào)試語句,只在啟用日志記錄時計算輸入的參數(shù)。


為了解決類似的情況,我們將應(yīng)用 Java 8 Supplier 模式,只在需要的時候執(zhí)行計算。


不幸的是,大多數(shù)日志框架并不支持 Supplier 模式。


至少是直接支持。


實(shí)際上,`logger` 并不期望輸入的參數(shù)一定是字符串,實(shí)際參數(shù)可以是任意對象。`logger` 會調(diào)用對象的 `toString` 方法把它轉(zhuǎn)換為字符串。這里的訣竅是`logger` 只在日志啟用的情況下調(diào)用字符串。


因此,要實(shí)現(xiàn)惰性日志只需要用一個對象來包裝 Supplier,該對象僅在調(diào)用 toString 時調(diào)用 Supplier。


```javaimport java.util.function.Supplier;public class LazyString { private final Supplier<?> stringSupplier; public static LazyString lazy(Supplier<?> stringSupplier) { return new LazyString(stringSupplier); } public LazyString(final Supplier<?> stringSupplier) { this.stringSupplier = stringSupplier; } @Override public String toString(){ return String.valueOf(stringSupplier.get()); }}```


現(xiàn)在可以更新之前的日志代碼,結(jié)果如下:


```javaimport static LazyString.lazy;log.debug("I found {} and {}", lazy(this::getone), lazy(this::gettwo));```


理想情況下,日志框架能直接支持 Supplier。但在等待的過程中,這也是一種變通的辦法。


完整示例代碼,請查看我的 Github 倉庫:<https://github.com/efenglu/lazyLogger>


想知道更多?描下面的二維碼關(guān)注我

好文推薦:

  • 基于數(shù)據(jù)庫實(shí)現(xiàn)的分布式鎖

  • 基于Redis實(shí)現(xiàn)的分布式鎖

  • 為了追求極致的性能,Kafka掌控了這11項要領(lǐng)


>>>Learn More<<


喜歡就點(diǎn)個"在看"唄^_^

總結(jié)

以上是生活随笔為你收集整理的惰性日志的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。