kratos
kratos copied to clipboard
Logging middleware will be missing trace_id when logger is filterlogger
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: