diff --git a/logging/logrus/ctxlogrus/context.go b/logging/logrus/ctxlogrus/context.go index 808121958..f0a7820ab 100644 --- a/logging/logrus/ctxlogrus/context.go +++ b/logging/logrus/ctxlogrus/context.go @@ -2,6 +2,7 @@ package ctxlogrus import ( "context" + "sync" "github.com/grpc-ecosystem/go-grpc-middleware/tags" "github.com/sirupsen/logrus" @@ -12,6 +13,7 @@ type ctxLoggerMarker struct{} type ctxLogger struct { logger *logrus.Entry fields logrus.Fields + lock sync.Mutex } var ( @@ -24,9 +26,12 @@ func AddFields(ctx context.Context, fields logrus.Fields) { if !ok || l == nil { return } + + l.lock.Lock() for k, v := range fields { l.fields[k] = v } + l.lock.Unlock() } // Extract takes the call-scoped logrus.Entry from ctx_logrus middleware. @@ -48,9 +53,11 @@ func Extract(ctx context.Context) *logrus.Entry { } // Add logrus fields added until now. + l.lock.Lock() for k, v := range l.fields { fields[k] = v } + l.lock.Unlock() return l.logger.WithFields(fields) } diff --git a/logging/zap/ctxzap/context.go b/logging/zap/ctxzap/context.go index 9bc5541d7..082c8ded3 100644 --- a/logging/zap/ctxzap/context.go +++ b/logging/zap/ctxzap/context.go @@ -2,6 +2,7 @@ package ctxzap import ( "context" + "sync" "github.com/grpc-ecosystem/go-grpc-middleware/tags" "go.uber.org/zap" @@ -13,6 +14,7 @@ type ctxMarker struct{} type ctxLogger struct { logger *zap.Logger fields []zapcore.Field + lock sync.Mutex } var ( @@ -26,7 +28,10 @@ func AddFields(ctx context.Context, fields ...zapcore.Field) { if !ok || l == nil { return } + + l.lock.Lock() l.fields = append(l.fields, fields...) + l.lock.Unlock() } // Extract takes the call-scoped Logger from grpc_zap middleware. @@ -39,8 +44,12 @@ func Extract(ctx context.Context) *zap.Logger { } // Add grpc_ctxtags tags metadata until now. fields := TagsToFields(ctx) + // Add zap fields added until now. + l.lock.Lock() fields = append(fields, l.fields...) + l.lock.Unlock() + return l.logger.With(fields...) }