annotate vendor/github.com/sirupsen/logrus/formatter.go @ 68:4b79810863f6 draft

Ready to release 0.6.0 Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Wed, 13 Sep 2023 10:49:50 +0000
parents 787b5ee0289d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
1 package logrus
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
2
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
3 import "time"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
4
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
5 // Default key names for the default fields
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
6 const (
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
7 defaultTimestampFormat = time.RFC3339
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
8 FieldKeyMsg = "msg"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
9 FieldKeyLevel = "level"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
10 FieldKeyTime = "time"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
11 FieldKeyLogrusError = "logrus_error"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
12 FieldKeyFunc = "func"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
13 FieldKeyFile = "file"
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
14 )
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
15
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
16 // The Formatter interface is used to implement a custom Formatter. It takes an
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
17 // `Entry`. It exposes all the fields, including the default ones:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
18 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
19 // * `entry.Data["msg"]`. The message passed from Info, Warn, Error ..
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
20 // * `entry.Data["time"]`. The timestamp.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
21 // * `entry.Data["level"]. The level the entry was logged at.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
22 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
23 // Any additional fields added with `WithField` or `WithFields` are also in
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
24 // `entry.Data`. Format is expected to return an array of bytes which are then
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
25 // logged to `logger.Out`.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
26 type Formatter interface {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
27 Format(*Entry) ([]byte, error)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
28 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
29
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
30 // This is to not silently overwrite `time`, `msg`, `func` and `level` fields when
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
31 // dumping it. If this code wasn't there doing:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
32 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
33 // logrus.WithField("level", 1).Info("hello")
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
34 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
35 // Would just silently drop the user provided level. Instead with this code
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
36 // it'll logged as:
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
37 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
38 // {"level": "info", "fields.level": 1, "msg": "hello", "time": "..."}
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
39 //
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
40 // It's not exported because it's still using Data in an opinionated way. It's to
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
41 // avoid code duplication between the two default formatters.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
42 func prefixFieldClashes(data Fields, fieldMap FieldMap, reportCaller bool) {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
43 timeKey := fieldMap.resolve(FieldKeyTime)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
44 if t, ok := data[timeKey]; ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
45 data["fields."+timeKey] = t
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
46 delete(data, timeKey)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
47 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
48
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
49 msgKey := fieldMap.resolve(FieldKeyMsg)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
50 if m, ok := data[msgKey]; ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
51 data["fields."+msgKey] = m
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
52 delete(data, msgKey)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
53 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
54
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
55 levelKey := fieldMap.resolve(FieldKeyLevel)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
56 if l, ok := data[levelKey]; ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
57 data["fields."+levelKey] = l
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
58 delete(data, levelKey)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
59 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
60
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
61 logrusErrKey := fieldMap.resolve(FieldKeyLogrusError)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
62 if l, ok := data[logrusErrKey]; ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
63 data["fields."+logrusErrKey] = l
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
64 delete(data, logrusErrKey)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
65 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
66
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
67 // If reportCaller is not set, 'func' will not conflict.
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
68 if reportCaller {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
69 funcKey := fieldMap.resolve(FieldKeyFunc)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
70 if l, ok := data[funcKey]; ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
71 data["fields."+funcKey] = l
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
72 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
73 fileKey := fieldMap.resolve(FieldKeyFile)
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
74 if l, ok := data[fileKey]; ok {
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
75 data["fields."+fileKey] = l
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
76 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
77 }
787b5ee0289d Use vendored modules
yakumo.izuru
parents:
diff changeset
78 }