logrus是針對go語言開發的一款日誌系統,在本片文章中,將會對上手logrus的過程當中遇到的一些問題作一個記錄。這個記錄參考了這篇文章。下面咱們開始吧!git
package main import ( log "github.com/sirupsen/logrus" ) func main() { log.WithFields(log.Fields{ "animal": "walrus", }).Info("A walrus appears") }
這樣就能夠啦,能夠看到輸出的日誌格式以下:github
time="2018-08-11T15:42:22+08:00" level=info msg="A walrus appears" animal=walrus
那麼接下來的問題是,以這種方式輸出的日誌能夠看到就仍是比較雜亂無章的,那麼有沒有方式把日誌用一種比較有格式的方式輸出呢?咱們想到了JSON格式。那麼下面咱們用json
log.SetFormatter(&log.JSONFormatter{})
這條語句,以JSON格式來輸出咱們的日誌:bash
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!") }
輸出對應以下:app
{"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以後加上一種輸出日誌的格式以後就能夠輸出一行日誌了。.net
有時咱們也須要在程序的不一樣部分中,向日志中不斷加入信息,並在程序的最後進行輸出,下面提供一種使用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的函數中傳播了。code