This commit is contained in:
Johannes Kresner 2024-01-26 14:59:50 +00:00 committed by GitHub
commit 37c4698e9e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 46 additions and 0 deletions

View file

@ -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).

View file

@ -4,6 +4,7 @@ import (
"bufio"
"errors"
"fmt"
"io"
"os"
"regexp"
"strings"
@ -200,6 +201,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",
"",
@ -430,6 +441,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
@ -636,6 +649,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":
@ -669,6 +684,18 @@ 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)
}
}
multiWriter := io.MultiWriter(os.Stdout, os.Stderr, logFile)
log.SetOutput(multiWriter)
}
return nil
}