github.com/YousefHaggyHeroku/pack@v1.5.5/logging/logging.go (about) 1 // Package logging defines the minimal interface that loggers must support to be used by pack. 2 package logging 3 4 import ( 5 "io" 6 "io/ioutil" 7 8 "github.com/YousefHaggyHeroku/pack/internal/style" 9 ) 10 11 type Level int 12 13 const ( 14 DebugLevel Level = iota 15 InfoLevel 16 WarnLevel 17 ErrorLevel 18 ) 19 20 // Logger defines behavior required by a logging package used by pack libraries 21 type Logger interface { 22 Debug(msg string) 23 Debugf(fmt string, v ...interface{}) 24 25 Info(msg string) 26 Infof(fmt string, v ...interface{}) 27 28 Warn(msg string) 29 Warnf(fmt string, v ...interface{}) 30 31 Error(msg string) 32 Errorf(fmt string, v ...interface{}) 33 34 Writer() io.Writer 35 36 IsVerbose() bool 37 } 38 39 // WithSelectableWriter is an optional interface for loggers that want to support a separate writer per log level. 40 type WithSelectableWriter interface { 41 WriterForLevel(level Level) io.Writer 42 } 43 44 // GetWriterForLevel retrieves the appropriate Writer for the log level provided. 45 // 46 // See WithSelectableWriter 47 func GetWriterForLevel(logger Logger, level Level) io.Writer { 48 if er, ok := logger.(WithSelectableWriter); ok { 49 return er.WriterForLevel(level) 50 } 51 52 return logger.Writer() 53 } 54 55 // IsQuiet defines whether a pack logger is set to quiet mode 56 func IsQuiet(logger Logger) bool { 57 if writer := GetWriterForLevel(logger, InfoLevel); writer == ioutil.Discard { 58 return true 59 } 60 61 return false 62 } 63 64 // Tip logs a tip. 65 func Tip(l Logger, format string, v ...interface{}) { 66 l.Infof(style.Tip("Tip: ")+format, v...) 67 }