-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathjson_formatter.go
39 lines (35 loc) · 950 Bytes
/
json_formatter.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
package log
import (
"bytes"
"encoding/json"
)
var JsonFormatter Formatter = jsonFormatter{}
type jsonFormatter struct{}
func (jsonFormatter) Format(entry *Entry) ([]byte, error) {
var buffer *bytes.Buffer
if entry.Buffer != nil {
buffer = entry.Buffer
} else {
buffer = bytes.NewBuffer(make([]byte, 0, 16<<10))
}
var fields map[string]interface{}
if fields = entry.Fields; len(fields) > 0 {
prefixFieldClashes(fields)
for k, v := range fields {
if vv, ok := v.(error); ok {
fields[k] = vv.Error()
}
}
} else {
fields = make(map[string]interface{}, 8)
}
fields[fieldKeyTime] = FormatTimeString(entry.Time.In(_beijingLocation))
fields[fieldKeyLevel] = entry.Level.String()
fields[fieldKeyTraceId] = entry.TraceId
fields[fieldKeyLocation] = entry.Location
fields[fieldKeyMessage] = entry.Message
if err := json.NewEncoder(buffer).Encode(fields); err != nil {
return nil, err
}
return buffer.Bytes(), nil
}