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

  • 相关阅读:
    poj 1634
    poj 2153
    POJ 1693
    poj 1789
    POJ 2676
    vue 路由
    用 node.js 创建第一个Hello World
    js原生Ajax 的封装和原理
    BFC原理
    怎么理解js的面向对象编程
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/15339016.html
Copyright © 2011-2022 走看看