diff --git a/gateway/common/config.go b/gateway/common/config.go index 2c811ad..48aee7c 100644 --- a/gateway/common/config.go +++ b/gateway/common/config.go @@ -4,6 +4,7 @@ import ( log "log/slog" "os" "strconv" + "strings" "sync" ) @@ -21,12 +22,14 @@ const ( REDIS_USER = "REDIS_USER" REDIS_PASSWORD = "REDIS_PASSWORD" INSTRUMENT_ENABLED = "ENABLE_INSTRUMENT" + LOG_LEVEL = "LOG_LEVEL" ) // This may evolve to include config outside env, or use .env file for // convenience type Config struct { defaults map[string]string + loglevel *log.LevelVar } var config *Config @@ -36,6 +39,7 @@ func setupConfig() *Config { configMutex.Do(func() { config = &Config{ defaults: make(map[string]string), + loglevel: &log.LevelVar{}, } config.defaults[SHUTDOWN_DELAY] = "5" config.defaults[JOB_BUFFER_SIZE] = "50" @@ -43,6 +47,9 @@ func setupConfig() *Config { config.defaults[HOST] = "localhost" config.defaults[PORT] = "9000" config.defaults[INSTRUMENT_ENABLED] = "false" + + level := parseLogLevel(os.Getenv(LOG_LEVEL)) + config.SetLogLevel(level) }) return config } @@ -57,7 +64,7 @@ func GetConfig(key string) string { if ok { return defaultval } else { - log.Warn("config not set no default", "key", key) + log.Warn("config not set, no default", "key", key) return "" } } @@ -81,3 +88,26 @@ func Enabled(key string) bool { } return boolval } + +func GetLogLevel() log.Level { + configval := GetConfig(LOG_LEVEL) + return parseLogLevel(configval) +} + +func parseLogLevel(level string) log.Level { + if strings.EqualFold(level, "ERROR") { + return log.LevelError + } else if strings.EqualFold(level, "WARN") { + return log.LevelWarn + } else if strings.EqualFold(level, "DEBUG") { + return log.LevelDebug + } else { + return log.LevelInfo + } +} + +func (c *Config) SetLogLevel(level log.Level) { + c.loglevel.Set(level) + logger := log.New(log.NewTextHandler(os.Stdout, &log.HandlerOptions{Level: c.loglevel})) + log.SetDefault(logger) +} diff --git a/gateway/gateway.go b/gateway/gateway.go index 9b7d345..5456e05 100644 --- a/gateway/gateway.go +++ b/gateway/gateway.go @@ -14,8 +14,9 @@ import ( func gateway() { // Start job queue common.GetTaskQueue().SetupWorkers() + level := common.GetLogLevel() - log.Info("starting gateway") + log.Info("starting gateway", "level", level) proxy.Start() done := make(chan os.Signal, 1)