Skip to content

Commit

Permalink
Actually init logging using Zap (#267)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
tchap authored Feb 12, 2025
1 parent 4a8f04c commit 242b73e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
31 changes: 29 additions & 2 deletions pkg/ext-proc/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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 (
Expand Down Expand Up @@ -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()
)
Expand All @@ -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)
Expand Down Expand Up @@ -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()
Expand Down

0 comments on commit 242b73e

Please sign in to comment.