您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何在golang中使用logger日志包,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
golang是一種編譯語言,可以將代碼編譯為機(jī)器代碼,編譯后的二進(jìn)制文件可以直接部署到目標(biāo)機(jī)器而無需額外的依賴,所以golang的性能優(yōu)于其他的解釋性語言,且可以在golang中使用goroutine來實(shí)現(xiàn)并發(fā)性,它提供了一個(gè)非常優(yōu)雅的goroutine調(diào)度程序系統(tǒng),可以很容易地生成數(shù)百萬個(gè)goroutine。
import "github.com/wonderivan/logger"
在我們開發(fā)go程序的過程中,發(fā)現(xiàn)記錄程序日志已經(jīng)不是fmt.print這么簡單,我們想到的是打印輸出能夠明確指定當(dāng)時(shí)運(yùn)行時(shí)間、運(yùn)行代碼段,當(dāng)然我們可以引入go官方自帶包 import “l(fā)og”,然后通過log.Printf、log.Println等方式輸出,而且默認(rèn)是日志輸出時(shí)只帶時(shí)間的,想要同時(shí)輸出所運(yùn)行代碼段位置,還需要通過執(zhí)行一下指定進(jìn)行相關(guān)簡單的設(shè)置
log.SetFlags(log.LstdFlags | log.Lshortfile) log.SetPrefix(xxx)
然而logger要做的并不僅僅是要這些:
logger支持自定義時(shí)間格式
logger支持不同的日志等級(jí)輸出,能夠有效提高日志輸出性能和檢索;
logger支持控制臺(tái)+文件+網(wǎng)絡(luò)的三種方式輸出,并且可以任意組合。
logger支持控制臺(tái)輸出顏色區(qū)分;
logger支持文本輸出的自定制;
logger支持網(wǎng)絡(luò)日志傳輸,例如直連logstash發(fā)送。
logger包使用起來非常方便,很多配置參數(shù)都有其默認(rèn)值,符合通常使用習(xí)慣。如果僅需要在控制臺(tái)輸出,則只需要引入該包,然后直接使用即可:
package main import "github.com/wonderivan/logger" func main() { logger.Trace("this is Trace") // 由于默認(rèn)輸出,只會(huì)在控制臺(tái)輸出Debug及其以上日志,所以該條不會(huì)輸出 logger.Debug("this is Debug") logger.Info("this is Info") logger.Warn("this is Warn") logger.Error("this is Error") logger.Crit("this is Critical") logger.Alert("this is Alert") logger.Emer("this is Emergency") }
此時(shí)在終端即可輸出(如果是非windows終端,支持日志等級(jí)顏色區(qū)分):
在上邊介紹了logger的基本使用后,接下來詳細(xì)介紹一下該包的文本輸出和網(wǎng)絡(luò)輸出,及其相關(guān)配置項(xiàng)。
當(dāng)前日志輸出等級(jí)共8種,從0-7對應(yīng)的等級(jí)由高到底,可以通過配置參數(shù)進(jìn)行配置,默認(rèn)為DEBG級(jí)別,當(dāng)配置為某個(gè)輸出等級(jí)時(shí),只有大于等于該等級(jí)的日志才會(huì)輸出。不同的輸出適配器支持不同的日志等級(jí)配置。
等級(jí) | 配置 | 釋義 | 控制臺(tái)顏色 |
0 | EMER | 系統(tǒng)級(jí)緊急,比如磁盤出錯(cuò),內(nèi)存異常,網(wǎng)絡(luò)不可用等 | 紅色底 |
1 | ALRT | 系統(tǒng)級(jí)警告,比如數(shù)據(jù)庫訪問異常,配置文件出錯(cuò)等 | 紫色 |
2 | CRIT | 系統(tǒng)級(jí)危險(xiǎn),比如權(quán)限出錯(cuò),訪問異常等 | 藍(lán)色 |
3 | EROR | 用戶級(jí)錯(cuò)誤 | 紅色 |
4 | WARN | 用戶級(jí)警告 | 黃色 |
5 | INFO | 用戶級(jí)重要 | 天藍(lán)色 |
6 | DEBG | 用戶級(jí)調(diào)試 | 綠色 |
7 | TRAC | 用戶級(jí)基本輸出,比如成員信息,結(jié)構(gòu)體值等 | 綠色 |
logger當(dāng)前支持控制臺(tái)、文件、網(wǎng)絡(luò)3種方式輸出,這3中輸出時(shí)通過各自的json格式參數(shù)進(jìn)行設(shè)置,如果未配置某項(xiàng)適配器時(shí),則不初始化也不會(huì)輸出到該適配器。
默認(rèn)配置為只控制臺(tái)輸出DEBG及其以上日志。
{ "TimeFormat":"2006-01-02 15:04:05", // 輸出日志開頭時(shí)間格式 "Console": { // 控制臺(tái)日志配置 "level": "TRAC", // 控制臺(tái)日志輸出等級(jí) "color": true // 控制臺(tái)日志顏色開關(guān) }, "File": { // 文件日志配置 "filename": "app.log", // 初始日志文件名 "level": "TRAC", // 日志文件日志輸出等級(jí) "daily": true, // 跨天后是否創(chuàng)建新日志文件,當(dāng)append=true時(shí)有效 "maxlines": 1000000, // 日志文件最大行數(shù),當(dāng)append=true時(shí)有效 "maxsize": 1, // 日志文件最大大小,當(dāng)append=true時(shí)有效 "maxdays": -1, // 日志文件有效期 "append": true, // 是否支持日志追加 "permit": "0660" // 新創(chuàng)建的日志文件權(quán)限屬性 }, "Conn": { // 網(wǎng)絡(luò)日志配置 "net":"tcp", // 日志傳輸模式 "addr":"10.1.55.10:1024", // 日志接收服務(wù)器 "level": "Warn", // 網(wǎng)絡(luò)日志輸出等級(jí) "reconnect":true, // 網(wǎng)絡(luò)斷開后是否重連 "reconnectOnMsg":false, // 發(fā)送完每條消息后是否斷開網(wǎng)絡(luò) } }
輸出日志開頭時(shí)間格式只要該符合go中Time.Format格式即可,例如:
時(shí)間類型 | 時(shí)間格式 |
---|---|
ANSIC | "Mon Jan _2 15:04:05 2006" |
UnixDate | "Mon Jan _2 15:04:05 MST 2006" |
RubyDate | "Mon Jan 02 15:04:05 -0700 2006" |
RFC822 | "02 Jan 06 15:04 MST" |
RFC822Z | "02 Jan 06 15:04 -0700" |
RFC850 | "Monday, 02-Jan-06 15:04:05 MST" |
RFC1123 | "Mon, 02 Jan 2006 15:04:05 MST" |
RFC1123Z | "Mon, 02 Jan 2006 15:04:05 -0700" |
RFC3339 | "2006-01-02T15:04:05Z07:00" |
RFC3339Nano | "2006-01-02T15:04:05.999999999Z07:00" |
Kitchen | "3:04PM" |
Stamp | "Jan _2 15:04:05" |
StampMilli | "Jan _2 15:04:05.000" |
StampMicro | "Jan _2 15:04:05.000000" |
StampNano | "Jan _2 15:04:05.000000000" |
RFC3339Nano1 | "2006-01-02 15:04:05.999999999 -0700 MST" |
DEFAULT | "2006-01-02 15:04:05" |
對應(yīng)的輸出開頭時(shí)間格式為:
========RFC1123Z time format======== Thu, 02 Aug 2018 18:48:04 +0800 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug R ========Stamp time format======== Aug 2 18:48:04 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug Stamp ========StampMilli time format======== Aug 2 18:48:04.489 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug StampMilli ========StampNano time format======== Aug 2 18:48:04.490002155 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug StampNa ========RubyDate time format======== Thu Aug 02 18:48:04 +0800 2018 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug Ru ========RFC822 time format======== 02 Aug 18 18:48 CST [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug RFC822 ========RFC822Z time format======== 02 Aug 18 18:48 +0800 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug RFC822Z ========RFC1123 time format======== Thu, 02 Aug 2018 18:48:04 CST [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug RFC ========RFC3339 time format======== 2018-08-02T18:48:04+08:00 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug RFC3339 ========RFC3339Nano time format======== 2018-08-02T18:48:04.490377325+08:00 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Deb ========ANSIC time format======== Thu Aug 2 18:48:04 2018 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug ANSIC ========UnixDate time format======== Thu Aug 2 18:48:04 CST 2018 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug Unix ========RFC850 time format======== Thursday, 02-Aug-18 18:48:04 CST [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug ========Kitchen time format======== 6:48PM [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug Kitchen ========StampMicro time format======== Aug 2 18:48:04.490662 [DEBG] [github.com/wonderivan/logger/log_test.go:115] Debug StampMicro
通過調(diào)用logger.SetLogger(config string)方法設(shè)置參數(shù),config支持json配置,也支持指定內(nèi)容為json配置的文件路徑,例如:
// 通過配置參數(shù)直接配置 logger.SetLogger(`{"Console": {"level": "DEBG"}}`) // 通過配置文件配置 logger.SetLogger("/home/log.json")
1、當(dāng)日志文件配置項(xiàng)append為true時(shí),如果當(dāng)前寫入的日志發(fā)生跨天(daily為true)或超過最大限制時(shí),會(huì)創(chuàng)建一個(gè)新文件,原有文件格式被重命名為: ****.xxxx-xx-xx.xxx.xxx 格式,例如:當(dāng)向app.log寫入日志時(shí),觸發(fā)了創(chuàng)建新文件操作,則將app.log重命名為 app.2018-01-01.001.log, 如果此時(shí)app.2018-01-01.001.log已經(jīng)存在,則將剛才的app.log重命名為 app.2018-01-01.002.log,以此類推。
2、logger package默認(rèn)初始化了全局的defaultLogger,所以直接調(diào)用logger.SetLogger的其實(shí)是給該對象設(shè)置輸出參數(shù),如果想要使用自定義的logger對象,需要通過logger.NewLogger()進(jìn)行初始化。
3、網(wǎng)絡(luò)配置中的reconnectOnMsg為true時(shí),每條發(fā)送一條消息都會(huì)重連一次網(wǎng)絡(luò)日志中心,適用于寫日志頻率極低的情況下的調(diào)用,可以減少長時(shí)間網(wǎng)絡(luò)連接而占用資源。但強(qiáng)烈不建議平常使用時(shí)設(shè)置為true,這將會(huì)導(dǎo)致調(diào)用方反復(fù)的網(wǎng)絡(luò)重連,極大增加資源消耗和延遲。
4、conn網(wǎng)絡(luò)輸出適配器經(jīng)過ELK集成環(huán)境的測試驗(yàn)證,通過該方式發(fā)送的日志,能夠正常通過Elecsearch和Kibana檢索和分析
保證golang開發(fā)環(huán)境的正常配置,并且go相關(guān)工具安裝完成,GOPATH等設(shè)置正常(go開發(fā)所必須的)。
執(zhí)行g(shù)o get github.com/wonderivan/logger , 然后import 該包即可使用。
關(guān)于如何在golang中使用logger日志包就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(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)容。