package uzone import ( "context" "sync" "github.com/google/uuid" "github.com/loveuer/uzone/pkg/api" "github.com/loveuer/uzone/pkg/log" "go.uber.org/zap" ) type uzone_logger struct { ctx context.Context caller string sugar *zap.SugaredLogger } func (ul *uzone_logger) WithContext(ctx context.Context) *uzone_logger { ul.ctx = ctx return ul } // func (ul *uzone_logger) WithCaller(caller string) *uzone_logger { // ul.caller = caller // return ul // } func (ul *uzone_logger) GC() { ul.ctx = nil ul.caller = "" ul.sugar = nil log.Logger.Sync() uzone_logger_pool.Put(ul) } var uzone_logger_pool = &sync.Pool{ New: func() any { s := log.Logger.Sugar() return &uzone_logger{sugar: s} }, } func (ul *uzone_logger) traceId() string { if ul.ctx == nil { return uuid.Must(uuid.NewV7()).String() } if tid, ok := ul.ctx.Value(api.TraceKey).(string); ok && tid != "" { return tid } return uuid.Must(uuid.NewV7()).String() } func (ul *uzone_logger) Debug(msg string, data ...any) { ul.sugar.With("trace", ul.traceId()).Debugf(msg, data...) ul.GC() } func (ul *uzone_logger) Info(msg string, data ...any) { ul.sugar.With("trace", ul.traceId()).Infof(msg, data...) ul.GC() } func (ul *uzone_logger) Warn(msg string, data ...any) { ul.sugar.With("trace", ul.traceId()).Warnf(msg, data...) ul.GC() } func (ul *uzone_logger) Error(msg string, data ...any) { ul.sugar.With("trace", ul.traceId()).Errorf(msg, data...) ul.GC() } func (ul *uzone_logger) Panic(msg string, data ...any) { ul.sugar.With("trace", ul.traceId()).Panicf(msg, data...) ul.GC() } func (ul *uzone_logger) Fatal(msg string, data ...any) { ul.sugar.With("trace", ul.traceId()).Fatalf(msg, data...) ul.GC() }