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