package logger import ( "os" "time" "go.uber.org/zap" "go.uber.org/zap/zapcore" lumberjackv2 "gopkg.in/natefinch/lumberjack.v2" ) const ( Console = "console" File = "file" ) var ( Level = zap.DebugLevel Target = Console ) var ( Logger *zap.Logger Sugar *zap.SugaredLogger ) func NewEncoderConfig() zapcore.EncoderConfig { return zapcore.EncoderConfig{ // Keys can be anything except the empty string. TimeKey: "T", LevelKey: "L", NameKey: "N", CallerKey: "C", MessageKey: "M", StacktraceKey: "S", LineEnding: zapcore.DefaultLineEnding, EncodeLevel: zapcore.CapitalLevelEncoder, EncodeTime: TimeEncoder, EncodeDuration: zapcore.StringDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, } } func TimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString(t.Format("2006-01-02 15:04:05.000")) } func init() { w := zapcore.AddSync(&lumberjackv2.Logger{ Filename: "log/im.log", MaxSize: 1024, // megabytes MaxBackups: 10, MaxAge: 7, // days }) var writeSyncer zapcore.WriteSyncer if Target == Console { writeSyncer = zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)) } if Target == File { writeSyncer = zapcore.NewMultiWriteSyncer(w) } core := zapcore.NewCore( zapcore.NewConsoleEncoder(NewEncoderConfig()), writeSyncer, Level, ) Logger = zap.New(core, zap.AddCaller()) Sugar = Logger.Sugar() }