This repository has been archived by the owner on Jan 25, 2022. It is now read-only.
/
tagged_logger.go
105 lines (80 loc) · 1.99 KB
/
tagged_logger.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package steno
import (
"encoding/json"
"fmt"
)
type TaggedLogger struct {
proxyLogger Logger
d map[string]interface{}
}
func NewTaggedLogger(l Logger, d map[string]interface{}) Logger {
taggedLogger := new(TaggedLogger)
taggedLogger.proxyLogger = l
taggedLogger.d = d
return taggedLogger
}
func (x *TaggedLogger) Log(l LogLevel, m string, d map[string]interface{}) {
if d != nil {
e := make(map[string]interface{})
// Copy the logger's data
for k, v := range x.d {
e[k] = v
}
// Overwrite specified data
for k, v := range d {
e[k] = v
}
x.proxyLogger.Log(l, m, e)
} else {
x.proxyLogger.Log(l, m, x.d)
}
}
func (x *TaggedLogger) Fatal(m string) {
x.Log(LOG_FATAL, m, nil)
panic(m)
}
func (x *TaggedLogger) Error(m string) {
x.Log(LOG_ERROR, m, nil)
}
func (x *TaggedLogger) Warn(m string) {
x.Log(LOG_WARN, m, nil)
}
func (x *TaggedLogger) Info(m string) {
x.Log(LOG_INFO, m, nil)
}
func (x *TaggedLogger) Debug(m string) {
x.Log(LOG_DEBUG, m, nil)
}
func (x *TaggedLogger) Debug1(m string) {
x.Log(LOG_DEBUG1, m, nil)
}
func (x *TaggedLogger) Debug2(m string) {
x.Log(LOG_DEBUG2, m, nil)
}
func (x *TaggedLogger) Fatalf(f string, a ...interface{}) {
x.Fatal(fmt.Sprintf(f, a...))
}
func (x *TaggedLogger) Errorf(f string, a ...interface{}) {
x.Error(fmt.Sprintf(f, a...))
}
func (x *TaggedLogger) Warnf(f string, a ...interface{}) {
x.Warn(fmt.Sprintf(f, a...))
}
func (x *TaggedLogger) Infof(f string, a ...interface{}) {
x.Info(fmt.Sprintf(f, a...))
}
func (x *TaggedLogger) Debugf(f string, a ...interface{}) {
x.Debug(fmt.Sprintf(f, a...))
}
func (x *TaggedLogger) Debug1f(f string, a ...interface{}) {
x.Debug1(fmt.Sprintf(f, a...))
}
func (x *TaggedLogger) Debug2f(f string, a ...interface{}) {
x.Debug2(fmt.Sprintf(f, a...))
}
func (x *TaggedLogger) MarshalJSON() ([]byte, error) {
data, _ := json.Marshal(x.d)
proxy, _ := json.Marshal(x.proxyLogger)
msg := fmt.Sprintf("{\"data\": %s, \"proxy\": %s}", data, proxy)
return []byte(msg), nil
}