2025-05-28 16:19:21 +08:00

132 lines
3.2 KiB
Go

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...)
}