this repo has no description
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 }