package logger import ( "fmt" "github.com/mgutz/ansi" ) type Logger interface { Trace(f string, args ...interface{}) Debug(f string, args ...interface{}) Info(f string, args ...interface{}) Warn(f string, args ...interface{}) } type NullLogger struct{} func (n NullLogger) Trace(f string, args ...interface{}) {} func (n NullLogger) Debug(f string, args ...interface{}) {} func (n NullLogger) Info(f string, args ...interface{}) {} func (n NullLogger) Warn(f string, args ...interface{}) {} type ColorLogger struct { VeryVerbose bool Verbose bool Prefix string Color bool } func (c ColorLogger) Trace(f string, args ...interface{}) { if !c.VeryVerbose { return } c.output("blue", f, args...) } func (c ColorLogger) Debug(f string, args ...interface{}) { if !c.Verbose { return } c.output("green", f, args...) } func (c ColorLogger) Info(f string, args ...interface{}) { c.output("green", f, args...) } func (c ColorLogger) Warn(f string, args ...interface{}) { c.output("red", f, args...) } func (c ColorLogger) output(color, f string, args ...interface{}) { if c.Color && color != "" { f = ansi.Color(f, color) } fmt.Printf(fmt.Sprintf("%s%s\n", c.Prefix, f), args...) }