this repo has no description
at main 48 lines 945 B view raw
1package logging 2 3import ( 4 "context" 5 "fmt" 6 "io" 7 "log/slog" 8) 9 10type CliHandler struct { 11 w io.Writer 12 level slog.Leveler 13} 14 15func (h *CliHandler) Enabled(_ context.Context, level slog.Level) bool { 16 minLevel := slog.LevelInfo 17 if h.level != nil { 18 minLevel = h.level.Level() 19 } 20 return level >= minLevel 21} 22 23func NewCliHandler(w io.Writer, level slog.Leveler) slog.Handler { 24 h := &CliHandler{w: w, level: level} 25 return h 26} 27 28func (h *CliHandler) Handle(_ context.Context, r slog.Record) error { 29 30 attrs := "" 31 r.Attrs(func(a slog.Attr) bool { 32 if a.Key == "error" { 33 attrs += fmt.Sprintf("%v ", a.Value) 34 return true 35 } 36 return false 37 }) 38 39 if attrs != "" { 40 fmt.Fprintf(h.w, "%s: %s\n", r.Message, attrs[:len(attrs)-1]) 41 } else { 42 fmt.Fprintln(h.w, r.Message) 43 } 44 return nil 45} 46 47func (h *CliHandler) WithAttrs(attrs []slog.Attr) slog.Handler { return h } 48func (h *CliHandler) WithGroup(name string) slog.Handler { return h }