package log import ( "context" "fmt" "github.com/gin-gonic/gin" "github.com/spf13/viper" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" "os" "path/filepath" "time" ) const ctxLoggerKey = "zapLogger" // ServiceType 服务类型 type ServiceType int const ( API ServiceType = iota // API服务 Task // Task服务 ) type Logger struct { *zap.Logger } // NewLog 创建一个新的日志实例,兼容旧版本配置 func NewLog(conf *viper.Viper) *Logger { return NewServiceLog(conf, API) } // NewServiceLog 创建特定服务类型的日志实例 func NewServiceLog(conf *viper.Viper, serviceType ServiceType) *Logger { var logPath string // 根据服务类型和日期生成日志文件名 logFormat := conf.GetString("log.log_format") // 日期格式,如"2006-01-02" // 确保有默认的日期格式 if logFormat == "" { logFormat = "2006-01-02" } currentDate := time.Now().Format(logFormat) if serviceType == API && conf.IsSet("log.api_log_file") { // 使用API日志路径 logPath = conf.GetString("log.api_log_file") logPath = fmt.Sprintf(logPath, currentDate) // 替换日期占位符 } else if serviceType == Task && conf.IsSet("log.task_log_file") { // 使用Task日志路径 logPath = conf.GetString("log.task_log_file") logPath = fmt.Sprintf(logPath, currentDate) // 替换日期占位符 } else { // 如果未配置专用日志路径,则使用旧配置 logPath = conf.GetString("log.log_file_name") } // 确保日志目录存在 if err := ensureDirExists(logPath); err != nil { // 如果创建目录失败,回退到临时目录 fmt.Printf("Error creating log directory: %v, using default path\n", err) logPath = "./logs/app.log" ensureDirExists(logPath) } // 获取日志级别 lv := conf.GetString("log.log_level") var level zapcore.Level //debug