package logging import ( "fmt" "time" ) // StandardFormatter 标准日志格式化器 type StandardFormatter struct { startTime time.Time } // NewStandardFormatter 创建标准格式化器 func NewStandardFormatter() *StandardFormatter { return &StandardFormatter{ startTime: time.Now(), } } // SetStartTime 设置开始时间 func (f *StandardFormatter) SetStartTime(startTime time.Time) { f.startTime = startTime } // Format 格式化日志条目 func (f *StandardFormatter) Format(entry *LogEntry) string { elapsed := time.Since(f.startTime) timeStr := f.formatElapsedTime(elapsed) prefix := f.getLevelPrefix(entry.Level) return fmt.Sprintf("[%s] %s %s", timeStr, prefix, entry.Content) } // formatElapsedTime 格式化经过的时间 func (f *StandardFormatter) formatElapsedTime(elapsed time.Duration) string { switch { case elapsed < time.Second: // 毫秒显示,不需要小数 return fmt.Sprintf("%dms", elapsed.Milliseconds()) case elapsed < time.Minute: // 秒显示,保留一位小数 return fmt.Sprintf("%.1fs", elapsed.Seconds()) case elapsed < time.Hour: // 分钟和秒显示 minutes := int(elapsed.Minutes()) seconds := int(elapsed.Seconds()) % 60 return fmt.Sprintf("%dm%ds", minutes, seconds) default: // 小时、分钟和秒显示 hours := int(elapsed.Hours()) minutes := int(elapsed.Minutes()) % 60 seconds := int(elapsed.Seconds()) % 60 return fmt.Sprintf("%dh%dm%ds", hours, minutes, seconds) } } // getLevelPrefix 获取日志级别前缀 func (f *StandardFormatter) getLevelPrefix(level LogLevel) string { switch level { case LevelSuccess: return "[+]" case LevelInfo: return "[*]" case LevelError: return "[-]" default: return " " } } // ============================================================================================= // 已删除的死代码(未使用): // DetailedFormatter 及其 Format() 方法 // JSONFormatter 及其 SetStartTime() 和 Format() 方法 // =============================================================================================