Logrus入门
Logrus入门
1. 下载
go get github.com/sirupsen/logrus
2. 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 // 打印日志之后就会退出
ErrorLevel
WarnLevel
InfoLevel
DebugLevel
TraceLevel // 低级别
3. 更改日志级别
如果你想显示Debug的日志,那么你可以更改日志显示等级
logrus.SetLevel(logrus.DebugLevel)
日志级别一般是和系统环境挂钩,例如开发环境,肯定就要显示debug信息,测试环境也是需要的
线上环境就不需要这些日志,可能只显示warnning的日志
4. 设置特定字段
log1 := logrus.WithField("project", "study")
log1.Errorln("hello")
// time="2022-12-17T15:02:28+08:00" level=error msg=hello project=study
log2 := logrus.WithFields(logrus.Fields{
"func": "main",
})
log2.Warningf("你好")
// time="2022-12-17T15:02:28+08:00" level=warning msg="你好" func=main
log3 := log2.WithFields(logrus.Fields{
"auth": "枫枫",
})
// time="2022-12-17T15:02:28+08:00" level=warning msg="你好" auth="枫枫" func=main
log3.Warnln("你好")
通常,在一个应用中、或者应用的一部分中,都有一些固定的Field。
比如在处理用户http请求时,上下文中,所有的日志都会有request_id和user_ip
为了避免每次记录日志都要使用log.WithFields(log.Fields{“request_id”: request_id, “user_ip”: user_ip}),我们可以创建一个logrus.Entry实例,为这个实例设置默认Fields,在上下文中使用这个logrus.Entry实例记录日志即可。
5. 显示样式 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"}
6. 自定义颜色
如果我们想要在控制中显示颜色,一般的做法都是使用
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")
}
也可以这样写
fmt.Printf("\x1b[0;%dm%s\x1b[0m", 31, "你好")
logrus也是支持颜色输出的
我们需要在配置中去进行开启
logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true})
不过,只开启这个的话,输出会怪怪的
还有其他的一些配置
ForceColors:是否强制使用颜色输出。
DisableColors:是否禁用颜色输出。
ForceQuote:是否强制引用所有值。
DisableQuote:是否禁用引用所有值。
DisableTimestamp:是否禁用时间戳记录。
FullTimestamp:是否在连接到 TTY 时输出完整的时间戳。
TimestampFormat:用于输出完整时间戳的时间戳格式。
logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true, TimestampFormat: "2006-01-02 15:04:05", FullTimestamp: true})