logrus_hook.go

Posted 张伯雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logrus_hook.go相关的知识,希望对你有一定的参考价值。

package logrus_hook

import (
    "runtime"
    "strings"
    "path/filepath"
    log "github.com/Sirupsen/logrus"
)

type ContextHook struct {
}

func (hook ContextHook)Levels() []log.Level {
    return log.AllLevels
}

func (hook ContextHook)Fire(entry *log.Entry) error {
    pc := make([]uintptr, 10)
       //表示自身栈中跳过6个栈帧数  并且把栈中剩余信息写入pc中。
             //0表示Callers自身的调用栈,1表示Callers所在的调用栈
    runtime.Callers(6, pc)
       //
    frames := runtime.CallersFrames(pc)
    frame, _ := frames.Next()

    funcName := frame.Func.Name()
    funcName = funcName[strings.LastIndexByte(funcName, filepath.Separator) + 1 :]
    fileName := frame.File[strings.LastIndexByte(frame.File, filepath.Separator) + 1:]

    entry.Data["file"] = fileName
    entry.Data["func"] = funcName
    entry.Data["line"] = frame.Line

    //for {
    //    frame, more := frames.Next()
    //    println(frame.File)
    //    println(frame.Func.Name())
    //    println(frame.Line)
    //    println("")
    //
    //    if !more{
    //        break
    //    }
    //}

    return nil
}

func init() {
    log.AddHook(ContextHook{})
}

以上是关于logrus_hook.go的主要内容,如果未能解决你的问题,请参考以下文章