K8s: Add slog wrapper (#84680)

This commit is contained in:
Todd Treece
2024-04-09 18:39:25 +03:00
committed by GitHub
parent 518d3341d5
commit 72472e5eb7
11 changed files with 637 additions and 61 deletions
+8 -4
View File
@@ -1,9 +1,11 @@
package options
import (
"log/slog"
"strconv"
"github.com/go-logr/logr"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/log/slogadapter"
"github.com/spf13/pflag"
genericapiserver "k8s.io/apiserver/pkg/server"
"k8s.io/component-base/logs"
@@ -36,10 +38,12 @@ func (o *ExtraOptions) Validate() []error {
}
func (o *ExtraOptions) ApplyTo(c *genericapiserver.RecommendedConfig) error {
logger := logr.New(newLogAdapter(o.Verbosity))
klog.SetLoggerWithOptions(logger, klog.ContextualLogger(true))
handler := slogadapter.New(log.New("grafana-apiserver"))
logger := slog.New(handler)
klog.SetSlogLogger(logger)
if _, err := logs.GlogSetter(strconv.Itoa(o.Verbosity)); err != nil {
logger.Error(err, "failed to set log level")
logger.Error("failed to set log level", "error", err)
}
c.ExternalAddress = o.ExternalAddress
return nil
-54
View File
@@ -1,54 +0,0 @@
package options
import (
"strings"
"github.com/go-logr/logr"
"github.com/grafana/grafana/pkg/infra/log"
)
var _ logr.LogSink = (*logAdapter)(nil)
type logAdapter struct {
level int
log log.Logger
}
func newLogAdapter(level int) *logAdapter {
return &logAdapter{log: log.New("grafana-apiserver"), level: level}
}
func (l *logAdapter) WithName(name string) logr.LogSink {
l.log = l.log.New("name", name)
return l
}
func (l *logAdapter) WithValues(keysAndValues ...any) logr.LogSink {
l.log = l.log.New(keysAndValues...)
return l
}
func (l *logAdapter) Init(_ logr.RuntimeInfo) {
// we aren't using the logr library for logging, so this is a no-op
}
func (l *logAdapter) Enabled(level int) bool {
return level <= l.level
}
func (l *logAdapter) Info(level int, msg string, keysAndValues ...any) {
msg = strings.TrimSpace(msg)
// kubernetes uses level 0 for critical messages, so map that to Info
if level == 0 {
l.log.Info(msg, keysAndValues...)
return
}
// every other level is mapped to Debug
l.log.Debug(msg, keysAndValues...)
}
func (l *logAdapter) Error(err error, msg string, keysAndValues ...any) {
msg = strings.TrimSpace(msg)
l.log.Error(msg, keysAndValues...)
}