package user_core_client import ( "fmt" "io" "log" "os" "sync/atomic" ) type Logger interface { Printf(format string, v ...any) } func NewLogger() *SdkLogger { return &SdkLogger{ logEnabled: atomic.Bool{}, logger: log.New(io.Discard, "user-core-sdk", log.LstdFlags|log.Lshortfile), } } type SdkLogger struct { logEnabled atomic.Bool logger *log.Logger } func (l *SdkLogger) Debug(debug bool) *SdkLogger { if debug { l.logger.SetOutput(os.Stdout) } else { l.logger.SetOutput(io.Discard) } l.logEnabled.Store(debug) return l } func (l *SdkLogger) SetOutput(w io.Writer) *SdkLogger { if w == nil { l.logger.SetOutput(io.Discard) } else { l.logger.SetOutput(w) } return l } func (l *SdkLogger) Printf(format string, v ...any) { if !l.logEnabled.Load() { return } _ = l.logger.Output(2, fmt.Sprintf(format, v...)) }