Github 中最受歡迎的Go日誌庫集合整理
任何一個系統開發,都離不開完備的日誌系統。go 日誌不同其他語言,比如 java 由於 commons-logging 日誌標準,和不同實現 如log4j,slf4j,logback,單都是統一呼叫標準介面。但是在golang 語言開發中,目前閱讀了幾個開原始碼,都是自己實現了一套日誌記錄標準,並沒有採用go 官方 log 模組。golang's log 模組主要提供了3類介面。分別是 “Print 、Panic 、Fatal ”,對每一類介面其提供了3中呼叫方式,分別是 "Xxxx 、 Xxxxln 、Xxxxf",基本和fmt中的相關函式類似;單功能有限,很難比如按天,按照容量自動輸出拆封生成新日誌。如果自己開發一套日子,基本上要滿足日誌等級輸出如DEBUG,INFO,WARN,ERROR/FATAL 、支援輸出 console 和滾動式檔案、引數格式化輸出、自定義格式化模板,當然如果支援更高級別如按照pakcage輸出到不同檔案,按照日誌級別輸出到不同地方那就更帥氣了。
下面羅列覺得可能後期會用開源專案
project | stars | forks | description |
---|---|---|---|
8607 | 1071 | Logrus is a structured logger for Go (golang), completely API compatible with the standard library logger. | |
zap | 5292 | 361 | Blazing fast, structured, leveled logging in Go. |
1414 | 85 |
The zerolog package provides a fast and simple logger dedicated to JSON output. |
|
220 | 32 | BLog4go is an efficient logging library written in the Go programming language, providing logging hook, log rotate, filtering and formatting log message. | |
1193 | 201 | Seelog is a native Go logging library that provides flexible asynchronous dispatching, filtering, and formatting. |
logrus是已知的Go語言日誌庫中在github中stars數最多的日誌庫,功能強大,效能也不錯。另外值得一提的是logrus的一個fork庫
gogap/logrus,可以配置輸出到檔案和graylog日誌系統,基礎的level、呼叫鏈、行號,檔案切分都有,特色是結構化日誌可以被統計和索引,藉助graylog就可以做日誌分析,不過這個庫很久沒有維護了。
zap是Go中一個快速,結構化,分級日誌庫,Uber出品。能夠啟用強大的ad-hoc分析, 靈活的儀表板, 其功能超過其他工具ELK, Splunk, 和 Sentry. 所有日誌訊息都是JSON-serialized。具體參考 Go高效能日誌庫zap詳細分析 。
zerolog也是一款效能相當好的日誌庫,有趣的是zerolog和zap都在自家的Github庫首頁中的效能對比資料裡打敗了對方,zerolog 是受到uber 的日誌庫zap 的啟發,golang社群裡,對高效能日誌庫的追求,引發了編譯器團隊對一些使用模式的優化。
blog4go是高效能日誌庫。創新地使用“邊解析邊輸出”方法進行日誌輸出,同時支援回撥函式、日誌淘汰和配置檔案。可以解決高併發,呼叫日誌函式頻繁的情境下,日誌庫造成的效能問題。
最後 提供兩個 benchmark庫,提供的部分Go日誌庫的效能對比資料,供技術選型時參考