From 32f53cd4d1e887913014ff37373340df072929aa Mon Sep 17 00:00:00 2001 From: Ondrej Kupka Date: Fri, 31 Jan 2025 18:43:21 +0100 Subject: [PATCH] Actually init logging using Zap Controllers typically use Zap these days. The only potential issue is that the flags are not compatible. This is somehow mitigated by supporting -v explicitly. --- go.mod | 3 ++- pkg/ext-proc/main.go | 31 +++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c89080ae..d8b143ec 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/prometheus/common v0.62.0 github.com/stretchr/testify v1.10.0 go.uber.org/multierr v1.11.0 + go.uber.org/zap v1.27.0 google.golang.org/grpc v1.70.0 google.golang.org/protobuf v1.36.5 k8s.io/api v0.32.1 @@ -62,6 +63,7 @@ require ( github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/go-logr/logr v1.4.2 // 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 github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.23.0 // indirect @@ -114,7 +116,6 @@ require ( go.opentelemetry.io/otel/sdk v1.32.0 // indirect go.opentelemetry.io/otel/trace v1.32.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect - go.uber.org/zap v1.27.0 // indirect golang.org/x/crypto v0.32.0 // indirect golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect golang.org/x/mod v0.22.0 // indirect diff --git a/pkg/ext-proc/main.go b/pkg/ext-proc/main.go index 634c3581..6bdaae66 100644 --- a/pkg/ext-proc/main.go +++ b/pkg/ext-proc/main.go @@ -9,6 +9,8 @@ import ( "strconv" "github.com/prometheus/client_golang/prometheus/promhttp" + uberzap "go.uber.org/zap" + "go.uber.org/zap/zapcore" "google.golang.org/grpc" healthPb "google.golang.org/grpc/health/grpc_health_v1" "k8s.io/apimachinery/pkg/runtime" @@ -18,12 +20,14 @@ import ( "k8s.io/component-base/metrics/legacyregistry" klog "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/log/zap" "sigs.k8s.io/controller-runtime/pkg/metrics/filters" "sigs.k8s.io/gateway-api-inference-extension/api/v1alpha1" "sigs.k8s.io/gateway-api-inference-extension/pkg/ext-proc/backend" "sigs.k8s.io/gateway-api-inference-extension/pkg/ext-proc/backend/vllm" "sigs.k8s.io/gateway-api-inference-extension/pkg/ext-proc/metrics" runserver "sigs.k8s.io/gateway-api-inference-extension/pkg/ext-proc/server" + "sigs.k8s.io/gateway-api-inference-extension/pkg/ext-proc/util/logging" ) const ( @@ -73,6 +77,7 @@ var ( "refreshPrometheusMetricsInterval", runserver.DefaultRefreshPrometheusMetricsInterval, "interval to flush prometheus metrics") + logVerbosity = flag.Int("v", logging.DEFAULT, "number for the log level verbosity") scheme = runtime.NewScheme() ) @@ -83,10 +88,13 @@ func init() { } func main() { - klog.InitFlags(nil) + opts := zap.Options{ + Development: true, + } + opts.BindFlags(flag.CommandLine) flag.Parse() + initLogging(&opts) - ctrl.SetLogger(klog.TODO()) cfg, err := ctrl.GetConfig() if err != nil { klog.Fatalf("Failed to get rest config: %v", err) @@ -152,6 +160,25 @@ func main() { klog.Info("All components shutdown") } +func initLogging(opts *zap.Options) { + // Unless -zap-log-level is explicitly set, use -v + useV := true + flag.Visit(func(f *flag.Flag) { + if f.Name == "zap-log-level" { + useV = false + } + }) + if useV { + // See https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/log/zap#Options.Level + lvl := -1 * (*logVerbosity) + opts.Level = uberzap.NewAtomicLevelAt(zapcore.Level(int8(lvl))) + } + + logger := zap.New(zap.UseFlagOptions(opts), zap.RawZapOpts(uberzap.AddCaller())) + ctrl.SetLogger(logger) + klog.SetLogger(logger) +} + // startHealthServer starts the gRPC health probe server in a goroutine. func startHealthServer(ds *backend.K8sDatastore, port int) *grpc.Server { svr := grpc.NewServer()