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  }