spark-server/internal/infrastructure/logger/logger.go
2026-09-18 14:50:41 +08:00

65 lines
1.4 KiB
Go

package logger
import (
"context"
"go.uber.org/zap"
"spark-server/internal/pkg/reqctx"
)
type ctxKey struct{}
func Nop() *zap.Logger { return zap.NewNop() }
func With(ctx context.Context, log *zap.Logger) context.Context {
return context.WithValue(ctx, ctxKey{}, log)
}
func From(ctx context.Context) *zap.Logger {
if ctx == nil {
return zap.NewNop()
}
if log, ok := ctx.Value(ctxKey{}).(*zap.Logger); ok && log != nil {
return log
}
return zap.NewNop()
}
// Attach stores a logger on ctx with request_id from RequestContext.
func Attach(ctx context.Context, base *zap.Logger) context.Context {
if base == nil {
base = zap.NewNop()
}
return With(ctx, WithReq(base, reqctx.From(ctx)))
}
func WithReq(log *zap.Logger, rc *reqctx.RequestContext) *zap.Logger {
if log == nil {
log = zap.NewNop()
}
if rc == nil {
return log
}
fields := make([]zap.Field, 0, 8)
if rc.RequestID != "" {
fields = append(fields, zap.String("request_id", rc.RequestID))
}
if rc.ConnectionID != "" {
fields = append(fields, zap.String("connection_id", rc.ConnectionID))
}
if rc.RealIP != "" {
fields = append(fields, zap.String("real_ip", rc.RealIP))
}
if rc.Language != "" {
fields = append(fields, zap.String("lang", rc.Language))
}
if rc.UserID != 0 {
fields = append(fields, zap.Int64("user_id", rc.UserID))
}
if len(fields) == 0 {
return log
}
return log.With(fields...)
}