summary
logrus是針對go語言開發的一款日志系統,在本片文章中,將會對上手logrus的程序中遇到的一些問題做一個記錄,這個記錄參考了這篇文章,下面我們開始吧!
上手
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
log.WithFields(log.Fields{
"animal": "walrus",
}).Info("A walrus appears")
}
這樣就可以啦,可以看到輸出的日志格式如下:
time="2018-08-11T15:42:22+08:00" level=info msg="A walrus appears" animal=walrus
那么接下來的問題是,以這種方式輸出的日志可以看到就還是比較雜亂無章的,那么有沒有方式把日志用一種比較有格式的方式輸出呢?我們想到了JSON格式,那么下面我們用
log.SetFormatter(&log.JSONFormatter{})
這條陳述句,以JSON格式來輸出我們的日志:
package main
import (
"os"
log "github.com/sirupsen/logrus"
)
func init() {
// 設定日志格式為json格式
log.SetFormatter(&log.JSONFormatter{})
// 設定將日志輸出到標準輸出(默認的輸出為stderr,標準錯誤)
// 日志訊息輸出可以是任意的io.writer型別
log.SetOutput(os.Stdout)
// 設定日志級別為warn以上
log.SetLevel(log.WarnLevel)
}
func main() {
log.WithFields(log.Fields{
"animal": "walrus",
"size": 10,
}).Info("A group of walrus emerges from the ocean")
log.WithFields(log.Fields{
"omg": true,
"number": 122,
}).Warn("The group's number increased tremendously!")
log.WithFields(log.Fields{
"omg": true,
"number": 100,
}).Fatal("The ice breaks!")
}
輸出對應如下:
{"level":"warning","msg":"The group's number increased tremendously!","number":122,"omg":true,"time":"2019-11-13T17:32:42+08:00"}
{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true,"time":"2019-11-13T17:32:42+08:00"}
除了setFormatter用于把日志的格式設定為JSON之外,我們在這里還設定了顯示日志的級別,
并可以看到,每次在withField之后加上一種輸出日志的格式之后就可以輸出一行日志了,
深入
有時我們也需要在程式的不同部分中,向日志中不斷加入資訊,并在程式的最后進行輸出,下面提供一種使用logger的辦法:
logger:= log.WithFields(log.Fields{
"path": r.URL.Path,
"method": r.Method,
"request_id": reqID,
"client_ip": r.RemoteAddr,
"start_time": startTime,
})
logger = logger.WithFields(log.Fields{
"error": err.Error(),
})
logger.WithFields(log.Fields{
"error_code": aErr.Code,
"error_msg": aErr.Msg,
}).Warn("FAIL")
如圖,用這種辦法就可以在程式的各個部分中向同一段log中加入所需要的內容了,下面所需要做的就是吧logger作為一個引數在各個需要進行輸出log的函式中傳播了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/65054.html
標籤:Go
上一篇:GO基礎之延時執行
下一篇:idea無法運行代碼
