package logger import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" "os" ) var logger *zap.Logger var sugarLogger *zap.SugaredLogger func GetLogger() *zap.SugaredLogger { if sugarLogger != nil { return sugarLogger } logLevel := zap.NewAtomicLevelAt(zapcore.InfoLevel) encoder := getEncoder() writerSyncer := getLogWriter() fileCore := zapcore.NewCore(encoder, writerSyncer, logLevel) consoleOutput := zapcore.Lock(os.Stdout) consoleCore := zapcore.NewCore( encoder, consoleOutput, logLevel, ) core := zapcore.NewTee(fileCore, consoleCore) logger = zap.New(core, zap.AddCaller()) sugarLogger = logger.Sugar() return sugarLogger } // core 三个参数之 编码 func getEncoder() zapcore.Encoder { encoderConfig := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", NameKey: "logger", CallerKey: "caller", MessageKey: "msg", StacktraceKey: "stacktrace", EncodeTime: zapcore.ISO8601TimeEncoder, EncodeDuration: zapcore.SecondsDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, EncodeLevel: zapcore.CapitalLevelEncoder, } return zapcore.NewConsoleEncoder(encoderConfig) } func getLogWriter() zapcore.WriteSyncer { lumberJackLogger := &lumberjack.Logger{ Filename: "logs/app.log", MaxSize: 10, MaxBackups: 5, MaxAge: 30, Compress: false, } return zapcore.AddSync(lumberJackLogger) }