upp/log.go
2025-03-10 22:41:10 +08:00

85 lines
1.7 KiB
Go

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()
}