-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtee_handler.go
60 lines (55 loc) · 1.19 KB
/
tee_handler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package clog
// TeeHandler sends logs to two handlers at the same time
type TeeHandler struct {
firstHandler Handler
secondHandler Handler
}
// NewTeeHandler creates a handler that redirects logs to 2 handlers at the same time
func NewTeeHandler(a, b Handler) *TeeHandler {
return &TeeHandler{
firstHandler: a,
secondHandler: b,
}
}
// LogEntry send messages to both handlers
func (h *TeeHandler) LogEntry(logEntry LogEntry) error {
var err1, err2 error
logEntry.Calldepth++
if h.firstHandler != nil {
err1 = h.firstHandler.LogEntry(logEntry)
} else {
err1 = ErrNoRegisteredHandler
}
if h.secondHandler != nil {
err2 = h.secondHandler.LogEntry(logEntry)
} else {
err2 = ErrNoRegisteredHandler
}
if err1 != nil {
return err1
}
if err2 != nil {
return err2
}
return nil
}
// SetPrefix sets a prefix on every log message
func (h *TeeHandler) SetPrefix(prefix string) Handler {
if h.firstHandler != nil {
prefixer, ok := h.firstHandler.(Prefixer)
if ok {
prefixer.SetPrefix(prefix)
}
}
if h.secondHandler != nil {
prefixer, ok := h.secondHandler.(Prefixer)
if ok {
prefixer.SetPrefix(prefix)
}
}
return h
}
// Verify interface
var (
_ Handler = &TeeHandler{}
)