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

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.cnblogs.com/Ryan16231112/p/11850990.html