最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang日志包logger的用法詳解

 更新時(shí)間:2021年05月04日 11:14:24   作者:老衲一頭頭秀發(fā)  
這篇文章主要介紹了golang日志包logger的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

1. logger包介紹

import  "github.com/wonderivan/logger"

在我們開(kāi)發(fā)go程序的過(guò)程中,發(fā)現(xiàn)記錄程序日志已經(jīng)不是fmt.print這么簡(jiǎn)單,我們想到的是打印輸出能夠明確指定當(dāng)時(shí)運(yùn)行時(shí)間、運(yùn)行代碼段,當(dāng)然我們可以引入go官方自帶包 import “l(fā)og”,然后通過(guò)log.Printf、log.Println等方式輸出,而且默認(rèn)是日志輸出時(shí)只帶時(shí)間的,想要同時(shí)輸出所運(yùn)行代碼段位置,還需要通過(guò)執(zhí)行一下指定進(jìn)行相關(guān)簡(jiǎ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ā)送。

2. logger包使用

logger包使用起來(lái)非常方便,很多配置參數(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ū)分):

3. logger詳細(xì)介紹

在上邊介紹了logger的基本使用后,接下來(lái)詳細(xì)介紹一下該包的文本輸出和網(wǎng)絡(luò)輸出,及其相關(guān)配置項(xiàng)。

3.1 日志等級(jí)

當(dāng)前日志輸出等級(jí)共8種,從0-7對(duì)應(yīng)的等級(jí)由高到底,可以通過(guò)配置參數(shù)進(jìn)行配置,默認(rèn)為DEBG級(jí)別,當(dāng)配置為某個(gè)輸出等級(jí)時(shí),只有大于等于該等級(jí)的日志才會(huì)輸出。不同的輸出適配器支持不同的日志等級(jí)配置。

logger日志等級(jí)列表
等級(jí) 配置 釋義 控制臺(tái)顏色
0 EMER 系統(tǒng)級(jí)緊急,比如磁盤出錯(cuò),內(nèi)存異常,網(wǎng)絡(luò)不可用等 紅色底
1 ALRT 系統(tǒng)級(jí)警告,比如數(shù)據(jù)庫(kù)訪問(wèn)異常,配置文件出錯(cuò)等 紫色
2 CRIT 系統(tǒng)級(jí)危險(xiǎn),比如權(quán)限出錯(cuò),訪問(wèn)異常等 藍(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)體值等 綠色

3.2 配置參數(shù)說(shuō)明

logger當(dāng)前支持控制臺(tái)、文件、網(wǎng)絡(luò)3種方式輸出,這3中輸出時(shí)通過(guò)各自的json格式參數(shù)進(jìn)行設(shè)置,如果未配置某項(xiàng)適配器時(shí),則不初始化也不會(huì)輸出到該適配器。

默認(rèn)配置為只控制臺(tái)輸出DEBG及其以上日志。

{
    "TimeFormat":"2006-01-02 15:04:05", // 輸出日志開(kāi)頭時(shí)間格式
    "Console": {            // 控制臺(tái)日志配置
        "level": "TRAC",    // 控制臺(tái)日志輸出等級(jí)
        "color": true       // 控制臺(tái)日志顏色開(kā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ò)斷開(kāi)后是否重連
        "reconnectOnMsg":false,     // 發(fā)送完每條消息后是否斷開(kāi)網(wǎng)絡(luò)
    }
}

