From df4c14ce82df6be80ffc94e9a26a5efc78527f07 Mon Sep 17 00:00:00 2001 From: plor Date: Tue, 28 May 2024 19:52:05 -0500 Subject: [PATCH 1/2] Allowing for log level changes --- gateway/common/config.go | 27 ++++++++++++++++++++++++++- gateway/gateway.go | 3 ++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/gateway/common/config.go b/gateway/common/config.go index 2c811ada..64b69572 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 @@ -43,6 +46,9 @@ func setupConfig() *Config { config.defaults[HOST] = "localhost" config.defaults[PORT] = "9000" config.defaults[INSTRUMENT_ENABLED] = "false" + + level := GetLogLevel() + config.SetLogLevel(level) }) return config } @@ -57,7 +63,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 +87,22 @@ func Enabled(key string) bool { } return boolval } + +func GetLogLevel() log.Level { + configval := GetConfig(LOG_LEVEL) + if strings.EqualFold(configval, "ERROR") { + return log.LevelError + } else if strings.EqualFold(configval, "WARN") { + return log.LevelWarn + } else if strings.EqualFold(configval, "DEBUG") { + return log.LevelDebug + } else { + return log.LevelInfo + } +} + +func (c *Config) SetLogLevel(level log.Level) { + c.loglevel.Set(level) + logger := log.New(log.NewJSONHandler(os.Stderr, &log.HandlerOptions{Level: c.loglevel})) + log.SetDefault(logger) +} diff --git a/gateway/gateway.go b/gateway/gateway.go index 9b7d3455..5456e059 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) From e0e505cbdceb21ffb2970e7bed3086be905bfe8d Mon Sep 17 00:00:00 2001 From: plor Date: Thu, 30 May 2024 14:46:52 -0500 Subject: [PATCH 2/2] Adds LOG_LEVEL env var and exposes function for changing log level --- gateway/common/config.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/gateway/common/config.go b/gateway/common/config.go index 64b69572..48aee7c1 100644 --- a/gateway/common/config.go +++ b/gateway/common/config.go @@ -39,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" @@ -47,7 +48,7 @@ func setupConfig() *Config { config.defaults[PORT] = "9000" config.defaults[INSTRUMENT_ENABLED] = "false" - level := GetLogLevel() + level := parseLogLevel(os.Getenv(LOG_LEVEL)) config.SetLogLevel(level) }) return config @@ -90,11 +91,15 @@ func Enabled(key string) bool { func GetLogLevel() log.Level { configval := GetConfig(LOG_LEVEL) - if strings.EqualFold(configval, "ERROR") { + return parseLogLevel(configval) +} + +func parseLogLevel(level string) log.Level { + if strings.EqualFold(level, "ERROR") { return log.LevelError - } else if strings.EqualFold(configval, "WARN") { + } else if strings.EqualFold(level, "WARN") { return log.LevelWarn - } else if strings.EqualFold(configval, "DEBUG") { + } else if strings.EqualFold(level, "DEBUG") { return log.LevelDebug } else { return log.LevelInfo @@ -103,6 +108,6 @@ func GetLogLevel() log.Level { func (c *Config) SetLogLevel(level log.Level) { c.loglevel.Set(level) - logger := log.New(log.NewJSONHandler(os.Stderr, &log.HandlerOptions{Level: c.loglevel})) + logger := log.New(log.NewTextHandler(os.Stdout, &log.HandlerOptions{Level: c.loglevel})) log.SetDefault(logger) }