package logger import ( "os" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) var ( logger *zap.Logger sugaredLogger *zap.SugaredLogger ) func init() { consoleWriterSync := zapcore.AddSync(os.Stderr) rollingWriterSync := zapcore.AddSync(newRollingWriter()) consoleEncoderConfig := zap.NewProductionEncoderConfig() consoleEncoderConfig.EncodeTime = zapcore.RFC3339TimeEncoder consoleEncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder jsonEncoderConfig := zap.NewProductionEncoderConfig() jsonEncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder consoleEncoder := zapcore.NewConsoleEncoder(consoleEncoderConfig) jsonEncoder := zapcore.NewJSONEncoder(jsonEncoderConfig) core := zapcore.NewTee( zapcore.NewCore( consoleEncoder, consoleWriterSync, zapcore.DebugLevel, ), zapcore.NewCore( jsonEncoder, rollingWriterSync, zapcore.DebugLevel, ), ) logger = zap.New(core).Named("App") sugaredLogger = logger.Sugar() logger.Info("Logger initialized.") } func GetLogger() *zap.Logger { return logger } func Panic(msg string, fields ...zap.Field) { logger.Panic(msg, fields...) } func Fatal(msg string, fields ...zap.Field) { logger.Fatal(msg, fields...) } func Error(msg string, fields ...zap.Field) { logger.Error(msg, fields...) } func Warn(msg string, fields ...zap.Field) { logger.Warn(msg, fields...) } func Info(msg string, fields ...zap.Field) { logger.Info(msg, fields...) } func Debug(msg string, fields ...zap.Field) { logger.Debug(msg, fields...) } func Panicr(v ...interface{}) { sugaredLogger.Panic(v...) } func Panicf(format string, v ...interface{}) { sugaredLogger.Panicf(format, v...) } func Errorr(v ...interface{}) { sugaredLogger.Panic(v...) } func Errorf(format string, v ...interface{}) { sugaredLogger.Panicf(format, v...) } func Warnr(v ...interface{}) { sugaredLogger.Warn(v...) } func Warnf(format string, v ...interface{}) { sugaredLogger.Warnf(format, v...) } func Infor(v ...interface{}) { sugaredLogger.Info(v...) } func Infof(format string, v ...interface{}) { sugaredLogger.Infof(format, v...) } func Debugr(v ...interface{}) { sugaredLogger.Debug(v...) } func Debugf(format string, v ...interface{}) { sugaredLogger.Debugf(format, v...) } func Named(names ...string) *zap.Logger { var l = logger for _, name := range names { l = l.Named(name) } return l } func NamedSugar(names ...string) *zap.SugaredLogger { return Named(names...).Sugar() } func With(fields ...zap.Field) *zap.Logger { return logger.With(fields...) } func WithSugar(fields ...zap.Field) *zap.SugaredLogger { return logger.With(fields...).Sugar() }