Logback 對比 Log4j2
測試分爲本地測試端和服務器端,分別對gateway網關進行日誌輸出的壓測
同步日誌,不打印日誌
logback(150併發,0間隔,循環50次)
log4j2(150併發,0間隔,循環50次)
同步日誌,打印日誌(大小4k,循環輸出100次)
logback(150併發,0間隔,循環50次)
log4j2(150併發,0間隔,循環50次)
異步打印日誌(大小4k,循環輸出100次,僅輸出文件)
logback(150併發,0間隔,循環50次)
log4j2(150併發,0間隔,循環50次)
測試環境
logback(50併發,0間隔,循環20次)
不打印日誌
打印日誌
log4j2(50併發,0間隔,循環20次)
不打印日誌
打印日誌
打印日誌每條30k輸出1000次(一次請求30M)
log4j2(50併發,0間隔,循環20次)
logback(50併發,0間隔,循環20次)
測試結果
對比響應時間
本地測試log4j2完爆logback(網關給的是2G堆內存)但是還是以測試環境爲準:
- 在不輸出日誌和僅輸出400k日誌的情況下log4j2的99%,95%相比logback的耗時都有所減少;
- 同樣開啓異步日誌的情況下輸出30m日誌的99%與95%差距在10倍以上.
對比jvm
對比30M日誌輸出時的JVM情況:
- logback進行了大量的YCG去清理臨時的臨時變量,而log4j2的變化相對穩定;
- logback的在異步處理的時候使用的是阻塞隊列,日誌輸出量大導致寫盤時間長隊列堆積大使得處理日誌時間過長;
- 對比線程變化logback線程相對變化大於log4j2.
總結
- 在線上環境關閉控制檯輸出會對性能有所提升;
- 相同情況下對比,log4j2性能更優;
- 在對日誌輸出場景比較多的情況下可以考慮將logback更換爲log4j2;