很多項目都需要多個服務配合相互調用,所以請求經常需要有一個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了