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