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()) encoderConfig := zap.NewProductionEncoderConfig() encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder consoleEncoder := zapcore.NewConsoleEncoder(encoderConfig) jsonEncoder := zapcore.NewJSONEncoder(encoderConfig) core := zapcore.NewTee( zapcore.NewCore( consoleEncoder, consoleWriterSync, zapcore.DebugLevel, ), zapcore.NewCore( jsonEncoder, rollingWriterSync, zapcore.DebugLevel, ), ) logger = zap.New(core) 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(name string) *zap.Logger { return logger.Named(name) } func NamedSugar(name string) *zap.SugaredLogger { return logger.Named(name).Sugar() } func With(fields ...zap.Field) *zap.Logger { return logger.With(fields...) } func WithSugar(fields ...zap.Field) *zap.SugaredLogger { return logger.With(fields...).Sugar() }