nps/lib/logger/logger.go
2022-01-23 17:30:38 +08:00

94 lines
2.1 KiB
Go

package logger
import (
"os"
"path/filepath"
"time"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
var log *zap.Logger
var atomicLevel zap.AtomicLevel
func Debug(msg string, fields ...zap.Field) {
log.Debug(msg, fields...)
}
func Info(msg string, fields ...zap.Field) {
log.Info(msg, fields...)
}
func Warn(msg string, fields ...zap.Field) {
log.Warn(msg, fields...)
}
func Error(msg string, fields ...zap.Field) {
log.Error(msg, fields...)
}
func DPanic(msg string, fields ...zap.Field) {
log.DPanic(msg, fields...)
}
func Panic(msg string, fields ...zap.Field) {
log.Panic(msg, fields...)
}
func Fatal(msg string, fields ...zap.Field) {
log.Fatal(msg, fields...)
}
func Sync() {
log.Sync()
}
func SetLogLevel(level int) {
atomicLevel.SetLevel(zapcore.Level(level))
}
func init() {
hook := lumberjack.Logger{
Filename: filepath.Join(os.TempDir(), "nps.log"),
MaxSize: 128,
MaxBackups: 30,
MaxAge: 7,
Compress: true,
}
encoderConfig := zap.NewDevelopmentEncoderConfig()
encoderConfig.TimeKey = "log_time"
encoderConfig.LevelKey = "level"
encoderConfig.NameKey = "logger"
encoderConfig.CallerKey = "caller"
encoderConfig.MessageKey = "msg"
encoderConfig.StacktraceKey = "StacktraceKey"
encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format("2006-01-02 15:04:05"))
}
consoleConfig := encoderConfig
consoleConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
atomicLevel = zap.NewAtomicLevel()
// init info level
atomicLevel.SetLevel(zapcore.Level(-1))
core := zapcore.NewTee(
zapcore.NewCore(zapcore.NewJSONEncoder(encoderConfig), zapcore.NewMultiWriteSyncer(zapcore.AddSync(&hook)), atomicLevel),
zapcore.NewCore(zapcore.NewConsoleEncoder(consoleConfig), zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)), atomicLevel),
)
caller := zap.AddCaller()
development := zap.Development()
log = zap.New(core, caller, development, zap.AddCallerSkip(1), zap.AddStacktrace(zap.ErrorLevel))
defer log.Sync()
undo := zap.ReplaceGlobals(log)
defer undo()
logLevelSignal()
}