mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-03-09 17:09:29 +00:00
Several packages are only used while running the e2e suite. These packages are less important to update, as the they can not influence the final executable that is part of the Ceph-CSI container-image. By moving these dependencies out of the main Ceph-CSI go.mod, it is easier to identify if a reported CVE affects Ceph-CSI, or only the testing (like most of the Kubernetes CVEs). Signed-off-by: Niels de Vos <ndevos@ibm.com>
79 lines
2.3 KiB
Go
79 lines
2.3 KiB
Go
package logrus
|
|
|
|
import "time"
|
|
|
|
// Default key names for the default fields
|
|
const (
|
|
defaultTimestampFormat = time.RFC3339
|
|
FieldKeyMsg = "msg"
|
|
FieldKeyLevel = "level"
|
|
FieldKeyTime = "time"
|
|
FieldKeyLogrusError = "logrus_error"
|
|
FieldKeyFunc = "func"
|
|
FieldKeyFile = "file"
|
|
)
|
|
|
|
// The Formatter interface is used to implement a custom Formatter. It takes an
|
|
// `Entry`. It exposes all the fields, including the default ones:
|
|
//
|
|
// * `entry.Data["msg"]`. The message passed from Info, Warn, Error ..
|
|
// * `entry.Data["time"]`. The timestamp.
|
|
// * `entry.Data["level"]. The level the entry was logged at.
|
|
//
|
|
// Any additional fields added with `WithField` or `WithFields` are also in
|
|
// `entry.Data`. Format is expected to return an array of bytes which are then
|
|
// logged to `logger.Out`.
|
|
type Formatter interface {
|
|
Format(*Entry) ([]byte, error)
|
|
}
|
|
|
|
// This is to not silently overwrite `time`, `msg`, `func` and `level` fields when
|
|
// dumping it. If this code wasn't there doing:
|
|
//
|
|
// logrus.WithField("level", 1).Info("hello")
|
|
//
|
|
// Would just silently drop the user provided level. Instead with this code
|
|
// it'll logged as:
|
|
//
|
|
// {"level": "info", "fields.level": 1, "msg": "hello", "time": "..."}
|
|
//
|
|
// It's not exported because it's still using Data in an opinionated way. It's to
|
|
// avoid code duplication between the two default formatters.
|
|
func prefixFieldClashes(data Fields, fieldMap FieldMap, reportCaller bool) {
|
|
timeKey := fieldMap.resolve(FieldKeyTime)
|
|
if t, ok := data[timeKey]; ok {
|
|
data["fields."+timeKey] = t
|
|
delete(data, timeKey)
|
|
}
|
|
|
|
msgKey := fieldMap.resolve(FieldKeyMsg)
|
|
if m, ok := data[msgKey]; ok {
|
|
data["fields."+msgKey] = m
|
|
delete(data, msgKey)
|
|
}
|
|
|
|
levelKey := fieldMap.resolve(FieldKeyLevel)
|
|
if l, ok := data[levelKey]; ok {
|
|
data["fields."+levelKey] = l
|
|
delete(data, levelKey)
|
|
}
|
|
|
|
logrusErrKey := fieldMap.resolve(FieldKeyLogrusError)
|
|
if l, ok := data[logrusErrKey]; ok {
|
|
data["fields."+logrusErrKey] = l
|
|
delete(data, logrusErrKey)
|
|
}
|
|
|
|
// If reportCaller is not set, 'func' will not conflict.
|
|
if reportCaller {
|
|
funcKey := fieldMap.resolve(FieldKeyFunc)
|
|
if l, ok := data[funcKey]; ok {
|
|
data["fields."+funcKey] = l
|
|
}
|
|
fileKey := fieldMap.resolve(FieldKeyFile)
|
|
if l, ok := data[fileKey]; ok {
|
|
data["fields."+fileKey] = l
|
|
}
|
|
}
|
|
}
|