zwrap/restore_colors.go

74 lines
1.5 KiB
Go

package zwrap
import (
"fmt"
"github.com/rs/zerolog"
"strings"
)
const (
colorBlack = iota + 30
colorRed
colorGreen
colorYellow
colorBlue
colorMagenta
colorCyan
colorWhite
colorBold = 1
colorDarkGray = 90
)
var LevelColors = map[zerolog.Level]int{
zerolog.TraceLevel: colorMagenta,
zerolog.DebugLevel: colorYellow,
zerolog.InfoLevel: colorGreen,
zerolog.WarnLevel: colorRed,
zerolog.ErrorLevel: colorRed,
zerolog.FatalLevel: colorRed,
zerolog.PanicLevel: colorRed,
}
// Colorize returns the string s wrapped in ANSI code c, unless disabled is true or c is 0.
func Colorize(s interface{}, c int, disabled bool) string {
if disabled {
return fmt.Sprintf("%s", s)
}
return fmt.Sprintf("\x1b[%dm%v\x1b[0m", c, s)
}
// FormattedLevels are used by ConsoleWriter's consoleDefaultFormatLevel
// for a short level name.
var FormattedLevels = map[zerolog.Level]string{
zerolog.TraceLevel: "TRC",
zerolog.DebugLevel: "DBG",
zerolog.InfoLevel: "INF",
zerolog.WarnLevel: "WRN",
zerolog.ErrorLevel: "ERR",
zerolog.FatalLevel: "FTL",
zerolog.PanicLevel: "PNC",
}
func LogLevelFmt(noColor bool) zerolog.Formatter {
return func(i interface{}) string {
var l string
if ll, ok := i.(string); ok {
level, _ := zerolog.ParseLevel(ll)
fl, ok := FormattedLevels[level]
if ok {
l = Colorize(fl, LevelColors[level], noColor)
} else {
l = strings.ToUpper(ll)[0:3]
}
} else {
if i == nil {
l = "???"
} else {
l = strings.ToUpper(fmt.Sprintf("%s", i))[0:3]
}
}
return l
}
}