Hook
又名:钩子函数
它是一个可拓展的机制,通过在初始化时对logrus
添加hook
,logrus
可以实现各种拓展功能。
// logrus在记录Levels()返回的日志级别的消息时会触发hook
// 按照Fire方法定义的内容修改logrus.Entry。
type Hook interface {
Levels() []Level
Fire(*Entry) error
}
例如实现一个名称写入日志都加一个Field
我们需要实现两个方法以实现hook接口
package main
import (
"github.com/sirupsen/logrus"
)
type Myhook struct {
}
func (hook Myhook) Levels() []logrus.Level {
//var AllLevels = []Level{
// PanicLevel,
// FatalLevel,
// ErrorLevel,
// WarnLevel,
// InfoLevel,
// DebugLevel,
// TraceLevel,
//}
return logrus.AllLevels
}
// 每次能做什么事
func (hook Myhook) Fire(entry *logrus.Entry) error {
entry.Data["app"] = "RoLingG"
//fmt.Println(entry)
return nil
}
func main() {
//参数是一个hook的inter
logrus.AddHook(&Myhook{})
logrus.Warnln("警告")
logrus.Errorf("报错")
}
当然,我们还可以将日志独立输入进一个或多个文件中
例如我们将error的日志输入进error.log
的文件中:
package main
import (
"github.com/sirupsen/logrus"
"os"
)
type Myhook struct {
}
func (hook Myhook) Levels() []logrus.Level {
//var AllLevels = []Level{
// PanicLevel,
// FatalLevel,
// ErrorLevel,
// WarnLevel,
// InfoLevel,
// DebugLevel,
// TraceLevel,
//}
//return logrus.AllLevels
//独立作用于Error层级
return []logrus.Level{logrus.ErrorLevel}
}
// 每次能做什么事
func (hook Myhook) Fire(entry *logrus.Entry) error {
//entry.Data["app"] = "RoLingG"
//fmt.Println(entry)
//如果独立作用于Error层级,就不用判断层级了
//将错误日志写进文件中
file, _ := os.OpenFile("error.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
msg, _ := entry.String()
file.Write([]byte(msg))
return nil
}
func main() {
//参数是一个hook的inter
logrus.AddHook(&Myhook{})
logrus.Warnln("警告")
logrus.Errorf("报错")
}
主要学习还是看文档,这里的写的东西还是很浅显,我太菜了(
评论(0)