gin+logrus中使用traceId,在每个请求中加入追踪编号

很多项目都需要多个服务配合相互调用,所以请求经常需要有一个traceId来记录和追踪每个请求。

下面介绍下怎么在logrus中添加traceId

其实使用的是logrus的hook钩子

type TraceIdHook struct {
    TraceId string
}

func NewTraceIdHook(traceId string) logrus.Hook {
    hook := TraceIdHook{
        TraceId: traceId,
    }
    return &hook
}

func (hook *TraceIdHook) Fire(entry *logrus.Entry) error {
    entry.Data[consts.TRACE_ID] = hook.TraceId
    return nil
}

func (hook *TraceIdHook) Levels() []logrus.Level {
    return logrus.AllLevels
}

自定义了一个TraceId的结构体,实现了logrus中的hook接口,该接口需要实现Fire和Levels两个方法

// 在每个处理器前添加该处理函数,为每个请求添加traceId
func AddTraceId(c *gin.Context) {
    traceId := utils.GetTraceId(c)
    Logger.AddHook(logger.NewTraceIdHook(traceId))
}

然后再路由中添加该处理函数

func AddRouters(c *gin.Engine) {
    c.GET(xxxx, AddTraceId, handler)
}

这样就能实现在每个请求日志里面打印traceId了

原文地址:https://www.cnblogs.com/lgh344902118/p/15339016.html