Source file
src/log/slog/example_level_handler_test.go
1
2
3
4
5 package slog_test
6
7 import (
8 "context"
9 "log/slog"
10 "os"
11 )
12
13
14
15 type LevelHandler struct {
16 level slog.Leveler
17 handler slog.Handler
18 }
19
20
21
22 func NewLevelHandler(level slog.Leveler, h slog.Handler) *LevelHandler {
23
24 if lh, ok := h.(*LevelHandler); ok {
25 h = lh.Handler()
26 }
27 return &LevelHandler{level, h}
28 }
29
30
31
32 func (h *LevelHandler) Enabled(_ context.Context, level slog.Level) bool {
33 return level >= h.level.Level()
34 }
35
36
37 func (h *LevelHandler) Handle(ctx context.Context, r slog.Record) error {
38 return h.handler.Handle(ctx, r)
39 }
40
41
42 func (h *LevelHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
43 return NewLevelHandler(h.level, h.handler.WithAttrs(attrs))
44 }
45
46
47 func (h *LevelHandler) WithGroup(name string) slog.Handler {
48 return NewLevelHandler(h.level, h.handler.WithGroup(name))
49 }
50
51
52 func (h *LevelHandler) Handler() slog.Handler {
53 return h.handler
54 }
55
56
57
58
59
60
61
62
63
64 func ExampleHandler_levelHandler() {
65 removeTime := func(groups []string, a slog.Attr) slog.Attr {
66 if a.Key == slog.TimeKey && len(groups) == 0 {
67 return slog.Attr{}
68 }
69 return a
70 }
71 th := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ReplaceAttr: removeTime})
72 logger := slog.New(NewLevelHandler(slog.LevelWarn, th))
73 logger.Info("not printed")
74 logger.Warn("printed")
75
76
77
78 }
79
View as plain text