diff --git a/logger.go b/logger.go index 907faa8e..8a09f02f 100644 --- a/logger.go +++ b/logger.go @@ -24,44 +24,48 @@ var defaultLogger = Logger{log.New(os.Stdout, "\r\n", 0)} var sqlRegexp = regexp.MustCompile(`(\$\d+)|\?`) func (logger Logger) Print(values ...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} - 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 formatedValues []interface{} - 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 { - formatedValues = append(formatedValues, fmt.Sprintf("'%v'", t.Format(time.RFC3339))) - } else if b, ok := value.([]byte); ok { - formatedValues = append(formatedValues, fmt.Sprintf("'%v'", string(b))) - } else if r, ok := value.(driver.Valuer); ok { - if value, err := r.Value(); err == nil && value != nil { - formatedValues = append(formatedValues, fmt.Sprintf("'%v'", value)) + if gormLog := os.Getenv("GORM_LOG_ON"); gormLog != "" { + + 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} + + 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 formatedValues []interface{} + 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 { + formatedValues = append(formatedValues, fmt.Sprintf("'%v'", t.Format(time.RFC3339))) + } else if b, ok := value.([]byte); ok { + formatedValues = append(formatedValues, fmt.Sprintf("'%v'", string(b))) + } else if r, ok := value.(driver.Valuer); ok { + if value, err := r.Value(); err == nil && value != nil { + formatedValues = append(formatedValues, fmt.Sprintf("'%v'", value)) + } else { + formatedValues = append(formatedValues, "NULL") + } } else { - formatedValues = append(formatedValues, "NULL") + formatedValues = append(formatedValues, fmt.Sprintf("'%v'", value)) } } else { formatedValues = append(formatedValues, fmt.Sprintf("'%v'", value)) } - } else { - formatedValues = append(formatedValues, fmt.Sprintf("'%v'", value)) } + messages = append(messages, fmt.Sprintf(sqlRegexp.ReplaceAllString(values[3].(string), "%v"), formatedValues...)) + } else { + messages = append(messages, "\033[31;1m") + messages = append(messages, values[2:]...) + messages = append(messages, "\033[0m") } - messages = append(messages, fmt.Sprintf(sqlRegexp.ReplaceAllString(values[3].(string), "%v"), formatedValues...)) - } else { - messages = append(messages, "\033[31;1m") - messages = append(messages, values[2:]...) - messages = append(messages, "\033[0m") + logger.Println(messages...) } - logger.Println(messages...) } } diff --git a/utils.go b/utils.go index ca7e04e8..25e3a4f9 100644 --- a/utils.go +++ b/utils.go @@ -3,6 +3,7 @@ package gorm import ( "bytes" "strings" + "sync" ) // Copied from golint @@ -18,6 +19,7 @@ func init() { } var smap = map[string]string{} +var mutex = &sync.Mutex{} func ToDBName(name string) string { if v, ok := smap[name]; ok { @@ -34,7 +36,9 @@ func ToDBName(name string) string { } s := strings.ToLower(buf.String()) + mutex.Lock() smap[name] = s + mutex.Unlock() return s }