kratos icon indicating copy to clipboard operation
kratos copied to clipboard

Logging middleware will be missing trace_id when logger is filterlogger

Open LuoWeiJun-cynicism opened this issue 2 years ago • 0 comments

What happened:

启用链路追踪,日志中间件传入filterlog时,log日志中缺失trace_id值

logger := log.With(log.NewStdLogger(os.Stdout),
		"ts", log.DefaultTimestamp,
		"caller", log.DefaultCaller,
		"trace.id", tracing.TraceID()
	)

What you expected to happen:

INFO ts=2022-12-08T15:09:38+08:00 caller=tracing.go:64 trace.id=d8da228646556a2d47c73e519ba2c5f5 kind=client component=grpc operation=/video.basics.v1.notification.NotificationSrv/GetNotification args=webmaster_id:1595665043859443712 limit:20 code=0 reason= stack= latency=0.001600697

How to reproduce it (as minimally and precisely as possible):

func NewHTTPServer(c *conf.Server,  svc *service.Service, logger log.Logger) *http.Server {
	var opts = []http.ServerOption{
		http.Middleware(
			recovery.Recovery(),
			metrics.Server(
				metrics.WithSeconds(prom.NewHistogram(_metricSeconds)),
				metrics.WithRequests(prom.NewCounter(_metricRequests)),
			),
			tracing.Server(),
			logging.Server(log.NewFilter(logger,
				log.FilterFunc(func(level log.Level, keyvals ...interface{}) bool {
					for i := 0; i < len(keyvals); i++ {
						if keyvals[i] == "args" {
							keyvals[i+1] = "****"
						}
					}
					return false
				}),
			)),
		),
	}
	if c.Http.Network != "" {
		opts = append(opts, http.Network(c.Http.Network))
	}
	if c.Http.Addr != "" {
		opts = append(opts, http.Address(c.Http.Addr))
	}
	if c.Http.Timeout != nil {
		opts = append(opts, http.Timeout(c.Http.Timeout.AsDuration()))
	}
	srv := http.NewServer(opts...)
	v1.RegisterSearchHTTPServer(srv, svc)
	return srv
}

Anything else we need to know?:

Environment:

  • Kratos version (use kratos -v): v2.5.3
  • Go version (use go version): v1.18.6
  • OS (e.g: cat /etc/os-release): ubuntu 20.04
  • Others:

LuoWeiJun-cynicism avatar Dec 08 '22 08:12 LuoWeiJun-cynicism