Merge pull request 'add color support: levels are now printed with a corresponding color' (#1) from color into master

This commit is contained in:
Sarah Jamie Lewis 2020-06-25 11:17:49 -07:00
commit bd1a3395fe
2 changed files with 50 additions and 3 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.idea

52
log.go
View File

@ -19,7 +19,38 @@ const (
LevelError LevelError
) )
/**** Color code from https://gist.github.com/ik5/d8ecde700972d4378d87 ****/
var (
Debug = Teal
Info = Green
Warn = Yellow
Error = Red
)
var (
Black = Color("\033[1;30m%s\033[0m")
Red = Color("\033[1;31m%s\033[0m")
Green = Color("\033[1;32m%s\033[0m")
Yellow = Color("\033[1;33m%s\033[0m")
Purple = Color("\033[1;34m%s\033[0m")
Magenta = Color("\033[1;35m%s\033[0m")
Teal = Color("\033[1;36m%s\033[0m")
White = Color("\033[1;37m%s\033[0m")
)
func Color(colorString string) func(...interface{}) string {
sprint := func(args ...interface{}) string {
return fmt.Sprintf(colorString,
fmt.Sprint(args...))
}
return sprint
}
/**** End color gist ****/
var levelString = map[Level]string{LevelDebug: "[DBUG]", LevelInfo: "[INFO]", LevelWarn: "[WARN]", LevelError: "[ERR ]"} var levelString = map[Level]string{LevelDebug: "[DBUG]", LevelInfo: "[INFO]", LevelWarn: "[WARN]", LevelError: "[ERR ]"}
var levelColor = map[Level]func(...interface{})string {LevelDebug: Debug, LevelInfo: Info, LevelWarn: Warn, LevelError: Error}
// Logger is a go Logger wrapper that adds log levels and pattern filtering // Logger is a go Logger wrapper that adds log levels and pattern filtering
// It allows high level 'log level' filtering broadly // It allows high level 'log level' filtering broadly
@ -29,6 +60,7 @@ var levelString = map[Level]string{LevelDebug: "[DBUG]", LevelInfo: "[INFO]", Le
type Logger struct { type Logger struct {
logger *golog.Logger logger *golog.Logger
level Level level Level
useColor bool
nothingExceptPatterns []string nothingExceptPatterns []string
everythingFromPatterns []string everythingFromPatterns []string
excludeFromPatterns []string excludeFromPatterns []string
@ -36,7 +68,7 @@ type Logger struct {
// New returns a new Logger with a filter set to the supplied level // New returns a new Logger with a filter set to the supplied level
func New(level Level) *Logger { func New(level Level) *Logger {
return &Logger{logger: golog.New(os.Stderr, "", golog.Ldate|golog.Ltime), level: level, everythingFromPatterns: make([]string, 0), nothingExceptPatterns: make([]string, 0)} return &Logger{logger: golog.New(os.Stderr, "", golog.Ldate|golog.Ltime), level: level, useColor: true, everythingFromPatterns: make([]string, 0), nothingExceptPatterns: make([]string, 0)}
} }
// NewFile returns a new Logger that logs to the supplied file with a filter set to the supplied level // NewFile returns a new Logger that logs to the supplied file with a filter set to the supplied level
@ -46,7 +78,7 @@ func NewFile(level Level, filename string) (*Logger, error) {
return nil, err return nil, err
} }
return &Logger{logger: golog.New(logfile, "", golog.Ldate|golog.Ltime), level: level, everythingFromPatterns: make([]string, 0), nothingExceptPatterns: make([]string, 0)}, nil return &Logger{logger: golog.New(logfile, "", golog.Ldate|golog.Ltime), level: level, useColor: false, everythingFromPatterns: make([]string, 0), nothingExceptPatterns: make([]string, 0)}, nil
} }
var std = New(LevelWarn) var std = New(LevelWarn)
@ -98,6 +130,11 @@ func (l *Logger) SetLevel(level Level) {
l.level = level l.level = level
} }
// SetUseColor toggles weather color output is used
func (l *Logger) SetUseColor(useColor bool) {
l.useColor = useColor
}
// AddNothingExceptFilter enables strong filtering showing logs only for things on the approved list, adding this pattern to the list // AddNothingExceptFilter enables strong filtering showing logs only for things on the approved list, adding this pattern to the list
func (l *Logger) AddNothingExceptFilter(pattern string) { func (l *Logger) AddNothingExceptFilter(pattern string) {
l.nothingExceptPatterns = append(l.nothingExceptPatterns, pattern) l.nothingExceptPatterns = append(l.nothingExceptPatterns, pattern)
@ -131,7 +168,11 @@ func (l *Logger) header(level Level) string {
} }
file = short file = short
} }
return file + " " + levelString[level] + " " if l.useColor {
return file + " " + levelColor[level](levelString[level]) + " "
} else {
return file + " " + levelString[level] + " "
}
} }
// Printf outputs the format and variables, assuming it passes the filter levels // Printf outputs the format and variables, assuming it passes the filter levels
@ -153,6 +194,11 @@ func SetLevel(level Level) {
std.SetLevel(level) std.SetLevel(level)
} }
// SetUseColor toggles weather color output is used
func SetUseColor(useColor bool) {
std.useColor = useColor
}
// AddNothingExceptFilter enables strong filtering showing logs only for things on the approved list, adding this pattern to the list // AddNothingExceptFilter enables strong filtering showing logs only for things on the approved list, adding this pattern to the list
func AddNothingExceptFilter(pattern string) { func AddNothingExceptFilter(pattern string) {
std.AddNothingExceptFilter(pattern) std.AddNothingExceptFilter(pattern)