lib/logger: support for renaming json fields (#3488)

This commit is contained in:
Michal Kralik 2022-12-17 02:26:32 +01:00 committed by GitHub
parent 56a9ea3753
commit 72f8fce107
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 51 additions and 6 deletions

32
lib/logger/json-fields.go Normal file
View file

@ -0,0 +1,32 @@
package logger
import "strings"
var (
fieldTs = "ts"
fieldLevel = "level"
fieldCaller = "caller"
fieldMsg = "msg"
)
func setLoggerJSONFields() {
fields := strings.Split(*loggerJSONFields, ",")
for _, f := range fields {
v := strings.Split(strings.TrimSpace(f), ":")
if len(v) != 2 {
continue
}
old, new := v[0], v[1]
switch old {
case "ts":
fieldTs = new
case "level":
fieldLevel = new
case "caller":
fieldCaller = new
case "msg":
fieldMsg = new
}
}
}

View file

@ -17,10 +17,11 @@ import (
) )
var ( var (
loggerLevel = flag.String("loggerLevel", "INFO", "Minimum level of errors to log. Possible values: INFO, WARN, ERROR, FATAL, PANIC") loggerLevel = flag.String("loggerLevel", "INFO", "Minimum level of errors to log. Possible values: INFO, WARN, ERROR, FATAL, PANIC")
loggerFormat = flag.String("loggerFormat", "default", "Format for logs. Possible values: default, json") loggerFormat = flag.String("loggerFormat", "default", "Format for logs. Possible values: default, json")
loggerOutput = flag.String("loggerOutput", "stderr", "Output for the logs. Supported values: stderr, stdout") loggerOutput = flag.String("loggerOutput", "stderr", "Output for the logs. Supported values: stderr, stdout")
loggerTimezone = flag.String("loggerTimezone", "UTC", "Timezone to use for timestamps in logs. Timezone must be a valid IANA Time Zone. "+ loggerJSONFields = flag.String("loggerJsonFields", "", `Allows renaming fields in JSON formatted logs. Example: "ts:timestamp,msg:message" renames "ts" to "timestamp" and "msg" to "message"`)
loggerTimezone = flag.String("loggerTimezone", "UTC", "Timezone to use for timestamps in logs. Timezone must be a valid IANA Time Zone. "+
"For example: America/New_York, Europe/Berlin, Etc/GMT+3 or Local") "For example: America/New_York, Europe/Berlin, Etc/GMT+3 or Local")
disableTimestamps = flag.Bool("loggerDisableTimestamps", false, "Whether to disable writing timestamps in logs") disableTimestamps = flag.Bool("loggerDisableTimestamps", false, "Whether to disable writing timestamps in logs")
@ -34,6 +35,7 @@ var (
// //
// There is no need in calling Init from tests. // There is no need in calling Init from tests.
func Init() { func Init() {
setLoggerJSONFields()
setLoggerOutput() setLoggerOutput()
validateLoggerLevel() validateLoggerLevel()
validateLoggerFormat() validateLoggerFormat()
@ -239,9 +241,20 @@ func logMessage(level, msg string, skipframes int) {
switch *loggerFormat { switch *loggerFormat {
case "json": case "json":
if *disableTimestamps { if *disableTimestamps {
logMsg = fmt.Sprintf(`{"level":%q,"caller":%q,"msg":%q}`+"\n", levelLowercase, location, msg) logMsg = fmt.Sprintf(
`{%q:%q,%q:%q,%q:%q}`+"\n",
fieldLevel, levelLowercase,
fieldCaller, location,
fieldMsg, msg,
)
} else { } else {
logMsg = fmt.Sprintf(`{"ts":%q,"level":%q,"caller":%q,"msg":%q}`+"\n", timestamp, levelLowercase, location, msg) logMsg = fmt.Sprintf(
`{%q:%q,%q:%q,%q:%q,%q:%q}`+"\n",
fieldTs, timestamp,
fieldLevel, levelLowercase,
fieldCaller, location,
fieldMsg, msg,
)
} }
default: default:
if *disableTimestamps { if *disableTimestamps {