feat: allow logging output to use JSON formatter

Signed-off-by: GridexX <arsene582@gmail.com>
This commit is contained in:
GridexX 2023-07-26 10:13:53 +03:00
parent a5d7f23d2e
commit be98119552
No known key found for this signature in database
4 changed files with 56 additions and 11 deletions

View file

@ -34,6 +34,7 @@ var (
noRestart bool noRestart bool
monitorOnly bool monitorOnly bool
enableLabel bool enableLabel bool
enableJsonFormatter bool
notifier t.Notifier notifier t.Notifier
timeout time.Duration timeout time.Duration
lifecycleHooks bool lifecycleHooks bool
@ -96,6 +97,11 @@ func PreRun(cmd *cobra.Command, _ []string) {
log.SetLevel(logLevel) log.SetLevel(logLevel)
} }
enableJsonFormatter, _ = f.GetBool("json-logging")
if enableJsonFormatter {
log.SetFormatter(&log.JSONFormatter{})
}
scheduleSpec, _ = f.GetString("schedule") scheduleSpec, _ = f.GetString("schedule")
flags.GetSecretsFromFiles(cmd) flags.GetSecretsFromFiles(cmd)

View file

@ -107,6 +107,17 @@ Environment Variable: WATCHTOWER_LOG_LEVEL
Default: info Default: info
``` ```
## JSON Logging
Enables the JSON log formatter for logging, changing the log output to JSON format. By default, the log output follows the standard text-based format.
```text
Argument: --json-logging
Environment Variable: WATCHTOWER_JSON_LOGGING
Type: Boolean
Default: false
```
## ANSI colors ## ANSI colors
Disable ANSI color escape codes in log output. Disable ANSI color escape codes in log output.

View file

@ -86,6 +86,12 @@ func RegisterSystemFlags(rootCmd *cobra.Command) {
viper.GetBool("WATCHTOWER_LABEL_ENABLE"), viper.GetBool("WATCHTOWER_LABEL_ENABLE"),
"Watch containers where the com.centurylinklabs.watchtower.enable label is true") "Watch containers where the com.centurylinklabs.watchtower.enable label is true")
flags.BoolP(
"json-logging",
"j",
viper.GetBool("WATCHTOWER_JSON_LOGGING"),
"Enables the JSON log formatter for logging")
flags.BoolP( flags.BoolP(
"debug", "debug",
"d", "d",

View file

@ -183,6 +183,28 @@ func TestProcessFlagAliasesLogLevelFromEnvironment(t *testing.T) {
assert.Equal(t, `debug`, logLevel) assert.Equal(t, `debug`, logLevel)
} }
func TestJSONLoggingFlag(t *testing.T) {
cmd := new(cobra.Command)
SetDefaults()
RegisterDockerFlags(cmd)
RegisterSystemFlags(cmd)
// Ensure the default value is false
enableJsonFormatter, err := cmd.PersistentFlags().GetBool("json-logging")
require.NoError(t, err)
assert.Equal(t, false, enableJsonFormatter)
// Test with the argument
require.NoError(t, cmd.ParseFlags([]string{`--json-logging`}))
flags := cmd.Flags()
enableJsonFormatter, _ = flags.GetBool("json-logging")
require.NoError(t, err)
assert.Equal(t, true, enableJsonFormatter)
}
func TestProcessFlagAliasesSchedAndInterval(t *testing.T) { func TestProcessFlagAliasesSchedAndInterval(t *testing.T) {
logrus.StandardLogger().ExitFunc = func(_ int) { panic(`FATAL`) } logrus.StandardLogger().ExitFunc = func(_ int) { panic(`FATAL`) }
cmd := new(cobra.Command) cmd := new(cobra.Command)