From: Dan Fuhry Date: Sat, 22 Mar 2025 01:31:45 +0000 (-0400) Subject: Merge branch 'main' of gitlab.web.xx0r.info:dan/go-runtime X-Git-Url: https://go.fuhry.dev/?a=commitdiff_plain;h=8e5b33f7c447b71ab2a4063d20278058674312bc;p=runtime.git Merge branch 'main' of gitlab.web.xx0r.info:dan/go-runtime --- 8e5b33f7c447b71ab2a4063d20278058674312bc diff --cc machines/coredns_plugin/registry_store.go index 1fc9de2,a49d133..2fbece8 --- a/machines/coredns_plugin/registry_store.go +++ b/machines/coredns_plugin/registry_store.go @@@ -17,9 -15,8 +17,9 @@@ import type registryStore struct { mu sync.Mutex `json:"-"` - log *log.Logger + log log.Logger + lastRefresh time.Time Sites map[string]*machines.Site `json:"Sites"` Domains map[string]*machines.Domain `json:"Domains"` Hosts map[string]*machines.Host `json:"Hosts"` diff --cc utils/log/log.go index 600425f,aac0de2..4ee6f05 --- a/utils/log/log.go +++ b/utils/log/log.go @@@ -11,7 -11,51 +11,52 @@@ import var logVerbosity int = 0 var logLevel string = "notice" - type Logger struct { + // interface coreLogger contains only the core functionality needed for logging, without + // level or verbosity methods. + // + // This interface can be implemented by mocks for testing. + type coreLogger interface { + WithLevel(Level) coreLogger + + Print(...any) + Printf(string, ...any) + Println(...any) + Fatal(...any) + Fatalf(string, ...any) + Panic(...any) + Panicf(string, ...any) + Panicln(...any) + } + + // interface Logger describes a logger with verbosity and level filtering, and prefix + // management. + type Logger interface { + coreLogger + + AppendPrefix(string) Logger + WithPrefix(string) Logger + V(int) Logger ++ NewWriter(Level) io.Writer + + Debug(...any) + Debugf(string, ...any) + Info(...any) + Infof(string, ...any) + Notice(...any) + Noticef(string, ...any) + Warning(...any) + Warningf(string, ...any) + Warn(...any) + Warnf(string, ...any) + Error(...any) + Errorf(string, ...any) + Critical(...any) + Criticalf(string, ...any) + Alert(...any) + Alertf(string, ...any) + } + + type internalLogger struct { *log.Logger level Level @@@ -131,24 -179,54 +180,61 @@@ func (l *internalLogger) prependPrefixe return args } - func (l *Logger) Print(v ...any) { - args := l.prependPrefixes(v) - l.Logger.Print(args...) + func (l *internalLogger) Fatal(v ...any) { + if len(v) > 0 { + if arg1, ok := v[0].(string); ok { + if l.prefix != "" { + v[0] = FATAL.prefix(l.Writer()) + "[" + l.prefix + "] " + arg1 + } + } + } + + l.Logger.Fatal(v...) } - func (l *Logger) Printf(fmtstr string, v ...any) { + func (l *internalLogger) Fatalf(fmtstr string, v ...any) { if l.prefix != "" { - fmtstr = "[" + l.prefix + "] " + fmtstr + fmtstr = FATAL.prefix(l.Writer()) + "[" + l.prefix + "] " + fmtstr } - l.Logger.Printf(l.level.prefix(l.Writer())+fmtstr, v...) + l.Logger.Fatalf(fmtstr, v...) } - func (l *Logger) Println(v ...any) { - l.Print(v...) ++func (l *internalLogger) NewWriter(lv Level) io.Writer { ++ return &writer{ ++ logger: l, ++ level: lv, ++ } ++} ++ + func (l *logger) V(level int) Logger { + if logVerbosity >= level { + return l + } + return NullLogger() } - func (l *Logger) Debug(v ...any) { + func (l *logger) WithPrefix(prefix string) Logger { + return &logger{ + internalLogger: &internalLogger{ + Logger: l.Logger, + prefix: l.internalLogger.prefix, + level: l.level, + }, + } + } + + func (l *logger) AppendPrefix(prefix string) Logger { + return &logger{ + internalLogger: &internalLogger{ + Logger: l.Logger, + prefix: l.internalLogger.prefix + prefix, + level: l.level, + }, + } + } + + func (l *logger) Debug(v ...any) { l.WithLevel(DEBUG).Print(v...) } diff --cc utils/log/writer.go index 92b9156,0000000..e0ea704 mode 100644,000000..100644 --- a/utils/log/writer.go +++ b/utils/log/writer.go @@@ -1,11 -1,0 +1,11 @@@ +package log + +type writer struct { - logger *Logger ++ logger *internalLogger + level Level +} + +func (w *writer) Write(p []byte) (int, error) { + w.logger.WithLevel(w.level).Print(string(p)) + return len(p), nil +}