package log import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) func NewLogger(conf Conf) (*zap.Logger, error) { zLevel, err := zapcore.ParseLevel(conf.Level) if err != nil { return nil, err } if conf.SyncConf == nil { conf.SyncConf = &defaultSyncConf } else { conf.SyncConf.setDefaultSyncConf() } return zap.New(zapcore.NewCore(getEncoder(outFormat(conf.OutFormat)), getWriteSyncer(conf.FileName, conf.SyncConf), zLevel), zap.AddCaller()), nil } func NewSugarLogger(conf Conf) (*zap.SugaredLogger, error) { logger, err := NewLogger(conf) if err != nil { return nil, err } return logger.Sugar(), nil } func getEncoder(format outFormat) zapcore.Encoder { encoderConfig := zap.NewProductionEncoderConfig() encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder encoderConfig.FunctionKey = "function" if format == Json { return zapcore.NewJSONEncoder(encoderConfig) } else if format == console { return zapcore.NewConsoleEncoder(encoderConfig) } return zapcore.NewJSONEncoder(encoderConfig) } func getWriteSyncer(destFile string, conf *syncConf) zapcore.WriteSyncer { lumberjackLogger := &lumberjack.Logger{ Filename: destFile, MaxSize: conf.MaxSize, MaxBackups: conf.MaxBackUps, MaxAge: conf.MaxAges, Compress: conf.Compress, } return zapcore.AddSync(lumberjackLogger) }