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的更多相关文章

随机推荐

  1. LeetCode(29)-Plus One

    题目: Given a non-negative number represented as an array of digits, plus one to the number. The digit ...

  2. rails中select不能响应多选的解决办法

    在rails4.2中如果你写如下代码,post的select无法传回多选内容,即使你select设置为多选: <select id='id_size' name='name_size' mult ...

  3. MOOS学习笔记2——HelloWorld回调

    MOOS学习笔记2--HelloWorld回调 例程 #include "MOOS/libMOOS/Comms/MOOSAsyncCommClient.h" bool OnConn ...

  4. 遍历输出图片加hover

    1. $(".icon a>div").hover(function () { var slls = $(this).attr("class"); sll ...

  5. Java Web开发中路径问题小结

     Java Web开发中,路径问题是个挺麻烦的问题,本文小结了几个常见的路径问题,希望能对各位读者有所帮助. (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 ...

  6. Oracle100w数据大表割接

    [现网问题] 最近在给咪咕做视频后台管理,移动那边希望页面上,码流字段可以支持1位小数,如8.0.自己查看数据库,发现码流字段是Number整型,也就是要换类型,打算直接换成varchar2.因为自己 ...

  7. Python并发编程-RabbitMQ消息队列

    RabbitMQ队列 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列 ...

  8. complex figure

    1/z   ----direct by MATLAB exp(z)    by QT logZ       by  QT 1/z      用QT画的 -----2018-03-17--------- ...

  9. Python人工智能之-三大数学难点 !

    1. 微积分: 定积分与不定积分.全微分.最小二乘法.二重积分.微分方程与差分方程等... 2. 线性代数: 行列式.矩阵.向量.线性方程组.矩阵的特性和特性向量.二次型等... 3. 概率论和统计学 ...

  10. (linux虚拟机)克隆得到的虚拟机修改网卡信息和IP地址,以及DNS

    克隆得到的虚拟机,与原先的系统是一模一样的包括MAC地址和IP地址.需要修改成信息. 克隆完事之后,首先在 点击生成一个新的MAC地址.然后启动,登陆. vim /etc/udev/rules.d/7 ...