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{}