Skip to content

Commit

Permalink
feat: add log file support
Browse files Browse the repository at this point in the history
  • Loading branch information
Johannes Kresner committed Oct 26, 2023
1 parent 3d1ed23 commit 8ea89ce
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
19 changes: 19 additions & 0 deletions docs/arguments.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,25 @@ Environment Variable: WATCHTOWER_TRACE
Default: false
```

## Enable Log File
Enable logging to a file. The file will be located at `/var/log/watchtower.log` by default inside the container.

```text
Argument: --enable-log-file
Environment Variable: WATCHTOWER_ENABLE_LOG_FILE
Type: Boolean
Default: false
```

To change the location of the log file, use the `--log-file-path` argument.

```text
Argument: --log-file-path
Environment Variable: WATCHTOWER_LOG_FILE_PATH
Type: String
Default: "/var/log/watchtower.log"
```

## Maximum log level

The maximum log level that will be written to STDERR (shown in `docker log` when used in a container).
Expand Down
25 changes: 25 additions & 0 deletions internal/flags/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,16 @@ func RegisterSystemFlags(rootCmd *cobra.Command) {
envString("WATCHTOWER_LOG_LEVEL"),
"The maximum log level that will be written to STDERR. Possible values: panic, fatal, error, warn, info, debug or trace")

flags.Bool(
"enable-log-file",
envBool("WATCHTOWER_ENABLE_LOG_FILE"),
"Enable logging to file")

flags.String(
"log-file-path",
envString("WATCHTOWER_LOG_FILE_PATH"),
"The file to write logs to. If not specified, logs will be written to STDERR")

flags.BoolP(
"health-check",
"",
Expand Down Expand Up @@ -430,6 +440,8 @@ func SetDefaults() {
viper.SetDefault("WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER", "watchtower")
viper.SetDefault("WATCHTOWER_LOG_LEVEL", "info")
viper.SetDefault("WATCHTOWER_LOG_FORMAT", "auto")
viper.SetDefault("WATCHTOWER_ENABLE_LOG_FILE", false)
viper.SetDefault("WATCHTOWER_LOG_FILE_PATH", "/var/log/watchtower.log")
}

// EnvConfig translates the command-line options into environment variables
Expand Down Expand Up @@ -636,6 +648,8 @@ func ProcessFlagAliases(flags *pflag.FlagSet) {
func SetupLogging(f *pflag.FlagSet) error {
logFormat, _ := f.GetString(`log-format`)
noColor, _ := f.GetBool("no-color")
logToFile := flagIsEnabled(f, `enable-log-file`)
path, _ := f.GetString(`log-file-path`)

switch strings.ToLower(logFormat) {
case "auto":
Expand Down Expand Up @@ -669,6 +683,17 @@ func SetupLogging(f *pflag.FlagSet) error {
log.SetLevel(logLevel)
}

if logToFile {
logFile, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
logFile, err = os.Create(path)
if err != nil {
return fmt.Errorf("failed to open log file: %e", err)
}

Check warning on line 692 in internal/flags/flags.go

View check run for this annotation

Codecov / codecov/patch

internal/flags/flags.go#L687-L692

Added lines #L687 - L692 were not covered by tests
}
log.SetOutput(logFile)

Check warning on line 694 in internal/flags/flags.go

View check run for this annotation

Codecov / codecov/patch

internal/flags/flags.go#L694

Added line #L694 was not covered by tests
}

return nil
}

Expand Down

0 comments on commit 8ea89ce

Please sign in to comment.