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

@ -28,17 +28,18 @@ import (
) )
var ( var (
client container.Client client container.Client
scheduleSpec string scheduleSpec string
cleanup bool cleanup bool
noRestart bool noRestart bool
monitorOnly bool monitorOnly bool
enableLabel bool enableLabel bool
notifier t.Notifier enableJsonFormatter bool
timeout time.Duration notifier t.Notifier
lifecycleHooks bool timeout time.Duration
rollingRestart bool lifecycleHooks bool
scope string rollingRestart bool
scope string
) )
var rootCmd = NewRootCommand() var rootCmd = NewRootCommand()
@ -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)