Hook
通过使用
hook,可以扩展logrus的功能可以为
logrus设置hook,每条日志输出前都会执行hook的特定方法点击查看更多
Hook定义如下
Go
type Hook interface {
Levels() []Level
Fire(*Entry) error
}
Levels()方法返回要执行Fire方法的日志级别,只有输出Levels方法中返回的日志级别时才会执行Fire方法Fire是日志输出前调用的方法
示例
Go
package main
import (
"github.com/sirupsen/logrus"
)
type MyHook struct {
}
func (mHook *MyHook) Levels() []logrus.Level {
return []logrus.Level{logrus.InfoLevel} // 返回InfoLevel 只有输出Info级别的日志才会执行Fire方法
}
func (mHook *MyHook) Fire(entry *logrus.Entry) error {
entry.Data["name"] = "app"
return nil
}
func main() {
logrus.AddHook(&MyHook{})
logrus.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
logrus.Errorln("logrus => Error")
logrus.Warningln("logrus => Warn")
logrus.Infoln("logrus => Info")
logrus.Debugln("logrus => Debug")
}
/**
ERRO[2023-08-08T22:59:39+08:00] logrus => Error
WARN[2023-08-08T22:59:39+08:00] logrus => Warn
INFO[2023-08-08T22:59:39+08:00] logrus => Info name=app
*/
上面的自定义
Hook在Levels中只返回了logrus.InfoLevel,所以只有输出Info日志时,才会执行Fire方法,带上额外的name字段