Allow setting port and log level in config

Change-Id: Ib9e4ac06292aeaad9154a9f11997ed3bd1ab6779
diff --git a/cmd/termmapper/main.go b/cmd/termmapper/main.go
index 2a2f7e3..aa940ac 100644
--- a/cmd/termmapper/main.go
+++ b/cmd/termmapper/main.go
@@ -21,10 +21,10 @@
 )
 
 type appConfig struct {
-	Port     int      `kong:"short='p',default='8080',help='Port to listen on'"`
+	Port     *int     `kong:"short='p',help='Port to listen on'"`
 	Config   string   `kong:"short='c',help='YAML configuration file containing mapping directives and global settings'"`
 	Mappings []string `kong:"short='m',help='Individual YAML mapping files to load'"`
-	LogLevel string   `kong:"short='l',default='info',help='Log level (debug, info, warn, error)'"`
+	LogLevel *string  `kong:"short='l',help='Log level (debug, info, warn, error)'"`
 }
 
 // TemplateData holds data for the Kalamar plugin template
@@ -79,15 +79,26 @@
 		log.Fatal().Msg("At least one configuration source must be provided: use -c for main config file or -m for mapping files")
 	}
 
-	// Set up logging
-	setupLogger(cfg.LogLevel)
-
 	// Load configuration from multiple sources
 	yamlConfig, err := config.LoadFromSources(cfg.Config, cfg.Mappings)
 	if err != nil {
 		log.Fatal().Err(err).Msg("Failed to load configuration")
 	}
 
+	finalPort := yamlConfig.Port
+	finalLogLevel := yamlConfig.LogLevel
+
+	// Use command line values if provided (they override config file)
+	if cfg.Port != nil {
+		finalPort = *cfg.Port
+	}
+	if cfg.LogLevel != nil {
+		finalLogLevel = *cfg.LogLevel
+	}
+
+	// Set up logging with the final log level
+	setupLogger(finalLogLevel)
+
 	// Create a new mapper instance
 	m, err := mapper.NewMapper(yamlConfig.Lists)
 	if err != nil {
@@ -105,8 +116,8 @@
 
 	// Start server
 	go func() {
-		log.Info().Int("port", cfg.Port).Msg("Starting server")
-		if err := app.Listen(fmt.Sprintf(":%d", cfg.Port)); err != nil {
+		log.Info().Int("port", finalPort).Msg("Starting server")
+		if err := app.Listen(fmt.Sprintf(":%d", finalPort)); err != nil {
 			log.Fatal().Err(err).Msg("Server error")
 		}
 	}()