go日志库之logrus

一、安装

go get github.com/sirupsen/logrus

二、使用

1、当做标准库使用

logrus实现了标准库log的方法,可以用标准库的方法用于logrus,例如

import (
log "github.com/sirupsen/logrus"
)
log.Println("标准log")

2、使用带级别日志

import (
log "github.com/sirupsen/logrus"
)

func main() {
log.Info("info")
}

具体有七个类别Trace、Debug、Info、Warning、Error、Fatal和Panic。这里需要注意Fatal和Panic类型的日志会中断程序的运行。

3、输出日志时可以附带参数

log.WithFields(log.Fields{
"flag": true,
"name": "zhangsan",
}).Fatal("fatal")

在运行中出现错误时,把当时的参数记录下来更容易分析,而不是把各个参数组织成句子拼接起来。

4、日志输出的格式

log.SetFormatter(&log.JSONFormatter{})
log.SetFormatter(&log.TextFormatter{
ForceColors: true,
FullTimestamp: true,
})
log.SetOutput(os.Stdout)
log.SetLevel(log.WarnLevel)

可以输出JSON,文本格式,对具体的格式还可以设置颜色、时间串等信息,可以设置输出位置,输出日志的级别。

5、输出到多个位置

如果同一份日志内容想存储到不同位置,可以创建不同的log实例,对每个实例进行不同设置

var log = logrus.New()

6、输出日志到文件

file, err := os.OpenFile("logs/cus.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err == nil {
log.Out = file
} else {
log.Info("Failed to log to file, using default stderr")
}

7、分割日志文件

如果每天的日志都放到一个文件中,会越来越大,按照时间进行分割会比较好。下面的内容放到初始化的时候执行。

这里面需要引入第三方库

"github.com/lestrrat-go/file-rotatelogs"

"github.com/rifflock/lfshook"

writer, err := rotatelogs.New(
"文件名"+".%Y%m%d%H%M", // 分割后的文件名称
rotatelogs.WithLinkName("文件名"), // 生成软链,指向最新日志文件
rotatelogs.WithMaxAge(time.Hour*24*365), // 设置最大保存时间
rotatelogs.WithRotationTime(time.Hour*24), // 设置日志切割时间间隔
)

if err != nil {
log.Errorf("config local file system logger error", err)
}

lfHook := lfshook.NewHook(lfshook.WriterMap{
logrus.DebugLevel: writer, // 为不同级别设置不同的输出目的
logrus.InfoLevel: writer,
logrus.WarnLevel: writer,
logrus.ErrorLevel: writer,
logrus.FatalLevel: writer,
logrus.PanicLevel: writer,
}, &logrus.TextFormatter{DisableColors: true})
//最后加入hook
log.AddHook(lfHook)
发表评论

相关文章