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  }