feat: ✨ add config for log level
This commit is contained in:
@@ -79,6 +79,9 @@ RECONCILE_INTERVAL=60s
|
||||
# Coalesces rapid bursts (e.g. rolling restarts) into a single reconcile.
|
||||
DEBOUNCE_DELAY=5s
|
||||
|
||||
# Log level for watcher output. Allowed: debug, info, warn, error
|
||||
LOG_LEVEL=info
|
||||
|
||||
# ── Docker ────────────────────────────────────────────────────────────────────
|
||||
|
||||
# Docker daemon endpoint. Leave empty to use the default Unix socket.
|
||||
|
||||
@@ -30,6 +30,7 @@ type Config struct {
|
||||
|
||||
ReconcileInterval time.Duration
|
||||
DebounceDelay time.Duration
|
||||
LogLevel string
|
||||
|
||||
RecordTTL int
|
||||
CloudflareAutoTTL bool
|
||||
@@ -98,6 +99,13 @@ func LoadConfig() (*Config, error) {
|
||||
return nil, fmt.Errorf("CF_AUTO_TTL: invalid boolean %q: %w", autoTTLStr, err)
|
||||
}
|
||||
|
||||
cfg.LogLevel = strings.ToLower(envOrDefault("LOG_LEVEL", "info"))
|
||||
switch cfg.LogLevel {
|
||||
case "debug", "info", "warn", "error":
|
||||
default:
|
||||
return nil, fmt.Errorf("LOG_LEVEL: invalid value %q (allowed: debug, info, warn, error)", cfg.LogLevel)
|
||||
}
|
||||
|
||||
cfg.ExcludeRouters = make(map[string]struct{})
|
||||
if v := os.Getenv("EXCLUDE_ROUTERS"); v != "" {
|
||||
for _, r := range strings.Split(v, ",") {
|
||||
|
||||
32
main.go
32
main.go
@@ -22,21 +22,28 @@ func main() {
|
||||
return
|
||||
}
|
||||
|
||||
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
|
||||
Level: slog.LevelInfo,
|
||||
})))
|
||||
|
||||
cfg, err := LoadConfig()
|
||||
if err != nil {
|
||||
slog.Error("configuration error", "error", err)
|
||||
fmt.Fprintln(os.Stderr, "configuration error:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
logLevel, err := parseLogLevel(cfg.LogLevel)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "configuration error:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
|
||||
Level: logLevel,
|
||||
})))
|
||||
|
||||
slog.Info("traefik-dns-watcher starting",
|
||||
"traefik_url", cfg.TraefikURL,
|
||||
"zones", cfg.Zones,
|
||||
"repo_path", cfg.RepoPath,
|
||||
"dynamic_dir", cfg.DynamicDir,
|
||||
"log_level", cfg.LogLevel,
|
||||
"git_https_token_enabled", cfg.GitAuthToken != "",
|
||||
"git_auth_username", cfg.GitAuthUsername,
|
||||
"reconcile_interval", cfg.ReconcileInterval,
|
||||
@@ -115,6 +122,21 @@ func main() {
|
||||
slog.Info("traefik-dns-watcher stopped")
|
||||
}
|
||||
|
||||
func parseLogLevel(v string) (slog.Level, error) {
|
||||
switch strings.ToLower(v) {
|
||||
case "debug":
|
||||
return slog.LevelDebug, nil
|
||||
case "info":
|
||||
return slog.LevelInfo, nil
|
||||
case "warn":
|
||||
return slog.LevelWarn, nil
|
||||
case "error":
|
||||
return slog.LevelError, nil
|
||||
default:
|
||||
return 0, fmt.Errorf("LOG_LEVEL: invalid value %q (allowed: debug, info, warn, error)", v)
|
||||
}
|
||||
}
|
||||
|
||||
// maybeHandleGitAskpass serves username/password for git HTTPS auth in non-interactive mode.
|
||||
// This process mode is only enabled for git child processes that set TDW_GIT_ASKPASS=1.
|
||||
func maybeHandleGitAskpass() bool {
|
||||
|
||||
Reference in New Issue
Block a user