From f930f5761f4c1ad0adcb65e8ebb229221d7b9dba Mon Sep 17 00:00:00 2001 From: Mateusz Szostok Date: Fri, 14 Jul 2023 15:02:24 +0200 Subject: [PATCH] Plugins logger respect generic logger settings --- cmd/botkube-agent/main.go | 2 +- internal/plugin/index_builder.go | 3 ++- internal/plugin/logger.go | 6 ++++-- internal/plugin/manager.go | 12 +++++++----- internal/plugin/manager_test.go | 2 +- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/cmd/botkube-agent/main.go b/cmd/botkube-agent/main.go index 2e4efcbe74..37a431ffef 100644 --- a/cmd/botkube-agent/main.go +++ b/cmd/botkube-agent/main.go @@ -130,7 +130,7 @@ func run(ctx context.Context) error { collector := plugin.NewCollector(logger) enabledPluginExecutors, enabledPluginSources := collector.GetAllEnabledAndUsedPlugins(conf) - pluginManager := plugin.NewManager(logger, conf.Plugins, enabledPluginExecutors, enabledPluginSources) + pluginManager := plugin.NewManager(logger, conf.Settings.Log, conf.Plugins, enabledPluginExecutors, enabledPluginSources) err = pluginManager.Start(ctx) if err != nil { diff --git a/internal/plugin/index_builder.go b/internal/plugin/index_builder.go index 6237914c9a..e9cd616685 100644 --- a/internal/plugin/index_builder.go +++ b/internal/plugin/index_builder.go @@ -16,6 +16,7 @@ import ( "github.com/xeipuuv/gojsonschema" "github.com/kubeshop/botkube/pkg/api" + "github.com/kubeshop/botkube/pkg/config" "github.com/kubeshop/botkube/pkg/multierror" ) @@ -170,7 +171,7 @@ func (i *IndexBuilder) getPluginMetadata(dir string, bins []pluginBinariesIndex) bins := map[string]string{ item.Type.String(): filepath.Join(dir, item.BinaryPath), } - clients, err := createGRPCClients[metadataGetter](i.log, bins, item.Type) + clients, err := createGRPCClients[metadataGetter](i.log, config.Logger{}, bins, item.Type) if err != nil { return nil, fmt.Errorf("while creating gRPC client: %w", err) } diff --git a/internal/plugin/logger.go b/internal/plugin/logger.go index b6b345e56a..d8c72cc56d 100644 --- a/internal/plugin/logger.go +++ b/internal/plugin/logger.go @@ -23,11 +23,13 @@ var specialCharsPattern = regexp.MustCompile(`(?i:[^A-Z0-9_])`) // - hashicorp client logger always has the configured log level // - binary standard output is logged only if debug level is set, otherwise it is discarded // - binary standard error is logged always on error level -func NewPluginLoggers(bkLogger logrus.FieldLogger, pluginKey string, pluginType Type) (hclog.Logger, io.Writer, io.Writer) { +func NewPluginLoggers(bkLogger logrus.FieldLogger, logConfig config.Logger, pluginKey string, pluginType Type) (hclog.Logger, io.Writer, io.Writer) { pluginLogLevel := getPluginLogLevel(bkLogger, pluginKey, pluginType) cfg := config.Logger{ - Level: pluginLogLevel.String(), + Level: pluginLogLevel.String(), + DisableColors: logConfig.DisableColors, + Formatter: logConfig.Formatter, } log := loggerx.New(cfg).WithField("plugin", pluginKey) diff --git a/internal/plugin/manager.go b/internal/plugin/manager.go index 42b8243246..a53f2a58dd 100644 --- a/internal/plugin/manager.go +++ b/internal/plugin/manager.go @@ -47,6 +47,7 @@ var pluginMap = map[string]plugin.Plugin{ type Manager struct { isStarted atomic.Bool log logrus.FieldLogger + logConfig config.Logger cfg config.PluginManagement httpClient *http.Client @@ -58,7 +59,7 @@ type Manager struct { } // NewManager returns a new Manager instance. -func NewManager(logger logrus.FieldLogger, cfg config.PluginManagement, executors, sources []string) *Manager { +func NewManager(logger logrus.FieldLogger, logCfg config.Logger, cfg config.PluginManagement, executors, sources []string) *Manager { return &Manager{ cfg: cfg, httpClient: httpx.NewHTTPClient(), @@ -67,6 +68,7 @@ func NewManager(logger logrus.FieldLogger, cfg config.PluginManagement, executor sourcesToEnable: sources, sourcesStore: newStore[source.Source](), log: logger.WithField("component", "Plugin Manager"), + logConfig: logCfg, // used when we create on-demand loggers for plugins } } @@ -106,7 +108,7 @@ func (m *Manager) start(ctx context.Context, forceUpdate bool) error { return err } - executorClients, err := createGRPCClients[executor.Executor](m.log, executorPlugins, TypeExecutor) + executorClients, err := createGRPCClients[executor.Executor](m.log, m.logConfig, executorPlugins, TypeExecutor) if err != nil { return fmt.Errorf("while creating executor plugins: %w", err) } @@ -116,7 +118,7 @@ func (m *Manager) start(ctx context.Context, forceUpdate bool) error { if err != nil { return err } - sourcesClients, err := createGRPCClients[source.Source](m.log, sourcesPlugins, TypeSource) + sourcesClients, err := createGRPCClients[source.Source](m.log, m.logConfig, sourcesPlugins, TypeSource) if err != nil { return fmt.Errorf("while creating source plugins: %w", err) } @@ -324,11 +326,11 @@ func (m *Manager) fetchIndex(ctx context.Context, path, url string) error { return nil } -func createGRPCClients[C any](logger logrus.FieldLogger, bins map[string]string, pluginType Type) (map[string]enabledPlugins[C], error) { +func createGRPCClients[C any](logger logrus.FieldLogger, logConfig config.Logger, bins map[string]string, pluginType Type) (map[string]enabledPlugins[C], error) { out := map[string]enabledPlugins[C]{} for key, path := range bins { - pluginLogger, stdoutLogger, stderrLogger := NewPluginLoggers(logger, key, pluginType) + pluginLogger, stdoutLogger, stderrLogger := NewPluginLoggers(logger, logConfig, key, pluginType) cli := plugin.NewClient(&plugin.ClientConfig{ Plugins: pluginMap, diff --git a/internal/plugin/manager_test.go b/internal/plugin/manager_test.go index 880d3ba692..350b83685b 100644 --- a/internal/plugin/manager_test.go +++ b/internal/plugin/manager_test.go @@ -69,7 +69,7 @@ func TestCollectEnabledRepositories(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { // given - manager := NewManager(loggerx.NewNoop(), config.PluginManagement{ + manager := NewManager(loggerx.NewNoop(), config.Logger{}, config.PluginManagement{ Repositories: tc.definedRepositories, }, tc.enabledExecutors, tc.enabledSources)