溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何設(shè)計(jì)go語言中的log

發(fā)布時(shí)間:2020-06-21 11:49:11 來源:億速云 閱讀:393 作者:元一 欄目:編程語言

Go語言是谷歌2009發(fā)布的第二款開源編程語言。Go語言專門針對多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持并行進(jìn)程。

golang的原生日志模塊不能滿足需求,而開源的第三方包,也不完全夠用。用戶較多的logrus,卻沒有rotate功能,這已經(jīng)是眾所周知的。對于運(yùn)維來說,當(dāng)然是希望日志的處理中比較簡單、實(shí)用、夠用。不需要額外的通過系統(tǒng)來實(shí)現(xiàn)logrotate。

1、需求

從需求方面來說,主要有幾個(gè)方面: 

一方面肯定是需要有輪轉(zhuǎn)功能,而且要限制保留的日志份數(shù)。至于是按文件大小,還是按天、按小時(shí)切割,則可以討論。

另一方面,對于日志的級別,如果能夠動(dòng)態(tài)調(diào)整,則方便日志關(guān)閉常規(guī)日志,在線調(diào)試時(shí),動(dòng)態(tài)降低日志的等級,打印更多debug日志。

2、調(diào)研

目前主要的有幾個(gè):

github.com/sirupsen/logrus。用戶廣泛,但明確表示不支持日志切割功能,建議通過hook走日志系統(tǒng)。
github.com/natefinch/lumberjack。支持以文件大小的方式切割日志。用戶偏少。
gopkg.in/inconshreveable/log15.v2。比較老牌。
github.com/lestrrat-go/file-rotatelogs。基于小時(shí)數(shù)進(jìn)行切割的小眾包。
github.com/xiaomi-tc/log15。小米基于log15寫的二次封裝增加了切割功能。但只有2星。

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

github.com/ngaut/log。完全不依賴第三方包。可基于日期及小時(shí)進(jìn)行切割。

綜上,ngaut比較適合學(xué)習(xí)和了解封裝過程。而基于logrus則是比較靠譜的選擇,底層需要其他包實(shí)現(xiàn)的切割功能。

3、功能設(shè)計(jì)

主要點(diǎn):

由logrus來完成日志功能。

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

支持參考Go代碼遇到的問題提供的level熱更新

以上就是golang log如何設(shè)計(jì)的詳細(xì)內(nèi)容,更多請關(guān)注億速云其它相關(guān)文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI