Files

72 lines
1.5 KiB
Go

package log
import (
"fmt"
"sync"
"go.uber.org/zap"
)
// global Logger and SugaredLogger.
var (
_globalMu sync.RWMutex
_globalL *Logger
_globalS *SugaredLogger
)
func init() {
SetLogger(zap.Must(zap.NewProduction()))
}
func NewLeveled(l Level, options ...Option) (*Logger, error) {
switch l {
case SilentLevel:
return zap.NewNop(), nil
case DebugLevel:
return zap.NewDevelopment(options...)
case InfoLevel, WarnLevel, ErrorLevel, DPanicLevel, PanicLevel, FatalLevel:
cfg := zap.NewProductionConfig()
cfg.Level.SetLevel(l)
return cfg.Build(options...)
default:
return nil, fmt.Errorf("invalid level: %s", l)
}
}
// SetLogger sets the global Logger and SugaredLogger.
func SetLogger(logger *Logger) {
_globalMu.Lock()
defer _globalMu.Unlock()
// apply pkgCallerSkip to global loggers.
_globalL = logger.WithOptions(pkgCallerSkip)
_globalS = _globalL.Sugar()
_globalE.setLogger(_globalS)
}
func logf(lvl Level, template string, args ...any) {
_globalMu.RLock()
s := _globalS
_globalMu.RUnlock()
s.Logf(lvl, template, args...)
}
func Debugf(template string, args ...any) {
logf(DebugLevel, template, args...)
}
func Infof(template string, args ...any) {
logf(InfoLevel, template, args...)
}
func Warnf(template string, args ...any) {
logf(WarnLevel, template, args...)
}
func Errorf(template string, args ...any) {
logf(ErrorLevel, template, args...)
}
func Fatalf(template string, args ...any) {
logf(FatalLevel, template, args...)
}