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  }