From 75e527737c47b84d64e21908223b2260e646ce47 Mon Sep 17 00:00:00 2001 From: Timo Behrendt Date: Fri, 27 Dec 2024 15:47:28 +0100 Subject: [PATCH] feat: introduce logger to config --- main.go | 15 +++++++++++++++ pkg/config/config.go | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/main.go b/main.go index ca05c00..68bfa61 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,9 @@ package main import ( "fmt" + "log/slog" + "os" + "strings" "realdnydns/pkg/config" "realdnydns/pkg/dnsProvider" @@ -15,12 +18,24 @@ import ( ) func main() { + logger := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ + Level: slog.LevelInfo, + })) + configClient := config.Config{} err := configClient.Load("config.yaml") if err != nil { + logger.Error("Failed to load config file", + slog.String("error", err.Error())) panic(err) } + if configClient.LogLevel != "" { + logger = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ + Level: slog.Level(config.LogLevelMap[strings.ToLower(configClient.LogLevel)]), + })) + } + var externalIpProvider externalIpProvider.ExternalIpProvider switch configClient.ExternalIPProvider.Type { case "plain": diff --git a/pkg/config/config.go b/pkg/config/config.go index 2c2975d..b431ac6 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -3,7 +3,9 @@ package config import ( "errors" "fmt" + "log/slog" "os" + "strings" "gopkg.in/yaml.v3" ) @@ -15,6 +17,7 @@ type Config struct { NotificationProvider NotificationProviderConfig `yaml:"notification_provider,omitempty"` Domains []DomainConfig `yaml:"domains"` CheckInterval string `yaml:"check_interval"` + LogLevel string `yaml:"log_level"` } const ( @@ -22,6 +25,18 @@ const ( ScheduledMode = "Scheduled" ) +var LogLevelMap = map[string]slog.Level{ + "debug": slog.LevelDebug, + "info": slog.LevelInfo, + "warn": slog.LevelWarn, + "error": slog.LevelError, +} + +func isValidLogLevel(level string) bool { + _, ok := LogLevelMap[strings.ToLower(level)] + return ok +} + type DomainConfig struct { TLD string `yaml:"tld"` Subdomains []string `yaml:"subdomains"` @@ -68,5 +83,9 @@ func (c *Config) validate() error { return errors.New("check interval must be set when mode is 'Scheduled'") } + if c.LogLevel != "" && !isValidLogLevel(c.LogLevel) { + return fmt.Errorf("log level must be one of 'debug', 'info', 'warn', 'error', but got %s", c.LogLevel) + } + return nil }