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了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM