Skip to content

Commit 16feabb

Browse files
tchapcoolkp
authored andcommitted
Actually init logging using Zap (kubernetes-sigs#267)
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.
1 parent cd53088 commit 16feabb

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

go.mod

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ require (
1717
github.com/prometheus/common v0.62.0
1818
github.com/stretchr/testify v1.10.0
1919
go.uber.org/multierr v1.11.0
20+
go.uber.org/zap v1.27.0
2021
google.golang.org/grpc v1.70.0
2122
google.golang.org/protobuf v1.36.5
2223
k8s.io/api v0.32.1
@@ -62,6 +63,7 @@ require (
6263
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
6364
github.com/go-logr/logr v1.4.2 // indirect
6465
github.com/go-logr/stdr v1.2.2 // indirect
66+
github.com/go-logr/zapr v1.3.0 // indirect
6567
github.com/go-openapi/jsonpointer v0.21.0 // indirect
6668
github.com/go-openapi/jsonreference v0.20.2 // indirect
6769
github.com/go-openapi/swag v0.23.0 // indirect
@@ -114,7 +116,6 @@ require (
114116
go.opentelemetry.io/otel/sdk v1.32.0 // indirect
115117
go.opentelemetry.io/otel/trace v1.32.0 // indirect
116118
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
117-
go.uber.org/zap v1.27.0 // indirect
118119
golang.org/x/crypto v0.32.0 // indirect
119120
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
120121
golang.org/x/mod v0.22.0 // indirect

pkg/ext-proc/main.go

+29-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"strconv"
1010

1111
"github.com/prometheus/client_golang/prometheus/promhttp"
12+
uberzap "go.uber.org/zap"
13+
"go.uber.org/zap/zapcore"
1214
"google.golang.org/grpc"
1315
healthPb "google.golang.org/grpc/health/grpc_health_v1"
1416
"k8s.io/apimachinery/pkg/runtime"
@@ -18,12 +20,14 @@ import (
1820
"k8s.io/component-base/metrics/legacyregistry"
1921
klog "k8s.io/klog/v2"
2022
ctrl "sigs.k8s.io/controller-runtime"
23+
"sigs.k8s.io/controller-runtime/pkg/log/zap"
2124
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
2225
"sigs.k8s.io/gateway-api-inference-extension/api/v1alpha1"
2326
"sigs.k8s.io/gateway-api-inference-extension/pkg/ext-proc/backend"
2427
"sigs.k8s.io/gateway-api-inference-extension/pkg/ext-proc/backend/vllm"
2528
"sigs.k8s.io/gateway-api-inference-extension/pkg/ext-proc/metrics"
2629
runserver "sigs.k8s.io/gateway-api-inference-extension/pkg/ext-proc/server"
30+
"sigs.k8s.io/gateway-api-inference-extension/pkg/ext-proc/util/logging"
2731
)
2832

2933
const (
@@ -73,6 +77,7 @@ var (
7377
"refreshPrometheusMetricsInterval",
7478
runserver.DefaultRefreshPrometheusMetricsInterval,
7579
"interval to flush prometheus metrics")
80+
logVerbosity = flag.Int("v", logging.DEFAULT, "number for the log level verbosity")
7681

7782
scheme = runtime.NewScheme()
7883
)
@@ -83,10 +88,13 @@ func init() {
8388
}
8489

8590
func main() {
86-
klog.InitFlags(nil)
91+
opts := zap.Options{
92+
Development: true,
93+
}
94+
opts.BindFlags(flag.CommandLine)
8795
flag.Parse()
96+
initLogging(&opts)
8897

89-
ctrl.SetLogger(klog.TODO())
9098
cfg, err := ctrl.GetConfig()
9199
if err != nil {
92100
klog.Fatalf("Failed to get rest config: %v", err)
@@ -152,6 +160,25 @@ func main() {
152160
klog.Info("All components shutdown")
153161
}
154162

163+
func initLogging(opts *zap.Options) {
164+
// Unless -zap-log-level is explicitly set, use -v
165+
useV := true
166+
flag.Visit(func(f *flag.Flag) {
167+
if f.Name == "zap-log-level" {
168+
useV = false
169+
}
170+
})
171+
if useV {
172+
// See https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/log/zap#Options.Level
173+
lvl := -1 * (*logVerbosity)
174+
opts.Level = uberzap.NewAtomicLevelAt(zapcore.Level(int8(lvl)))
175+
}
176+
177+
logger := zap.New(zap.UseFlagOptions(opts), zap.RawZapOpts(uberzap.AddCaller()))
178+
ctrl.SetLogger(logger)
179+
klog.SetLogger(logger)
180+
}
181+
155182
// startHealthServer starts the gRPC health probe server in a goroutine.
156183
func startHealthServer(ds *backend.K8sDatastore, port int) *grpc.Server {
157184
svr := grpc.NewServer()

0 commit comments

Comments
 (0)