Source file
src/log/slog/multi_handler.go
1
2
3
4
5 package slog
6
7 import (
8 "context"
9 "errors"
10 )
11
12
13 func NewMultiHandler(handlers ...Handler) *MultiHandler {
14 h := make([]Handler, len(handlers))
15 copy(h, handlers)
16 return &MultiHandler{multi: h}
17 }
18
19
20
21
22 type MultiHandler struct {
23 multi []Handler
24 }
25
26 func (h *MultiHandler) Enabled(ctx context.Context, l Level) bool {
27 for i := range h.multi {
28 if h.multi[i].Enabled(ctx, l) {
29 return true
30 }
31 }
32 return false
33 }
34
35 func (h *MultiHandler) Handle(ctx context.Context, r Record) error {
36 var errs []error
37 for i := range h.multi {
38 if h.multi[i].Enabled(ctx, r.Level) {
39 if err := h.multi[i].Handle(ctx, r.Clone()); err != nil {
40 errs = append(errs, err)
41 }
42 }
43 }
44 return errors.Join(errs...)
45 }
46
47 func (h *MultiHandler) WithAttrs(attrs []Attr) Handler {
48 handlers := make([]Handler, 0, len(h.multi))
49 for i := range h.multi {
50 handlers = append(handlers, h.multi[i].WithAttrs(attrs))
51 }
52 return &MultiHandler{multi: handlers}
53 }
54
55 func (h *MultiHandler) WithGroup(name string) Handler {
56 handlers := make([]Handler, 0, len(h.multi))
57 for i := range h.multi {
58 handlers = append(handlers, h.multi[i].WithGroup(name))
59 }
60 return &MultiHandler{multi: handlers}
61 }
62
View as plain text