From e0dead4aa27cada3e292d45bd65b849ca1e63255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Sun, 26 Jun 2022 23:49:45 +0200 Subject: [PATCH] plugin/kubernetes : make kubernetes client log in CoreDNS format (#5461) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ondřej Benkovský --- plugin/kubernetes/logger.go | 38 +++++++++++++++++++++++++++++++++++++ plugin/kubernetes/setup.go | 4 ++-- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 plugin/kubernetes/logger.go diff --git a/plugin/kubernetes/logger.go b/plugin/kubernetes/logger.go new file mode 100644 index 000000000..ac9fe8071 --- /dev/null +++ b/plugin/kubernetes/logger.go @@ -0,0 +1,38 @@ +package kubernetes + +import ( + clog "github.com/coredns/coredns/plugin/pkg/log" + + "github.com/go-logr/logr" +) + +// loggerAdapter is a simple wrapper around CoreDNS plugin logger made to implement logr.LogSink interface, which is used +// as part of klog library for logging in Kubernetes client. By using this adapter CoreDNS is able to log messages/errors from +// kubernetes client in a CoreDNS logging format +type loggerAdapter struct { + clog.P +} + +func (l *loggerAdapter) Init(_ logr.RuntimeInfo) { +} + +func (l *loggerAdapter) Enabled(_ int) bool { + // verbosity is controlled inside klog library, we do not need to do anything here + return true +} + +func (l *loggerAdapter) Info(_ int, msg string, _ ...interface{}) { + l.P.Info(msg) +} + +func (l *loggerAdapter) Error(_ error, msg string, _ ...interface{}) { + l.P.Error(msg) +} + +func (l *loggerAdapter) WithValues(_ ...interface{}) logr.LogSink { + return l +} + +func (l *loggerAdapter) WithName(_ string) logr.LogSink { + return l +} diff --git a/plugin/kubernetes/setup.go b/plugin/kubernetes/setup.go index 5f5ab0582..4d7bfcf03 100644 --- a/plugin/kubernetes/setup.go +++ b/plugin/kubernetes/setup.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - "os" "strconv" "strings" @@ -15,6 +14,7 @@ import ( clog "github.com/coredns/coredns/plugin/pkg/log" "github.com/coredns/coredns/plugin/pkg/upstream" + "github.com/go-logr/logr" "github.com/miekg/dns" meta "k8s.io/apimachinery/pkg/apis/meta/v1" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" // pull this in here, because we want it excluded if plugin.cfg doesn't have k8s @@ -32,7 +32,7 @@ func init() { plugin.Register(pluginName, setup) } func setup(c *caddy.Controller) error { // Do not call klog.InitFlags(nil) here. It will cause reload to panic. - klog.SetOutput(os.Stdout) + klog.SetLogger(logr.New(&loggerAdapter{log})) k, err := kubernetesParse(c) if err != nil {