网络编程
位置:首页>> 网络编程>> Go语言>> go日志库中的logrus

go日志库中的logrus

作者:zzxiaoma  发布时间:2023-07-21 13:48:02 

标签: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)

来源:https://blog.51cto.com/u_3764469/5604385

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com