1package log
2
3import (
4 "errors"
5 "fmt"
6 "time"
7
8 "github.com/go-logfmt/logfmt"
9)
10
11func (l *Logger) logfmtFormatter(keyvals ...interface{}) {
12 e := logfmt.NewEncoder(&l.b)
13
14 for i := 0; i < len(keyvals); i += 2 {
15 switch keyvals[i] {
16 case TimestampKey:
17 if t, ok := keyvals[i+1].(time.Time); ok {
18 keyvals[i+1] = t.Format(l.timeFormat)
19 }
20 default:
21 if key := fmt.Sprint(keyvals[i]); key != "" {
22 keyvals[i] = key
23 }
24 }
25 err := e.EncodeKeyval(keyvals[i], keyvals[i+1])
26 if err != nil && errors.Is(err, logfmt.ErrUnsupportedValueType) {
27 // If the value is not supported by logfmt, we try to convert it to a string.
28 _ = e.EncodeKeyval(keyvals[i], fmt.Sprintf("%+v", keyvals[i+1]))
29 }
30 }
31 _ = e.EndRecord()
32}