package logger import ( rotatelogs "github.com/lestrrat-go/file-rotatelogs" "os" "path/filepath" "time" log "github.com/sirupsen/logrus" ) var globalLogger *log.Logger // Initialize 初始化全局 Logger 实例。 func Initialize(logPath string) error { // 创建日志目录 if err := os.MkdirAll(filepath.Dir(logPath), os.ModePerm); err != nil { return err } // 使用 rotatelogs 进行日志轮转 writer, err := rotatelogs.New( logPath+".%Y%m%d.log", // 文件名模式 rotatelogs.WithMaxAge(3*24*time.Hour), // 最大保留时间3天 rotatelogs.WithRotationTime(24*time.Hour), // 每天轮转一次 rotatelogs.WithLinkName(logPath), // 符号链接指向最新日志文件 rotatelogs.WithClock(rotatelogs.Local), // 使用本地时区 ) if err != nil { return err } // 设置日志格式为JSON formatter := &log.JSONFormatter{ TimestampFormat: time.RFC3339, } // 创建一个新的 Logger 实例 logger := log.New() logger.SetFormatter(formatter) logger.SetLevel(log.InfoLevel) logger.SetOutput(writer) // 设置输出到 rotatelogs 的 writer // 将全局变量设置为新创建的 Logger 实例 globalLogger = logger return nil } // Get 获取全局 Logger 实例。 func Get() *log.Logger { if globalLogger == nil { panic("Logger not initialized") } return globalLogger }