From 9ec0d1b676a340cfee742f90349ce177390319fe Mon Sep 17 00:00:00 2001 From: marcello Date: Sun, 5 Jan 2020 14:57:02 -0600 Subject: [PATCH] add: logger tests and coverage --- logger.go | 51 ++++++++++++++++++++++++++++++++------------------ logger_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 18 deletions(-) create mode 100644 logger_test.go diff --git a/logger.go b/logger.go index 7226572e..e67cd3a7 100644 --- a/logger.go +++ b/logger.go @@ -12,20 +12,26 @@ import ( "unicode" ) +const ( + RESET = "\033[0m" + + CYAN = "\033[36;1m" + MAGENTA = "\033[35m" + RED = "\033[36;31m" + REDBOLD = "\033[31;1m" + YELLOW = "\033[33m" +) + var ( defaultLogger = Logger{log.New(os.Stdout, "\r\n", 0)} sqlRegexp = regexp.MustCompile(`\?`) numericPlaceHolderRegexp = regexp.MustCompile(`\$\d+`) -) - -var ( - reset = "\033[0m" - - cyan = "\033[36;1m" - magenta = "\033[35m" - red = "\033[36;31m" - redBold = "\033[31;1m" - yellow = "\033[33m" + reset = "" + cyan = "" + magenta = "" + red = "" + redBold = "" + yellow = "" ) func isPrintable(s string) bool { @@ -37,21 +43,30 @@ func isPrintable(s string) bool { return true } -func noColor() bool { +func NoColor() bool { // https://no-color.org/ return os.Getenv("NO_COLOR") != "" } // LogFormatter is a default logger with timestamps, sql error handling, loglevel and NO_COLOR support var LogFormatter = func(values ...interface{}) (messages []interface{}) { - suppressColor := noColor() + suppressColor := NoColor() if suppressColor { - reset = "" - redBold = "" - yellow = "" - magenta = "" - cyan = "" + // To avoid string templates with _and_ without colors, just overwrite color values + // when no color will print out. red = "" + cyan = "" + reset = "" + yellow = "" + redBold = "" + magenta = "" + } else { + red = RED + cyan = CYAN + reset = RESET + yellow = YELLOW + redBold = REDBOLD + magenta = MAGENTA } if len(values) > 1 { var ( @@ -76,8 +91,8 @@ var LogFormatter = func(values ...interface{}) (messages []interface{}) { if level == "sql" { // duration messages = append(messages, fmt.Sprintf(" %s[%.2fms]%s ", cyan, float64(values[2].(time.Duration).Nanoseconds()/1e4)/100.0, reset)) - // sql + // sql for _, value := range values[4].([]interface{}) { indirectValue := reflect.Indirect(reflect.ValueOf(value)) if indirectValue.IsValid() { diff --git a/logger_test.go b/logger_test.go new file mode 100644 index 00000000..ca7a8b41 --- /dev/null +++ b/logger_test.go @@ -0,0 +1,24 @@ +package gorm_test + +import ( + "log" + "os" + "testing" + "time" + + "github.com/jinzhu/gorm" +) + +func TestNoColor(t *testing.T) { + os.Setenv("NO_COLOR", "1") + gorm.NoColor() + l := gorm.Logger{log.New(os.Stdout, "\r\n", 0)} + l.Print("info", "[info] NO_COLOR log test") + os.Setenv("NO_COLOR", "") + gorm.NoColor() +} + +func TestSQLLog(t *testing.T) { + l := gorm.Logger{log.New(os.Stdout, "\r\n", 0)} + l.Print("sql", "SQL log test", time.Duration(9990000), "sql: log format test type ", []interface{}{"cover"}, int64(0)) +}