package logging import ( "os" "github.com/go-kit/log" "github.com/go-kit/log/level" "github.com/go-kit/log/term" ) // Logger records log lines to an output. type Logger interface { Log(keyvals ...any) error } // DefaultLoggers produces helpful base loggers for each level. // // They write logfmt to standard out, annotated with ANSI colors depending on the level. func DefaultLoggers() (debug, info, warn, error Logger) { base := term.NewLogger(os.Stdout, log.NewLogfmtLogger, func(keyvals ...any) term.FgBgColor { for i := 0; i < len(keyvals)-1; i += 2 { if keyvals[i] != "level" { continue } switch keyvals[i+1] { case level.DebugValue(): return term.FgBgColor{Fg: term.DarkGray} case level.InfoValue(): return term.FgBgColor{Fg: term.Green} case level.WarnValue(): return term.FgBgColor{Fg: term.Yellow} case level.ErrorValue(): return term.FgBgColor{Fg: term.Red} } } return term.FgBgColor{} }) base = log.NewSyncLogger(base) return level.Debug(base), level.Info(base), level.Warn(base), level.Error(base) }