diff --git a/internal/config/config.go b/internal/config/config.go index 457e5c810..bc617c21c 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -789,6 +789,14 @@ func normalizeFunc(f *flag.FlagSet, name string) flag.NormalizedName { } func resolveLog() *Log { + logLevel := strings.ToLower(viperInstance.GetString(LogLevelKey)) + validLevels := []string{"debug", "info", "warn", "error"} + + if !slices.Contains(validLevels, logLevel) { + slog.Warn("Invalid log level set, defaulting to 'info'", "log_level", logLevel) + viperInstance.Set(LogLevelKey, "info") + } + return &Log{ Level: viperInstance.GetString(LogLevelKey), Path: viperInstance.GetString(LogPathKey), @@ -1168,6 +1176,10 @@ func isHealthExtensionSet() bool { } func resolveCollectorLog() *Log { + if !viperInstance.IsSet(CollectorLogLevelKey) { + viperInstance.Set(CollectorLogLevelKey, strings.ToUpper(viperInstance.GetString(LogLevelKey))) + } + return &Log{ Level: viperInstance.GetString(CollectorLogLevelKey), Path: viperInstance.GetString(CollectorLogPathKey), diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 8b2914519..60f1175d0 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -243,12 +243,54 @@ func TestResolveAllowedDirectories(t *testing.T) { func TestResolveLog(t *testing.T) { viperInstance = viper.NewWithOptions(viper.KeyDelimiter(KeyDelimiter)) - viperInstance.Set(LogLevelKey, "error") - viperInstance.Set(LogPathKey, "/var/log/test/test.log") - result := resolveLog() - assert.Equal(t, "error", result.Level) - assert.Equal(t, "/var/log/test/test.log", result.Path) + tests := []struct { + name string + logLevel string + logPath string + expectedLogPath string + expectedLogLevel string + }{ + { + name: "Test 1: Log level set to info", + logLevel: "info", + logPath: "/var/log/test/test.log", + expectedLogPath: "/var/log/test/test.log", + expectedLogLevel: "info", + }, + { + name: "Test 2: Invalid log level set", + logLevel: "trace", + logPath: "/var/log/test/test.log", + expectedLogPath: "/var/log/test/test.log", + expectedLogLevel: "info", + }, + { + name: "Test 3: Log level set to debug", + logLevel: "debug", + logPath: "/var/log/test/test.log", + expectedLogPath: "/var/log/test/test.log", + expectedLogLevel: "debug", + }, + { + name: "Test 4: Log level set with capitalization", + logLevel: "DEBUG", + logPath: "./logs/nginx.log", + expectedLogPath: "./logs/nginx.log", + expectedLogLevel: "DEBUG", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + viperInstance.Set(LogLevelKey, test.logLevel) + viperInstance.Set(LogPathKey, test.logPath) + + result := resolveLog() + assert.Equal(t, test.expectedLogLevel, result.Level) + assert.Equal(t, test.expectedLogPath, result.Path) + }) + } } func TestResolveClient(t *testing.T) { @@ -298,6 +340,59 @@ func TestResolveCollector(t *testing.T) { }) } +func TestResolveCollectorLog(t *testing.T) { + tests := []struct { + name string + logLevel string + logPath string + agentLogLevel string + expectedLogPath string + expectedLogLevel string + }{ + { + name: "Test 1: OTel Log Level Set In Config", + logLevel: "", + logPath: "/tmp/collector.log", + agentLogLevel: "debug", + expectedLogPath: "/tmp/collector.log", + expectedLogLevel: "DEBUG", + }, + { + name: "Test 2: Agent Log Level is Warn", + logLevel: "", + logPath: "/tmp/collector.log", + agentLogLevel: "warn", + expectedLogPath: "/tmp/collector.log", + expectedLogLevel: "WARN", + }, + { + name: "Test 3: OTel Log Level Set In Config", + logLevel: "INFO", + logPath: "/tmp/collector.log", + agentLogLevel: "debug", + expectedLogPath: "/tmp/collector.log", + expectedLogLevel: "INFO", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + viperInstance = viper.NewWithOptions(viper.KeyDelimiter(KeyDelimiter)) + viperInstance.Set(CollectorLogPathKey, test.logPath) + viperInstance.Set(LogLevelKey, test.agentLogLevel) + + if test.logLevel != "" { + viperInstance.Set(CollectorLogLevelKey, test.logLevel) + } + + log := resolveCollectorLog() + + assert.Equal(t, test.expectedLogLevel, log.Level) + assert.Equal(t, test.expectedLogPath, log.Path) + }) + } +} + func TestCommand(t *testing.T) { viperInstance = viper.NewWithOptions(viper.KeyDelimiter(KeyDelimiter)) expected := agentConfig().Command