下面介绍下怎么在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了