From 2082eeb72fbfa29c2aaa9a92ade6b4f031e1d8ef Mon Sep 17 00:00:00 2001 From: Marcus Efraimsson Date: Thu, 10 Feb 2022 09:52:37 +0100 Subject: [PATCH] Logging: Fix so that filters can contain commented lines (#45159) Fixes log filters that contains comments should not be enabled --- pkg/infra/log/log.go | 11 +++++- pkg/infra/log/log_test.go | 71 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/pkg/infra/log/log.go b/pkg/infra/log/log.go index cc49d8c03bb..14eac121bd7 100644 --- a/pkg/infra/log/log.go +++ b/pkg/infra/log/log.go @@ -251,7 +251,16 @@ func getLogLevelFromString(levelName string) level.Option { func getFilters(filterStrArray []string) map[string]level.Option { filterMap := make(map[string]level.Option) - for _, filterStr := range filterStrArray { + for i := 0; i < len(filterStrArray); i++ { + filterStr := strings.TrimSpace(filterStrArray[i]) + + if strings.HasPrefix(filterStr, ";") || strings.HasPrefix(filterStr, "#") { + if len(filterStr) == 1 { + i++ + } + continue + } + parts := strings.Split(filterStr, ":") if len(parts) > 1 { filterMap[parts[0]] = getLogLevelFromString(parts[1]) diff --git a/pkg/infra/log/log_test.go b/pkg/infra/log/log_test.go index 553a77fe2e5..c914d6fd93b 100644 --- a/pkg/infra/log/log_test.go +++ b/pkg/infra/log/log_test.go @@ -7,6 +7,7 @@ import ( gokitlog "github.com/go-kit/log" "github.com/grafana/grafana/pkg/infra/log/level" + "github.com/grafana/grafana/pkg/util" "github.com/stretchr/testify/require" ) @@ -107,3 +108,73 @@ func TestLogger(t *testing.T) { }) }) } + +func TestGetFilters(t *testing.T) { + t.Run("Parsing filters on single line with only space should return expected result", func(t *testing.T) { + filter := ` ` + filters := getFilters(util.SplitString(filter)) + require.Len(t, filters, 0) + }) + + t.Run("Parsing filters on single line with should return expected result", func(t *testing.T) { + filter := `rendering:debug oauth.generic_oauth:debug testwithoutlevel provisioning.dashboard:debug` + filters := getFilters(util.SplitString(filter)) + keys := []string{} + for k := range filters { + keys = append(keys, k) + } + + require.ElementsMatch(t, []string{ + "rendering", + "oauth.generic_oauth", + "provisioning.dashboard", + }, keys) + }) + + t.Run("Parsing filters spread over multiple lines with comments should return expected result", func(t *testing.T) { + filter := `rendering:debug \ + ; alerting.notifier:debug \ + oauth.generic_oauth:debug \ + ; oauth.okta:debug \ + ; tsdb.postgres:debug \ + ;tsdb.mssql:debug \ + #provisioning.plugins:debug \ + provisioning.dashboard:debug \ + data-proxy-log:debug \ + ;oauthtoken:debug \ + plugins.backend:debug \ + tsdb.elasticsearch.client:debug \ + server:debug \ + tsdb.graphite:debug \ + auth:debug \ + plugin.manager:debug \ + plugin.initializer:debug \ + plugin.loader:debug \ + plugin.finder:debug \ + plugin.installer:debug \ + plugin.signature.validator:debug` + filters := getFilters(util.SplitString(filter)) + keys := []string{} + for k := range filters { + keys = append(keys, k) + } + + require.ElementsMatch(t, []string{ + "rendering", + "oauth.generic_oauth", + "provisioning.dashboard", + "data-proxy-log", + "plugins.backend", + "tsdb.elasticsearch.client", + "server", + "tsdb.graphite", + "auth", + "plugin.manager", + "plugin.initializer", + "plugin.loader", + "plugin.finder", + "plugin.installer", + "plugin.signature.validator", + }, keys) + }) +}