G

[Golang]Gin框架 12.Hook

RoLingG 2023-10-17

Hook

又名:钩子函数

它是一个可拓展的机制,通过在初始化时对logrus添加hooklogrus可以实现各种拓展功能。

// 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("报错")

}

主要学习还是看文档,这里的写的东西还是很浅显,我太菜了(

PREV
[Golang]Gin框架 11.日志
NEXT
[机器学习]小摸一下GAN网络

评论(0)

发布评论