简介
前一篇文章介绍了 Go 标准库中的日志库 log
。最后我们也提到,log
库只提供了三组接口,功能过于简单了。今天,我们来介绍一个日志库中的“明星库”——logrus
。本文编写之时(2020.02.07),logrus 在 GitHub 上 star 数已达到 13.8k。logrus
完全兼容标准的log
库,还支持文本、JSON 两种日志输出格式。很多知名的开源项目都使用了这个库,如大名鼎鼎的 docker。
快速使用
第三方库需要先安装:
$ go get github.com/sirupsen/logrus
后使用:
package main
import (
"github.com/sirupsen/logrus"
)
func main() {
logrus.SetLevel(logrus.TraceLevel)
logrus.Trace("trace msg")
logrus.Debug("debug msg")
logrus.Info("info msg")
logrus.Warn("warn msg")
logrus.Error("error msg")
logrus.Fatal("fatal msg")
logrus.Panic("panic msg")
}
logrus
的使用非常简单,与标准库log
类似。logrus
支持更多的日志级别:
Panic
:记录日志,然后panic
。Fatal
:致命错误,出现错误时程序无法正常运转。输出日志后,程序退出;Error
:错误日志,需要查看原因;Warn
:警告信息,提醒程序员注意;Info
:关键操作,核心流程的日志;Debug
:一般程序中输出的调试信息;Trace
:很细粒度的信息,一般用不到;
日志级别从上向下依次增加,Trace
最大,Panic
最小。logrus
有一个日志级别,高于这个级别的日志不会输出。默认的级别为InfoLevel
。所以为了能看到Trace
和Debug
日志,我们在main
函数第一行设置日志级别为TraceLevel
。
运行程序,输出:
$ go run main.go
time="2020-02-07T21:22:42 08:00" level=trace msg="trace msg"
time="2020-02-07T21:22:42 08:00" level=debug msg="debug msg"
time="2020-02-07T21:22:42 08:00" level=info msg="info msg"
time="2020-02-07T21:22:42 08:00" level=info msg="warn msg"
time="2020-02-07T21:22:42 08:00" level=error msg="error msg"
time="2020-02-07T21:22:42 08:00" level=fatal msg="fatal msg"
exit status 1
由于logrus.Fatal
会导致程序退出,下面的logrus.Panic
不会执行到。
另外,我们观察到输出中有三个关键信息,time
、level
和msg
:
time
:输出日志的时间;level
:日志级别;msg
:日志信息。
定制
输出文件名
调用logrus.SetReportCaller(true)
设置在输出日志中添加文件名和方法信息:
package main
import (
"github.com/sirupsen/logrus"
)
func main() {
logrus.SetReportCaller(true)
logrus.Info("info msg")
}
输出多了两个字段file
为调用logrus
相关方法的文件名,method
为方法名:
$ go run main.go
time="2020-0