【Go】go的日誌框架-logrus初探

summary

 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

相關文章
相關標籤/搜索