Skip to content
On this page

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
*/

上面的自定义HookLevels中只返回了logrus.InfoLevel,所以只有输出Info日志时,才会执行Fire方法,带上额外的name字段