博客 / 詳情

返回

高性能日誌庫go-logger v2.0.3

來源:《高性能日誌庫go-logger v2.0.3》

go-logger v2.0.3發佈,該版本主要針對性能進行優化. github地址:https://github.com/donnie4w/go-logger

go的結構化日誌庫非常多,go-logger是比較早期開發的一個庫, 以簡潔為主要特徵。simplelog是後期給數據庫binlog日誌開發的一個日誌庫,由於功能與go-logger有重合,就把兩個庫的代碼就合併了。目前兩個庫代都會一起更新,實現是一致的。

go1.21版本就在標準庫加上結構化日誌庫log/slog,該日誌庫性能非常優越,根據壓測結果,slog的性能要比社區常用的第三方結構化日誌庫好許多,所以大部分項目日誌庫可以直接使用slog。

go-logger 將繼續維護,原因是:

  1. go-logger 比slog佔用更少的內存,效率比slog更高
  2. go-logger 對日誌文件處理,如 日誌文件按大小切分備份,按日期:月,日,時切分備份,日誌文件壓縮備份,日誌文件限制最大文件數等特性,目前slog還不具備這些特徵。

go-logger 函數文檔


性能測試數據:


輸出數據:

2023-09-30T17:37:15.008+0800    DEBUG   logtest/benchmark_test.go:103   >>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[DEBUG]2023/09/30 17:37:19 benchmark_test.go:115: >>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[DEBUG]2023/06/10 01:25:55.028277 log_test.go:46:>>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[DEBUG]2023/06/10 01:25:55.028277 log_test.go:55:>>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
time=2023-09-30T17:37:38.395+08:00 level=INFO source=benchmark_test.go:164 msg=>>>aaaaaaaaaaaaaaaaaaaaaaa

參數説明:

  • ns/op: 每執行一次消耗的時間
  • B/op:每執行一次消耗的內存
  • allocs/op:每執行一次分配內存次數

結果説明:

  1. 不同日誌庫輸出的數據大小是一致的
  2. Zap:uber 官方go日誌庫,測試中是 常規格式(包含文件名行號) debug日誌輸出
  3. Logger:go-logger 測試中是 常規格式(包含文件名行號) debug日誌輸出
  4. LoggerNoFORMAT: 為go-logger去格式化日誌輸出
  5. LoggerWrite: 為go-logger提供的原始數據高速寫入文件的方法,原是 simplelog 高效輸出數據庫binlog日誌數據的方法
  6. Slog:官方 log/slog 測試為常規格式(包含文件名行號)info 日誌輸出

可以看到 測試數據

  • 時間消耗: go-logger 4500ns/op左右 , slog與zap大致在5600ns/op 左右
  • 內存消耗:go-logger 64B , slog與zap大致在330ns/op 左右
  • 不同機器跑測試程序會有不同的結果,這個主要是一個比較作用。

測試結果:

  1. 性能 : go-logger > slog ≥ zap
  2. 內存消耗 : go-logger 遠小於 slog 與 zap

説明:go-logger 性能與內存上的優勢,主要歸功於其內存使用上的優化

多次測試結果:

對比可知,不同時間測試結果都相似

  • 可以看到,這幾個日誌庫的性能都非常高。可以根據項目的實際需求選擇使用任一日誌庫。
  • 如果對性能與內存要求苛刻或對日誌文件備份處理有要求時, 建議使用go-logger。
  • 如果官方日誌庫slog已經能滿足項目需求,建議使用slog,由官方維護的庫總是靠譜的;對於一般業務來説:性能4500ns/op與5600ns/op 並無實質區別。
  • go-logger 會持續進行優化和維護,包括功能與性能.

測試程序


有任何問題或建議請Email:donnie4w@gmail.com或 https://tlnet.top/contact 發信給我,謝謝!

user avatar rc5uf6xy 頭像 panshenlian 頭像 zhugezifang 頭像 phodal 頭像
4 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.