From 97949fdbc19e0f77a7d798d1e0a972e78034abf3 Mon Sep 17 00:00:00 2001 From: Jinzhu Date: Sun, 15 Jan 2017 16:58:55 +0800 Subject: [PATCH] Refactor Logger --- logger.go | 73 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/logger.go b/logger.go index 4f312087..9f1d4458 100644 --- a/logger.go +++ b/logger.go @@ -17,41 +17,38 @@ var ( numericPlaceHolderRegexp = regexp.MustCompile(`\$\d+`) ) -type logger interface { - Print(v ...interface{}) +func isPrintable(s string) bool { + for _, r := range s { + if !unicode.IsPrint(r) { + return false + } + } + return true } -// LogWriter log writer interface -type LogWriter interface { - Println(v ...interface{}) -} - -// Logger default logger -type Logger struct { - LogWriter -} - -// Print format & print log -func (logger Logger) Print(values ...interface{}) { +var LogFormatter = func(values ...interface{}) (messages []interface{}) { if len(values) > 1 { - level := values[0] - currentTime := "\n\033[33m[" + NowFunc().Format("2006-01-02 15:04:05") + "]\033[0m" - source := fmt.Sprintf("\033[35m(%v)\033[0m", values[1]) - messages := []interface{}{source, currentTime} + var ( + sql string + formattedValues []string + level = values[0] + currentTime = "\n\033[33m[" + NowFunc().Format("2006-01-02 15:04:05") + "]\033[0m" + source = fmt.Sprintf("\033[35m(%v)\033[0m", values[1]) + ) + + messages = []interface{}{source, currentTime} if level == "sql" { // duration messages = append(messages, fmt.Sprintf(" \033[36;1m[%.2fms]\033[0m ", float64(values[2].(time.Duration).Nanoseconds()/1e4)/100.0)) // sql - var sql string - var formattedValues []string for _, value := range values[4].([]interface{}) { indirectValue := reflect.Indirect(reflect.ValueOf(value)) if indirectValue.IsValid() { value = indirectValue.Interface() if t, ok := value.(time.Time); ok { - formattedValues = append(formattedValues, fmt.Sprintf("'%v'", t.Format(time.RFC3339))) + formattedValues = append(formattedValues, fmt.Sprintf("'%v'", t.Format("2006-01-02 15:04:05"))) } else if b, ok := value.([]byte); ok { if str := string(b); isPrintable(str) { formattedValues = append(formattedValues, fmt.Sprintf("'%v'", str)) @@ -68,7 +65,7 @@ func (logger Logger) Print(values ...interface{}) { formattedValues = append(formattedValues, fmt.Sprintf("'%v'", value)) } } else { - formattedValues = append(formattedValues, fmt.Sprintf("'%v'", value)) + formattedValues = append(formattedValues, "NULL") } } @@ -77,11 +74,10 @@ func (logger Logger) Print(values ...interface{}) { sql = values[3].(string) for index, value := range formattedValues { placeholder := fmt.Sprintf(`\$%d`, index+1) - subre := regexp.MustCompile(placeholder) - sql = subre.ReplaceAllString(sql, value) + sql = regexp.MustCompile(placeholder).ReplaceAllString(sql, value) } } else { - var formattedValuesLength = len(formattedValues) + formattedValuesLength := len(formattedValues) for index, value := range sqlRegexp.Split(values[3].(string), -1) { sql += value if index < formattedValuesLength { @@ -96,15 +92,26 @@ func (logger Logger) Print(values ...interface{}) { messages = append(messages, values[2:]...) messages = append(messages, "\033[0m") } - logger.Println(messages...) } + + return } -func isPrintable(s string) bool { - for _, r := range s { - if !unicode.IsPrint(r) { - return false - } - } - return true +type logger interface { + Print(v ...interface{}) +} + +// LogWriter log writer interface +type LogWriter interface { + Println(v ...interface{}) +} + +// Logger default logger +type Logger struct { + LogWriter +} + +// Print format & print log +func (logger Logger) Print(values ...interface{}) { + logger.Println(LogFormatter(values...)...) }