輸出日志開(kāi)頭時(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"

對(duì)應(yīng)的輸出開(kāi)頭時(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

3.3 設(shè)置配置參數(shù):

通過(guò)調(diào)用logger.SetLogger(config string)方法設(shè)置參數(shù),config支持json配置,也支持指定內(nèi)容為json配置的文件路徑,例如:

    // 通過(guò)配置參數(shù)直接配置
    logger.SetLogger(`{"Console": {"level": "DEBG"}}`)
    // 通過(guò)配置文件配置
    logger.SetLogger("/home/log.json")
 

3.4 配置其他相關(guān)說(shuō)明

1、當(dāng)日志文件配置項(xiàng)append為true時(shí),如果當(dāng)前寫入的日志發(fā)生跨天(daily為true)或超過(guò)最大限制時(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í)是給該對(duì)象設(shè)置輸出參數(shù),如果想要使用自定義的logger對(duì)象,需要通過(guò)logger.NewLogger()進(jìn)行初始化。

3、網(wǎng)絡(luò)配置中的reconnectOnMsg為true時(shí),每條發(fā)送一條消息都會(huì)重連一次網(wǎng)絡(luò)日志中心,適用于寫日志頻率極低的情況下的調(diào)用,可以減少長(zhǎng)時(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)過(guò)ELK集成環(huán)境的測(cè)試驗(yàn)證,通過(guò)該方式發(fā)送的日志,能夠正常通過(guò)Elecsearch和Kibana檢索和分析

4 下載和使用

保證golang開(kāi)發(fā)環(huán)境的正常配置,并且go相關(guān)工具安裝完成,GOPATH等設(shè)置正常(go開(kāi)發(fā)所必須的)。

執(zhí)行g(shù)o get github.com/wonderivan/logger , 然后import 該包即可使用。

包源碼鏈接: golang日志包logger

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 詳解go-zero如何使用validator進(jìn)行參數(shù)校驗(yàn)

    詳解go-zero如何使用validator進(jìn)行參數(shù)校驗(yàn)

    這篇文章主要介紹了如何使用validator庫(kù)做參數(shù)校驗(yàn)的一些十分實(shí)用的使用技巧,包括翻譯校驗(yàn)錯(cuò)誤提示信息、自定義提示信息的字段名稱、自定義校驗(yàn)方法等,感興趣的可以了解下
    2024-01-01
  • 解決go在函數(shù)退出后子協(xié)程的退出問(wèn)題

    解決go在函數(shù)退出后子協(xié)程的退出問(wèn)題

    這篇文章主要介紹了解決go在函數(shù)退出后子協(xié)程的退出問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Go 實(shí)現(xiàn)HTTP中間人代理的操作

    Go 實(shí)現(xiàn)HTTP中間人代理的操作

    這篇文章主要介紹了Go 實(shí)現(xiàn)HTTP中間人代理的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Go語(yǔ)言中GORM存取數(shù)組/自定義類型數(shù)據(jù)

    Go語(yǔ)言中GORM存取數(shù)組/自定義類型數(shù)據(jù)

    在使用gorm時(shí)往往默認(rèn)的數(shù)據(jù)類型不滿足我們的要求,需要使用一些自定義數(shù)據(jù)類型作為字段類型,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中GORM存取數(shù)組/自定義類型數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • 揭秘Go語(yǔ)言中的反射機(jī)制

    揭秘Go語(yǔ)言中的反射機(jī)制

    在Go語(yǔ)言中,反射是通過(guò)reflect包來(lái)實(shí)現(xiàn)的,通過(guò)使用反射,我們可以在運(yùn)行時(shí)獲取對(duì)象的類型信息、訪問(wèn)對(duì)象的字段和方法、動(dòng)態(tài)調(diào)用方法等,反射在很多場(chǎng)景下都非常有用,比如編寫通用的代碼、實(shí)現(xiàn)對(duì)象的序列化和反序列化、實(shí)現(xiàn)依賴注入等,需要的朋友可以參考下
    2023-10-10
  • 如何使用proto組件編譯pb.go文件

    如何使用proto組件編譯pb.go文件

    這篇文章主要介紹了如何使用proto組件編譯pb.go文件的詳細(xì)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Golang使用泛型對(duì)數(shù)組進(jìn)行去重的實(shí)現(xiàn)

    Golang使用泛型對(duì)數(shù)組進(jìn)行去重的實(shí)現(xiàn)

    本文主要介紹了Golang使用泛型對(duì)數(shù)組進(jìn)行去重的實(shí)現(xiàn),通過(guò)使用類型參數(shù)T和類型約束any,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Go語(yǔ)言如何通過(guò)通信共享內(nèi)存

    Go語(yǔ)言如何通過(guò)通信共享內(nèi)存

    這篇文章主要為大家介紹了Go語(yǔ)言如何通過(guò)通信共享內(nèi)存實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Golang?基于flag庫(kù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單命令行工具

    Golang?基于flag庫(kù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單命令行工具

    這篇文章主要介紹了Golang基于flag庫(kù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單命令行工具,Golang標(biāo)準(zhǔn)庫(kù)中的flag庫(kù)提供了解析命令行選項(xiàng)的能力,我們可以基于此來(lái)開(kāi)發(fā)命令行工具,下文詳細(xì)介紹。需要的小伙伴可以參考一下
    2022-08-08
  • golang實(shí)現(xiàn)分頁(yè)算法實(shí)例代碼

    golang實(shí)現(xiàn)分頁(yè)算法實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于golang實(shí)現(xiàn)分頁(yè)算法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09

最新評(píng)論

皮山县| 平南县| 运城市| 桂林市| 锦屏县| 高要市| 桃园县| 丘北县| 枞阳县| 额敏县| 阳西县| 克什克腾旗| 周至县| 邢台县| 长兴县| 聊城市| 合川市| 乐东| 文昌市| 延长县| 德兴市| 罗城| 芜湖市| 沂水县| 集安市| 临猗县| 行唐县| 上栗县| 井陉县| 交城县| 和田市| 温宿县| 合肥市| 迁西县| 揭西县| 高阳县| 开江县| 集安市| 乐山市| 安达市| 桑植县|