diff --git a/cmd/main.go b/cmd/main.go index ca7492c..b8ec149 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -26,13 +26,14 @@ import ( // to ensure that exec-entrypoint and run can make use of them. _ "k8s.io/client-go/plugin/pkg/client/auth" + "go.uber.org/zap" "go.uber.org/zap/zapcore" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/healthz" - "sigs.k8s.io/controller-runtime/pkg/log/zap" + ctrlzap "sigs.k8s.io/controller-runtime/pkg/log/zap" "sigs.k8s.io/controller-runtime/pkg/metrics/filters" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" "sigs.k8s.io/controller-runtime/pkg/webhook" @@ -85,14 +86,15 @@ func main() { flag.StringVar(&certificateIssuerName, "certificate-issuer-name", "nova-hypervisor-agents-ca-issuer", "Name of the certificate issuer.") - opts := zap.Options{ + opts := ctrlzap.Options{ Development: true, TimeEncoder: zapcore.ISO8601TimeEncoder, + ZapOpts: []zap.Option{zap.WrapCore(logger.WrapCore)}, } opts.BindFlags(flag.CommandLine) flag.Parse() - ctrl.SetLogger(logger.WrapLogger(zap.New(zap.UseFlagOptions(&opts)))) + ctrl.SetLogger(ctrlzap.New(ctrlzap.UseFlagOptions(&opts))) // if the enable-http2 flag is false (the default), http/2 should be disabled // due to its vulnerabilities. More specifically, disabling http/2 will diff --git a/go.mod b/go.mod index 8233755..f3615e8 100644 --- a/go.mod +++ b/go.mod @@ -40,7 +40,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.9.0 // indirect - github.com/go-logr/logr v1.4.3 + github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/zapr v1.3.0 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect diff --git a/internal/logger/logger.go b/internal/logger/logger.go index 23a905c..c8a8c19 100644 --- a/internal/logger/logger.go +++ b/internal/logger/logger.go @@ -18,50 +18,41 @@ limitations under the License. package logger import ( - "github.com/go-logr/logr" + "go.uber.org/zap/zapcore" ) -type wrapper struct { - orig logr.LogSink +type wrapCore struct { + core zapcore.Core } -// Enabled implements logr.LogSink. -func (w wrapper) Enabled(level int) bool { - return w.orig.Enabled(level) +func WrapCore(core zapcore.Core) zapcore.Core { + return wrapCore{core} } -// Error implements logr.LogSink. -func (w wrapper) Error(err error, msg string, keysAndValues ...any) { - if msg == "Reconciler error" { - w.orig.Info(2, msg, append(keysAndValues, "error", err.Error())...) - } else { - w.orig.Error(err, msg, keysAndValues...) +// Check implements zapcore.Core. +func (w wrapCore) Check(entry zapcore.Entry, checkedEntry *zapcore.CheckedEntry) *zapcore.CheckedEntry { + if entry.Message == "Reconciler error" { + entry.Level = -2 } + return w.core.Check(entry, checkedEntry) } -// Info implements logr.LogSink. -func (w wrapper) Info(level int, msg string, keysAndValues ...any) { - w.orig.Info(level, msg, keysAndValues...) +// Enabled implements zapcore.Core. +func (w wrapCore) Enabled(level zapcore.Level) bool { + return w.core.Enabled(level) } -// Init implements logr.LogSink. -func (w wrapper) Init(info logr.RuntimeInfo) { - w.orig.Init(info) +// Sync implements zapcore.Core. +func (w wrapCore) Sync() error { + return w.core.Sync() } -// WithName implements logr.LogSink. -func (w wrapper) WithName(name string) logr.LogSink { - w.orig.WithName(name) - return w +// With implements zapcore.Core. +func (w wrapCore) With(fields []zapcore.Field) zapcore.Core { + return wrapCore{w.core.With(fields)} } -// WithValues implements logr.LogSink. -func (w wrapper) WithValues(keysAndValues ...any) logr.LogSink { - w.orig.WithValues(keysAndValues...) - return w -} - -func WrapLogger(logger logr.Logger) logr.Logger { - orig := logger.GetSink() - return logger.WithSink(wrapper{orig}) +// Write implements zapcore.Core. +func (w wrapCore) Write(entry zapcore.Entry, fields []zapcore.Field) error { + return w.core.Write(entry, fields) }