首頁  >  文章  >  後端開發  >  golang log如何設計

golang log如何設計

(*-*)浩
(*-*)浩原創
2019-12-03 11:10:053560瀏覽

golang log如何設計

golang的原生日誌模組無法滿足需求,而開源的第三方包,也不完全夠用。使用者較多的logrus,卻沒有rotate功能,這已經是眾所皆知的。對維運來說,當然是希望日誌的處理中比較簡單、實用、夠用。不需要額外的透過系統來實現logrotate。

1、需求

從需求面來說,主要有幾個面向:         (建議學習:go

一方面一定是需要有輪替功能,而且要限制保留的日誌份數。至於是按文件大小,還是按天、按小時切割,則可以討論。

另一方面,對於日誌的級別,如果能夠動態調整,則方便日誌關閉常規日誌,在線調試時,動態降低日誌的等級,打印更多debug日誌。

2、研究

目前主要的有幾個:

github.com/sirupsen/logrus。用户广泛,但明确表示不支持日志切割功能,建议通过hook走日志系统。
github.com/natefinch/lumberjack。支持以文件大小的方式切割日志。用户偏少。
gopkg.in/inconshreveable/log15.v2。比较老牌。
github.com/lestrrat-go/file-rotatelogs。基于小时数进行切割的小众包。
github.com/xiaomi-tc/log15。小米基于log15写的二次封装增加了切割功能。但只有2星。

有前同事基於log15寫的二次封裝,但log15.v2/ext的套件不太容易理解。

github.com/ngaut/log。完全不依赖第三方包。可基于日期及小时进行切割。

綜上,ngaut比較適合學習和了解封裝過程。而基於logrus則是比較可靠的選擇,底層需要其他套件實現的切割功能。

3、功能設計

主要點:

由logrus來完成日誌功能。

需要完成日誌切割,歷史日誌需要壓縮

支援參考Go程式碼遇到的問題提供的level熱更新

以上是golang log如何設計的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn