package logger import ( "ca-mini/internal/config" "fmt" "log" "os" "path/filepath" "time" "github.com/sirupsen/logrus" ) var ( // Logger 日志记录器 Logger *logrus.Logger // LogFile 日志文件 LogFile *os.File // LogFilePath 日志文件路径 LogFilePath string // LogFileName 日志文件名 LogFileName string // LogFileExt 日志文件扩展名 LogFileExt string ) // InitLogger 初始化日志记录器 func InitLogger() { // 创建日志记录器 Logger = logrus.New() // 显示行号 logrus.SetReportCaller(true) // 设置日志格式 Logger.SetFormatter(&logrus.JSONFormatter{ TimestampFormat: "2006-01-02 15:04:05", }) cfg, err := config.Load() if err != nil { log.Fatalf("Failed to load config: %v", err) } // 设置日志级别 level, err := logrus.ParseLevel(cfg.Logging.Level) if err != nil { log.Fatalf("Invalid log level: %v", err) } Logger.SetLevel(level) // 设置日志输出到文件 LogFilePath = cfg.Logging.Path if LogFilePath == "" { LogFilePath = "./logs" } if _, err := os.Stat(LogFilePath); os.IsNotExist(err) { err := os.MkdirAll(LogFilePath, os.ModePerm) if err != nil { log.Fatalf("Failed to create log directory: %v", err) } } LogFileName = fmt.Sprintf("ca-server-%s.log", time.Now().Format("2006-01-02")) LogFileExt = ".log" LogFile, err = os.OpenFile(filepath.Join(LogFilePath, LogFileName), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { log.Fatalf("Failed to open log file: %v", err) } Logger.SetOutput(LogFile) } // CloseLogger 关闭日志记录器 func CloseLogger() { if LogFile != nil { err := LogFile.Close() if err != nil { if Logger != nil { Logger.Errorf("Failed to close log file: %v", err) } else { log.Printf("Failed to close log file: %v", err) } } } } // LogDebugf 记录调试日志(格式化) func Debug(format string, args ...interface{}) { if Logger != nil { Logger.Debugf(format, args...) } } // LogInfof 记录信息日志(格式化) func Info(format string, args ...interface{}) { if Logger != nil { Logger.Infof(format, args...) } } // LogErrorf 记录错误日志(格式化) func Error(format string, args ...interface{}) { if Logger != nil { Logger.Errorf(format, args...) } else { log.Printf(format, args...) } }