Files
Rainbond/gpushare-scheduler-extender/pkg/log/level.go
2025-08-25 16:04:00 +08:00

71 lines
1.1 KiB
Go

package log
import (
"fmt"
"os"
"sync"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
type levelLogger struct {
level *int32
mu sync.Mutex
log *zap.Logger
}
type verbose bool
var l *levelLogger
func NewLoggerWithLevel(level int32, option ...zap.Option) {
cfg := zap.NewProductionEncoderConfig()
cfg.EncodeTime = zapcore.ISO8601TimeEncoder
core := zapcore.NewCore(
zapcore.NewJSONEncoder(cfg),
zapcore.Lock(os.Stdout),
zap.NewAtomicLevel(),
)
if option == nil {
option = []zap.Option{}
}
option = append(option, zap.AddCaller(), zap.AddCallerSkip(1))
l = &levelLogger{
level: &level,
mu: sync.Mutex{},
log: zap.New(core, option...),
}
}
/*
V for log level, normal usage example
globalLogger default level 3, debug level 10
example level:
api request 4
api response 9
services func 5
db error 9
db query 11
db result 15
*/
func V(level int32) verbose {
return level < *l.level
}
func (v verbose) Info(format string, args ...interface{}) {
if v {
l.log.Info(fmt.Sprintf(format, args...))
}
}
func Fatal(format string, args ...interface{}) {
l.log.Fatal(fmt.Sprintf(format, args...))
}