package logger import ( "fmt" "log" "os" "strings" "time" ) type LogLevel int const ( DEBUG LogLevel = iota INFO WARN ERROR ) type Logger struct { level LogLevel logger *log.Logger } var defaultLogger *Logger func init() { defaultLogger = New("INFO") } // New 创建新的日志记录器 func New(levelStr string) *Logger { level := parseLogLevel(levelStr) logger := log.New(os.Stdout, "", 0) return &Logger{ level: level, logger: logger, } } // SetLevel 设置日志级别 func SetLevel(levelStr string) { defaultLogger.level = parseLogLevel(levelStr) } func parseLogLevel(levelStr string) LogLevel { switch strings.ToUpper(levelStr) { case "DEBUG": return DEBUG case "INFO": return INFO case "WARN", "WARNING": return WARN case "ERROR": return ERROR default: return INFO } } func (l *Logger) log(level LogLevel, format string, args ...interface{}) { if level < l.level { return } levelStr := "" levelColor := "" resetColor := "\033[0m" switch level { case DEBUG: levelStr = "DEBUG" levelColor = "\033[36m" // Cyan case INFO: levelStr = "INFO" levelColor = "\033[32m" // Green case WARN: levelStr = "WARN" levelColor = "\033[33m" // Yellow case ERROR: levelStr = "ERROR" levelColor = "\033[31m" // Red } timestamp := time.Now().Format("2006-01-02T15:04:05.000Z07:00") message := fmt.Sprintf(format, args...) // 结构化日志格式,类似logrus但保持简洁 logLine := fmt.Sprintf("%s[%s%s%s] [wormhole-client] %s", timestamp, levelColor, levelStr, resetColor, message) l.logger.Println(logLine) } // Debug 调试日志 func (l *Logger) Debug(format string, args ...interface{}) { l.log(DEBUG, format, args...) } // Info 信息日志 func (l *Logger) Info(format string, args ...interface{}) { l.log(INFO, format, args...) } // Warn 警告日志 func (l *Logger) Warn(format string, args ...interface{}) { l.log(WARN, format, args...) } // Error 错误日志 func (l *Logger) Error(format string, args ...interface{}) { l.log(ERROR, format, args...) } // 全局日志函数 func Debug(format string, args ...interface{}) { defaultLogger.Debug(format, args...) } func Info(format string, args ...interface{}) { defaultLogger.Info(format, args...) } func Warn(format string, args ...interface{}) { defaultLogger.Warn(format, args...) } func Error(format string, args ...interface{}) { defaultLogger.Error(format, args...) }