package logger import ( "os" "path/filepath" "github.com/emsoft/HospitalPay-Go/internal/config" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) var Logger *zap.Logger var SugaredLogger *zap.SugaredLogger // Init 初始化日志 func Init() error { logConfig := config.GlobalConfig.Log // 确保日志目录存在 if err := os.MkdirAll(filepath.Dir(logConfig.OutputPath), 0755); err != nil { return err } // 设置日志轮转 w := zapcore.AddSync(&lumberjack.Logger{ Filename: logConfig.OutputPath, MaxSize: logConfig.MaxSize, MaxBackups: logConfig.MaxBackups, MaxAge: logConfig.MaxAge, Compress: logConfig.Compress, }) // 设置日志级别 var level zapcore.Level switch logConfig.Level { case "debug": level = zapcore.DebugLevel case "info": level = zapcore.InfoLevel case "warn": level = zapcore.WarnLevel case "error": level = zapcore.ErrorLevel case "fatal": level = zapcore.FatalLevel default: level = zapcore.InfoLevel } // 设置日志编码器 encoderConfig := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", NameKey: "logger", CallerKey: "caller", MessageKey: "msg", StacktraceKey: "stacktrace", LineEnding: zapcore.DefaultLineEnding, EncodeLevel: zapcore.LowercaseLevelEncoder, EncodeTime: zapcore.ISO8601TimeEncoder, EncodeDuration: zapcore.SecondsDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, } var encoder zapcore.Encoder if logConfig.Format == "json" { encoder = zapcore.NewJSONEncoder(encoderConfig) } else { encoder = zapcore.NewConsoleEncoder(encoderConfig) } // 创建核心 core := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(w, zapcore.AddSync(os.Stdout)), level) // 创建日志实例 Logger = zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1)) SugaredLogger = Logger.Sugar() return nil } // Debug logs a message at debug level func Debug(msg string, fields ...zapcore.Field) { Logger.Debug(msg, fields...) } // Info logs a message at info level func Info(msg string, fields ...zapcore.Field) { Logger.Info(msg, fields...) } // Warn logs a message at warn level func Warn(msg string, fields ...zapcore.Field) { Logger.Warn(msg, fields...) } // Error logs a message at error level func Error(msg string, fields ...zapcore.Field) { Logger.Error(msg, fields...) } // Fatal logs a message at fatal level and then calls os.Exit(1) func Fatal(msg string, fields ...zapcore.Field) { Logger.Fatal(msg, fields...) } // Debugf logs a formatted message at debug level func Debugf(format string, args ...interface{}) { SugaredLogger.Debugf(format, args...) } // Infof logs a formatted message at info level func Infof(format string, args ...interface{}) { SugaredLogger.Infof(format, args...) } // Warnf logs a formatted message at warn level func Warnf(format string, args ...interface{}) { SugaredLogger.Warnf(format, args...) } // Errorf logs a formatted message at error level func Errorf(format string, args ...interface{}) { SugaredLogger.Errorf(format, args...) } // Fatalf logs a formatted message at fatal level and then calls os.Exit(1) func Fatalf(format string, args ...interface{}) { SugaredLogger.Fatalf(format, args...) }