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
)
/**** 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 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
// 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 {
logger *golog.Logger
level Level
useColor bool
nothingExceptPatterns []string
everythingFromPatterns []string
excludeFromPatterns []string
@ -36,7 +68,7 @@ type Logger struct {
// New returns a new Logger with a filter set to the supplied level
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
@ -46,7 +78,7 @@ func NewFile(level Level, filename string) (*Logger, error) {
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)
@ -98,6 +130,11 @@ func (l *Logger) SetLevel(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
func (l *Logger) AddNothingExceptFilter(pattern string) {
l.nothingExceptPatterns = append(l.nothingExceptPatterns, pattern)
@ -131,7 +168,11 @@ func (l *Logger) header(level Level) string {
}
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
@ -153,6 +194,11 @@ func SetLevel(level 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
func AddNothingExceptFilter(pattern string) {
std.AddNothingExceptFilter(pattern)