github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/pkg/logger/func_logger.go (about)

     1  package logger
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  )
     7  
     8  // A logger that writes all of its messages to `write`
     9  type funcLogger struct {
    10  	supportsColor bool
    11  	level         Level
    12  	write         func(level Level, fields Fields, b []byte) error
    13  	fields        Fields
    14  }
    15  
    16  var _ Logger = funcLogger{}
    17  
    18  func NewFuncLogger(supportsColor bool, level Level, write func(level Level, fields Fields, b []byte) error) Logger {
    19  	return funcLogger{
    20  		supportsColor: supportsColor,
    21  		level:         level,
    22  		write:         write,
    23  		fields:        nil,
    24  	}
    25  }
    26  
    27  func (l funcLogger) WithFields(fields Fields) Logger {
    28  	if len(fields) == 0 {
    29  		return l
    30  	}
    31  	newFields := make(map[string]string, len(l.fields)+len(fields))
    32  	for k, v := range l.fields {
    33  		newFields[k] = v
    34  	}
    35  	for k, v := range fields {
    36  		newFields[k] = v
    37  	}
    38  	return funcLogger{
    39  		supportsColor: l.supportsColor,
    40  		level:         l.level,
    41  		write:         l.write,
    42  		fields:        newFields,
    43  	}
    44  }
    45  
    46  func (l funcLogger) Level() Level {
    47  	return l.level
    48  }
    49  
    50  func (l funcLogger) Warnf(format string, a ...interface{}) {
    51  	l.WriteString(WarnLvl, fmt.Sprintf(format+"\n", a...))
    52  }
    53  
    54  func (l funcLogger) Errorf(format string, a ...interface{}) {
    55  	l.WriteString(ErrorLvl, fmt.Sprintf(format+"\n", a...))
    56  }
    57  
    58  func (l funcLogger) Infof(format string, a ...interface{}) {
    59  	l.WriteString(InfoLvl, fmt.Sprintf(format+"\n", a...))
    60  }
    61  
    62  func (l funcLogger) Verbosef(format string, a ...interface{}) {
    63  	l.WriteString(VerboseLvl, fmt.Sprintf(format+"\n", a...))
    64  }
    65  
    66  func (l funcLogger) Debugf(format string, a ...interface{}) {
    67  	l.WriteString(DebugLvl, fmt.Sprintf(format+"\n", a...))
    68  }
    69  
    70  func (l funcLogger) Write(level Level, bytes []byte) {
    71  	if l.level.ShouldDisplay(level) {
    72  		_ = l.write(level, l.fields, bytes)
    73  	}
    74  }
    75  
    76  func (l funcLogger) WriteString(level Level, s string) {
    77  	if l.level.ShouldDisplay(level) {
    78  		_ = l.write(level, l.fields, []byte(s))
    79  	}
    80  }
    81  
    82  type FuncLoggerWriter struct {
    83  	l     funcLogger
    84  	level Level
    85  }
    86  
    87  var _ io.Writer = FuncLoggerWriter{}
    88  
    89  func (fw FuncLoggerWriter) Write(b []byte) (int, error) {
    90  	fw.l.Write(fw.level, b)
    91  	return len(b), nil
    92  }
    93  
    94  func (l funcLogger) Writer(level Level) io.Writer {
    95  	return FuncLoggerWriter{l, level}
    96  }
    97  
    98  func (l funcLogger) SupportsColor() bool {
    99  	return l.supportsColor
   100  }
   101  
   102  var _ Logger = funcLogger{}