中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何在golang中使用logger日志包

發布時間:2021-05-06 16:29:03 來源:億速云 閱讀:179 作者:Leah 欄目:開發技術

這篇文章給大家介紹如何在golang中使用logger日志包,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

golang的優點

golang是一種編譯語言,可以將代碼編譯為機器代碼,編譯后的二進制文件可以直接部署到目標機器而無需額外的依賴,所以golang的性能優于其他的解釋性語言,且可以在golang中使用goroutine來實現并發性,它提供了一個非常優雅的goroutine調度程序系統,可以很容易地生成數百萬個goroutine。

1. logger包介紹

import  "github.com/wonderivan/logger"

在我們開發go程序的過程中,發現記錄程序日志已經不是fmt.print這么簡單,我們想到的是打印輸出能夠明確指定當時運行時間、運行代碼段,當然我們可以引入go官方自帶包 import “log”,然后通過log.Printf、log.Println等方式輸出,而且默認是日志輸出時只帶時間的,想要同時輸出所運行代碼段位置,還需要通過執行一下指定進行相關簡單的設置

log.SetFlags(log.LstdFlags | log.Lshortfile)
log.SetPrefix(xxx)

然而logger要做的并不僅僅是要這些:

logger支持自定義時間格式

logger支持不同的日志等級輸出,能夠有效提高日志輸出性能和檢索;

logger支持控制臺+文件+網絡的三種方式輸出,并且可以任意組合。

logger支持控制臺輸出顏色區分;

logger支持文本輸出的自定制;

logger支持網絡日志傳輸,例如直連logstash發送。

2. logger包使用

logger包使用起來非常方便,很多配置參數都有其默認值,符合通常使用習慣。如果僅需要在控制臺輸出,則只需要引入該包,然后直接使用即可:

package main 
import "github.com/wonderivan/logger" 
func main() {
 logger.Trace("this is Trace") // 由于默認輸出,只會在控制臺輸出Debug及其以上日志,所以該條不會輸出
 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")
}

此時在終端即可輸出(如果是非windows終端,支持日志等級顏色區分):

如何在golang中使用logger日志包

3. logger詳細介紹

在上邊介紹了logger的基本使用后,接下來詳細介紹一下該包的文本輸出和網絡輸出,及其相關配置項。

3.1 日志等級

當前日志輸出等級共8種,從0-7對應的等級由高到底,可以通過配置參數進行配置,默認為DEBG級別,當配置為某個輸出等級時,只有大于等于該等級的日志才會輸出。不同的輸出適配器支持不同的日志等級配置。

logger日志等級列表
等級配置釋義控制臺顏色
0EMER系統級緊急,比如磁盤出錯,內存異常,網絡不可用等紅色底
1ALRT系統級警告,比如數據庫訪問異常,配置文件出錯等紫色
2CRIT系統級危險,比如權限出錯,訪問異常等藍色
3EROR用戶級錯誤紅色
4WARN用戶級警告黃色
5INFO用戶級重要天藍色
6DEBG用戶級調試綠色
7TRAC用戶級基本輸出,比如成員信息,結構體值等綠色

3.2 配置參數說明

logger當前支持控制臺、文件、網絡3種方式輸出,這3中輸出時通過各自的json格式參數進行設置,如果未配置某項適配器時,則不初始化也不會輸出到該適配器。

默認配置為只控制臺輸出DEBG及其以上日志。

{
    "TimeFormat":"2006-01-02 15:04:05", // 輸出日志開頭時間格式
    "Console": {            // 控制臺日志配置
        "level": "TRAC",    // 控制臺日志輸出等級
        "color": true       // 控制臺日志顏色開關 
    },
    "File": {                   // 文件日志配置
        "filename": "app.log",  // 初始日志文件名
        "level": "TRAC",        // 日志文件日志輸出等級
        "daily": true,          // 跨天后是否創建新日志文件,當append=true時有效
        "maxlines": 1000000,    // 日志文件最大行數,當append=true時有效
        "maxsize": 1,           // 日志文件最大大小,當append=true時有效
        "maxdays": -1,          // 日志文件有效期
        "append": true,         // 是否支持日志追加
        "permit": "0660"        // 新創建的日志文件權限屬性
    },
    "Conn": {                       // 網絡日志配置
        "net":"tcp",                // 日志傳輸模式
        "addr":"10.1.55.10:1024",   // 日志接收服務器
        "level": "Warn",            // 網絡日志輸出等級
        "reconnect":true,           // 網絡斷開后是否重連
        "reconnectOnMsg":false,     // 發送完每條消息后是否斷開網絡
    }
}

輸出日志開頭時間格式只要該符合go中Time.Format格式即可,例如:

時間類型時間格式
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"

對應的輸出開頭時間格式為:

========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 設置配置參數:

通過調用logger.SetLogger(config string)方法設置參數,config支持json配置,也支持指定內容為json配置的文件路徑,例如:

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

3.4 配置其他相關說明

1、當日志文件配置項append為true時,如果當前寫入的日志發生跨天(daily為true)或超過最大限制時,會創建一個新文件,原有文件格式被重命名為: ****.xxxx-xx-xx.xxx.xxx 格式,例如:當向app.log寫入日志時,觸發了創建新文件操作,則將app.log重命名為 app.2018-01-01.001.log, 如果此時app.2018-01-01.001.log已經存在,則將剛才的app.log重命名為 app.2018-01-01.002.log,以此類推。

2、logger package默認初始化了全局的defaultLogger,所以直接調用logger.SetLogger的其實是給該對象設置輸出參數,如果想要使用自定義的logger對象,需要通過logger.NewLogger()進行初始化。

3、網絡配置中的reconnectOnMsg為true時,每條發送一條消息都會重連一次網絡日志中心,適用于寫日志頻率極低的情況下的調用,可以減少長時間網絡連接而占用資源。但強烈不建議平常使用時設置為true,這將會導致調用方反復的網絡重連,極大增加資源消耗和延遲。

4、conn網絡輸出適配器經過ELK集成環境的測試驗證,通過該方式發送的日志,能夠正常通過Elecsearch和Kibana檢索和分析

4 下載和使用

保證golang開發環境的正常配置,并且go相關工具安裝完成,GOPATH等設置正常(go開發所必須的)。

執行go get github.com/wonderivan/logger , 然后import 該包即可使用。

關于如何在golang中使用logger日志包就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淮滨县| 宁津县| 大同县| 旬邑县| 新邵县| 珲春市| 肇州县| 修水县| 临汾市| 辰溪县| 赣榆县| 六盘水市| 永春县| 海晏县| 鄄城县| 自治县| 阿城市| 大渡口区| 托克托县| 枣庄市| 桂东县| 天等县| 赤水市| 堆龙德庆县| 衢州市| 井冈山市| 惠安县| 青州市| 扶余县| 乌兰察布市| 太湖县| 九台市| 前郭尔| 吉首市| 塘沽区| 岑巩县| 将乐县| 定西市| 高唐县| 聂拉木县| 武夷山市|