github.com/kubernetes-incubator/kube-aws@v0.16.4/logger/logger.go (about) 1 package logger 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 "regexp" 8 ) 9 10 const calldepth = 3 11 12 var ( 13 Silent bool 14 Verbose bool 15 Color bool 16 stdOutLogger = log.New(os.Stdout, "", 0) 17 stdOutWarnLogger = log.New(os.Stdout, "WARNING: ", 0) 18 stdErrLogger = log.New(os.Stderr, "ERROR: ", 0) 19 ) 20 21 func StdErrOutput(b []byte) (n int, err error) { 22 if Color { 23 b = append([]byte(ColorRed), b...) 24 b = append(b, ColorNC...) 25 } 26 return os.Stderr.Write([]byte(b)) 27 } 28 29 // io.Writer interface implementation. To use with error logs, pass StdErrOutput func: 30 // Writer(StdErrOutput) <- implements io.Writer 31 type Writer func(b []byte) (n int, err error) 32 33 func (w Writer) Write(b []byte) (n int, err error) { 34 return w(b) 35 } 36 37 func Error(v ...interface{}) { 38 Log(stdErrLogger, ColorRed, v...) 39 } 40 41 func Errorf(format string, v ...interface{}) { 42 Logf(stdErrLogger, ColorRed, format, v...) 43 } 44 45 func Warn(v ...interface{}) { 46 Log(stdOutWarnLogger, ColorLightRed, v...) 47 } 48 49 func Warnf(format string, v ...interface{}) { 50 Logf(stdOutWarnLogger, ColorLightRed, format, v...) 51 } 52 53 func Heading(v ...interface{}) { 54 if !Silent { 55 Log(stdOutLogger, ColorGreen, v...) 56 } 57 } 58 59 func Headingf(format string, v ...interface{}) { 60 if !Silent { 61 Logf(stdOutLogger, ColorGreen, format, v...) 62 } 63 } 64 65 func Info(v ...interface{}) { 66 if !Silent { 67 Log(stdOutLogger, ColorCyan, v...) 68 } 69 } 70 71 func Infof(format string, v ...interface{}) { 72 if !Silent { 73 Logf(stdOutLogger, ColorCyan, format, v...) 74 } 75 } 76 77 func Debug(v ...interface{}) { 78 if Verbose && !Silent { 79 Log(stdOutLogger, ColorLightGrey, v...) 80 } 81 } 82 83 func Debugf(format string, v ...interface{}) { 84 if Verbose && !Silent { 85 Logf(stdOutLogger, ColorLightGrey, format, v...) 86 } 87 } 88 89 func Log(l *log.Logger, color string, v ...interface{}) { 90 msg := fmt.Sprint(v...) 91 if Color { 92 msg = colorizeMessage(color, msg) 93 } 94 l.Output(calldepth, msg) 95 } 96 97 func Logf(l *log.Logger, color, format string, v ...interface{}) { 98 msg := fmt.Sprintf(format, v...) 99 if Color { 100 msg = colorizeMessage(color, msg) 101 } 102 l.Output(calldepth, msg) 103 } 104 105 func colorizeMessage(color, s string) string { 106 whitespace := regexp.MustCompile(`\s*$`) 107 trimmed := whitespace.ReplaceAllString(s, "") 108 trailing := whitespace.FindString(s) 109 110 return color + trimmed + ColorNC + trailing 111 }