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. ruby:借助第三方类名如何查找第三方gem名称(zlib为例)

    rubygem中含有成千上万的第三方gem,网上书上扩展教程中都有指导如何使用第三方gem的例子.但是如果不幸这些例子都没有提及gem名称的话,如何只凭第三方类名或require名查找gem名称呢?换 ...

  2. C# 操作Excel数据透视表

    一.概述 数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等,可动态地改变透视表版面布置,也可以重新安排行号.列标和页字段.当改变版面布置时,数据透视表也会按照新的 ...

  3. Java不走弯路教程(5.Client-Server模式(2)-Client)

    5.Client-Server模式(2)-Client 在上一章,我们完成一个简单的数据库服务器,并在客户端用telnet方式成功进行通信. 本章将用Java实现客户端程序,来代替telnet. 先看 ...

  4. SDWebImage底层实现原理

    SDWebImage底层实现有沙盒缓存机制,主要由三块组成 1.内存图片缓存2.内存操作缓存3.磁盘沙盒缓存内部实现过程:第一步,下载SDWebImage,导入工程. 第二步,在需要的地方导入头文件 ...

  5. 简单poi创建execl

    Workbook workbook = new HSSFWorkbook();// 创建一个Excel文件 Workbook workbook = new XSSFWorkbook();// 创建一个 ...

  6. java泛型应用实例 - 自定义泛型类,方法

    近 短时间需要使用泛型,就研究了下,发现网上的问关于泛型的文章都是讲原理的, 很少有提到那里用泛型比较合适, 本文就泛型类和泛型方法的使用给出两 个典型应用场景. 例如一个toString的泛型方法, ...

  7. flex 访问webservice方法及跨域问题解决

    一.flex调用webserivice代码 import mx.rpc.soap.WebService; import mx.rpc.events.FaultEvent;   import mx.rp ...

  8. DevOps之五 Tomcat的安装与配置

    安装说明 安装环境:CentOS-7 安装方式:源码安装 软件:apache-tomcat-9 下载地址:https://tomcat.apache.org/download-90.cgi 一.安装t ...

  9. C#高级编程笔记之第三章:对象和类型

    类和结构的区别 类成员 匿名类型 结构 弱引用 部分类 Object类,其他类都从该类派生而来 扩展方法 3.2 类和结构 类与结构的区别是它们在内存中的存储方式.访问方式(类似存储在堆上的引用类型, ...

  10. Cocos2d-x 实战

    跨平台商业项目实战:攻城大作战游戏创意触发点:做什么样的游戏?分析当前主流的游戏:经典游戏(俄罗斯方块).大众化的游戏(卡牌游戏.休闲游戏).重口味游戏. 游戏创意:生活当中 游戏开发流程:1.策划方 ...