From f3733e18a4217804911033e8915063fd958e7ba6 Mon Sep 17 00:00:00 2001 From: marcello Date: Sun, 5 Jan 2020 12:59:05 -0600 Subject: [PATCH] add: disable default logger color with NO_COLOR support. https://no-color.org/ --- logger.go | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/logger.go b/logger.go index 88e167dd..7226572e 100644 --- a/logger.go +++ b/logger.go @@ -18,6 +18,16 @@ var ( 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" +) + func isPrintable(s string) bool { for _, r := range s { if !unicode.IsPrint(r) { @@ -27,14 +37,29 @@ func isPrintable(s string) bool { return true } +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() + if suppressColor { + reset = "" + redBold = "" + yellow = "" + magenta = "" + cyan = "" + red = "" + } if len(values) > 1 { 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]) + currentTime = fmt.Sprintf("\n%s[%s]%s", yellow, NowFunc().Format("2006-01-02 15:04:05"), reset) + source = fmt.Sprintf("%s(%v)%s", magenta, values[1], reset) ) messages = []interface{}{source, currentTime} @@ -43,14 +68,14 @@ var LogFormatter = func(values ...interface{}) (messages []interface{}) { //remove the line break currentTime = currentTime[1:] //remove the brackets - source = fmt.Sprintf("\033[35m%v\033[0m", values[1]) + source = fmt.Sprintf("%s%v%s", magenta, values[1], reset) messages = []interface{}{currentTime, source} } if level == "sql" { // duration - messages = append(messages, fmt.Sprintf(" \033[36;1m[%.2fms]\033[0m ", float64(values[2].(time.Duration).Nanoseconds()/1e4)/100.0)) + messages = append(messages, fmt.Sprintf(" %s[%.2fms]%s ", cyan, float64(values[2].(time.Duration).Nanoseconds()/1e4)/100.0, reset)) // sql for _, value := range values[4].([]interface{}) { @@ -106,11 +131,11 @@ var LogFormatter = func(values ...interface{}) (messages []interface{}) { } messages = append(messages, sql) - messages = append(messages, fmt.Sprintf(" \n\033[36;31m[%v]\033[0m ", strconv.FormatInt(values[5].(int64), 10)+" rows affected or returned ")) + messages = append(messages, fmt.Sprintf(" \n%s[%s rows affected or returned]%s ", red, strconv.FormatInt(values[5].(int64), 10), reset)) } else { - messages = append(messages, "\033[31;1m") + messages = append(messages, redBold) messages = append(messages, values[2:]...) - messages = append(messages, "\033[0m") + messages = append(messages, reset) } }