logrus 日志框架

下载:

go get -u github.com/sirupsen/logrus

1 logrus常用方法

logrus.Debugln("Debugln")
logrus.Infoln("Infoln")
logrus.Warnln("Warnln")
logrus.Errorln("Errorln")
logrus.Println("Println")

// 输出如下
time="2022-12-17T14:02:01+08:00" level=info msg=Infoln   
time="2022-12-17T14:02:01+08:00" level=warning msg=Warnln
time="2022-12-17T14:02:01+08:00" level=error msg=Errorln 
time="2022-12-17T14:02:01+08:00" level=info msg=Println

debug的没有输出,是因为logrus默认的日志输出等级是 info

fmt.Println(logrus.GetLevel())  // info
  • 日志等级
PanicLevel  // 会抛一个异常
FatalLevel  // 打印日志之后就会退出
// ===============
// 常用以下4个
ErrorLevel
WarnLevel
InfoLevel
DebugLevel
// ===============
TraceLevel  // 低级别

更改日志级别

如果你想显示Debug的日志,那么你可以更改日志显示等级

logrus.SetLevel(logrus.DebugLevel)

日志级别一般是和系统环境挂钩,例如开发环境,肯定就要显示debug信息,测试环境也是需要的

线上环境就不需要这些日志,可能只显示warnning的日志

设置特定字段

package main

import "github.com/sirupsen/logrus"

func main() {
	log := logrus.WithField("project", "study")
	log2 := logrus.WithFields(logrus.Fields{
		"animal": "walrus",
		"size":   10,
	})
	log.Info("hello")
	// time="2023-11-03T10:13:14+08:00" level=info msg=hello project=study
	log2.Info("hello")
	// time="2023-11-03T10:13:14+08:00" level=info msg=hello animal=walrus size=10

	// 可以链式
	log3 := logrus.WithField("animal", "walrus").WithField("size", 10)
	log3.Info("hello link")
	// time="2023-11-03T10:15:50+08:00" level=info msg="hello link" animal=walrus size=10
	// log2也可以链式
}

通常,在一个应用中、或者应用的一部分中,都有一些固定的Field。

比如在处理用户http请求时,上下文中,所有的日志都会有request_id和user_ip

为了避免每次记录日志都要使用log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip}),我们可以创建一个logrus.Entry实例,为这个实例设置默认Fields,在上下文中使用这个logrus.Entry实例记录日志即可。

显示样式 Text和Json

默认的是以text的形式展示,也可以设置为json

logrus.SetFormatter(&logrus.JSONFormatter{})
log1 := logrus.WithField("project", "study")
log1.Errorln("hello")
// {"level":"error","msg":"hello","project":"study","time":"2022-12-17T15:08:24+08:00"}

自定义颜色

  • 如果我们想要在控制中显示颜色,一般的做法都是使用ANSI 控制码,用于设置文本颜色。

  • \033 是控制码的开始,是八进制数字,[31m 表示将文本设置为红色。

  • ANSI 控制码是用于在终端和控制台中控制文本格式和颜色的一种标准。它们通常用于在命令行界面 (CLI) 程序中输出彩色文本或者在文本模式下的图形界面 (GUI) 中输出文本。

func main() {
  // 前景色
  fmt.Println("\033[30m 黑色 \033[0m")
  fmt.Println("\033[31m 红色 \033[0m")
  fmt.Println("\033[32m 绿色 \033[0m")
  fmt.Println("\033[33m 黄色 \033[0m")
  fmt.Println("\033[34m 蓝色 \033[0m")
  fmt.Println("\033[35m 紫色 \033[0m")
  fmt.Println("\033[36m 青色 \033[0m")
  fmt.Println("\033[37m 灰色 \033[0m")
  // 背景色
  fmt.Println("\033[40m 黑色 \033[0m")
  fmt.Println("\033[41m 红色 \033[0m")
  fmt.Println("\033[42m 绿色 \033[0m")
  fmt.Println("\033[43m 黄色 \033[0m")
  fmt.Println("\033[44m 蓝色 \033[0m")
  fmt.Println("\033[45m 紫色 \033[0m")
  fmt.Println("\033[46m 青色 \033[0m")
  fmt.Println("\033[47m 灰色 \033[0m")
}

输出到日志文件

默认的输出是在控制台上

但是后期想要找某些日志,翻控制台可能就不太好找了

使用这个函数即可func SetOutput(out io.Writer),需要我们有一个Writer的对象

file, _ := os.OpenFile("info.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
logrus.SetOutput(file)

同时输出屏幕和文件

package main

import (
	"github.com/sirupsen/logrus"
	"io"
	"os"
)

func main() {
	//  设置output,默认为stderr,可以为任何io.Writer,比如文件*os.File
	file, _ := os.OpenFile("checkemstools.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)

	//  同时写文件和屏幕
	logrus.SetOutput(io.MultiWriter(file, os.Stdout))

	logrus.SetLevel(logrus.DebugLevel)
	logrus.Debug("debug")
	logrus.Info("info")
	logrus.Warn("warn")
	logrus.Error("error")
	logrus.Fatal("fatal")
	logrus.Panic("panic")

}

posted @ 2023-11-02 21:07  修凡  阅读(37)  评论(0编辑  收藏  举报