zoukankan      html  css  js  c++  java
  • 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{})
    }

  • 相关阅读:
    Linux 部署 nginx
    Linux 部署vue项目(使用nginx)
    git 操作规范
    mysql grant权限分配(转)。
    前端优化,包括css,jss,img,cookie
    关于js里的那一堆事件
    个人作业——软件工程实践总结作业
    Unity3D 快捷键
    Beta冲刺第二天
    Beta冲刺第一天
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7461550.html
Copyright © 2011-2022 走看看