Golang Logrus的使用(转载)

1. logrus

Logrus is a structured logger for Golang

1.1. 获取logrus

注意:
作者最近将这个包转移到了sirupsen/logrus里面,但是之前的名字是Sirupsen/logrus,所以在使用其他hooker包时,由于那个第三方包里依旧使用Sirupsen,可能会出现冲突.

1.2. log等级

logrus和go lib里面一样有6个等级,可以直接调用

1.3. 第一个example

这是一个使用了fields的例子,可以添加多对field

1.4. 设置log的参数

func init() {
//设置输出样式,自带的只有两种样式logrus.JSONFormatter{}和logrus.TextFormatter{}
logrus.SetFormatter(&logrus.JSONFormatter{})
//设置output,默认为stderr,可以为任何io.Writer,比如文件*os.File
logrus.SetOutput(os.Stdout)
//设置最低loglevel
logrus.SetLevel(logrus.InfoLevel)
}

1.5. Logger

如果想在一个应用里面向多个地方log,可以创建Logger实例,下面这个例子是利用创建的logger向文件log

我们可以看看Logger里面都有什么

我们可以发现,独立的Logger,拥有自己的各个参数,比如直接使用logrus.Panic("GG")这是使用默认的Logger,
上面提到的init函数里面的各项设置,是设置默认Logger的,不会对自己生成的Logger有影响

1.6. Fields

有时候我们需要固定的fields,不需要向每行都重复写,只需要生成一 logrus.Entry

entry := logrus.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})
entry.Info("something happened on that request")
entry.Warn("something not great happened")

1.7. Entry

logrus.WithFields会自动返回一个 *Entry,Entry里面的有些变量会被自动加上

time:entry被创建时的时间戳
msg:在调用.Info()等方法时被添加
level

1.8. Thread safety

默认的logger在并发写的时候是被mutex保护的,比如当同时调用hook和写log时mutex就会被请求,有另外一种情况,文件是以appending mode打开的,
此时的并发操作就是安全的,可以用logger.SetNoLock()来关闭它

2. logrus hook的使用

2.1. 获取go-slack

go-slack实现bearchat提示

2.2. 例子

  • 问题一
    但这里有个问题,那就是,lrhook里面config的变量与bearchat里面的变量不对应,导致bearchat定义的的字段不能有效设置
    但使用lrhook的好处是,在发生log时会自动发送
    解决方法:
    使用webhook,构造与规定对应的json,并且可以处理macdown,只需在log发生时,手动调用即可

  • 问题二
    bearchat里面都是设置对应字段,所以不能像email那样把log级别自动加上
    解决方法
    在将某个字段手动设置为想要的log级别,比如把Attachments:title字段设置为“Warn”,

3. Hook-Email

email这里只需用NewMailAuthHook方法得到hook,再添加即可


转载自链接:https://www.jianshu.com/p/5fac8bed4505
来源:简书

赞赏

微信赞赏支付宝赞赏

发表评论

邮箱地址不会被公开。 必填项已用*标注