132 lines
3.2 KiB
Go
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...)
|
|
}
|