package gologger import ( "fmt" "strings" ) const logTemplate = "[%s] %s : %s - %s\n" func format(logEvent LogEvent) string { data := logEvent.Ts.Format("2006-01-02 15:04:05") msg := "" firstMsg := logEvent.Data[0] if isFormatString(firstMsg) { msg = fmt.Sprintf(firstMsg.(string), logEvent.Data[1:]...) } else { msg = sprint(logEvent.Data) } ret := fmt.Sprintf(logTemplate, data, logEvent.Category, getLogLevelStr(logEvent.Level), msg) return ret } func getLogLevelStr(level int) string { for name, slevel := range logLevelMap { if slevel == level { return strings.ToUpper(name) } } return "Unknown" } func isFormatString(f interface{}) bool { s, ok := f.(string) if !ok { return false } // 尝试使用空接口来格式化字符串 m := fmt.Sprintf(s, []interface{}{}...) return strings.Index(m, "MISSING") != -1 } func sprint(s []interface{}) string { str := make([]any, len(s)) for i, v := range s { if i > 0 { str[i] = fmt.Sprintf(" %v", v) } else { str[i] = fmt.Sprintf("%v", v) } } return fmt.Sprint(str...) }