add: disable default logger color with NO_COLOR support. https://no-color.org/

This commit is contained in:
marcello 2020-01-05 12:59:05 -06:00
parent 79a77d771d
commit f3733e18a4

View File

@ -18,6 +18,16 @@ var (
numericPlaceHolderRegexp = regexp.MustCompile(`\$\d+`) 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 { func isPrintable(s string) bool {
for _, r := range s { for _, r := range s {
if !unicode.IsPrint(r) { if !unicode.IsPrint(r) {
@ -27,14 +37,29 @@ func isPrintable(s string) bool {
return true 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{}) { var LogFormatter = func(values ...interface{}) (messages []interface{}) {
suppressColor := noColor()
if suppressColor {
reset = ""
redBold = ""
yellow = ""
magenta = ""
cyan = ""
red = ""
}
if len(values) > 1 { if len(values) > 1 {
var ( var (
sql string sql string
formattedValues []string formattedValues []string
level = values[0] level = values[0]
currentTime = "\n\033[33m[" + NowFunc().Format("2006-01-02 15:04:05") + "]\033[0m" currentTime = fmt.Sprintf("\n%s[%s]%s", yellow, NowFunc().Format("2006-01-02 15:04:05"), reset)
source = fmt.Sprintf("\033[35m(%v)\033[0m", values[1]) source = fmt.Sprintf("%s(%v)%s", magenta, values[1], reset)
) )
messages = []interface{}{source, currentTime} messages = []interface{}{source, currentTime}
@ -43,14 +68,14 @@ var LogFormatter = func(values ...interface{}) (messages []interface{}) {
//remove the line break //remove the line break
currentTime = currentTime[1:] currentTime = currentTime[1:]
//remove the brackets //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} messages = []interface{}{currentTime, source}
} }
if level == "sql" { if level == "sql" {
// duration // 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 // sql
for _, value := range values[4].([]interface{}) { for _, value := range values[4].([]interface{}) {
@ -106,11 +131,11 @@ var LogFormatter = func(values ...interface{}) (messages []interface{}) {
} }
messages = append(messages, sql) 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 { } else {
messages = append(messages, "\033[31;1m") messages = append(messages, redBold)
messages = append(messages, values[2:]...) messages = append(messages, values[2:]...)
messages = append(messages, "\033[0m") messages = append(messages, reset)
} }
} }