@@ -26,6 +26,8 @@ import (
26
26
"github.com/spf13/cobra"
27
27
"k8s.io/client-go/util/flowcontrol"
28
28
cliflag "k8s.io/component-base/cli/flag"
29
+ "k8s.io/component-base/logs"
30
+ logsv1 "k8s.io/component-base/logs/api/v1"
29
31
"k8s.io/component-base/term"
30
32
"k8s.io/klog/v2"
31
33
controllerruntime "sigs.k8s.io/controller-runtime"
@@ -37,6 +39,7 @@ import (
37
39
"sigs.k8s.io/controller-runtime/pkg/webhook/conversion"
38
40
39
41
"github.com/karmada-io/karmada/cmd/webhook/app/options"
42
+ "github.com/karmada-io/karmada/pkg/features"
40
43
versionmetrics "github.com/karmada-io/karmada/pkg/metrics"
41
44
"github.com/karmada-io/karmada/pkg/sharedcli"
42
45
"github.com/karmada-io/karmada/pkg/sharedcli/klogflag"
@@ -65,12 +68,37 @@ import (
65
68
66
69
// NewWebhookCommand creates a *cobra.Command object with default parameters
67
70
func NewWebhookCommand (ctx context.Context ) * cobra.Command {
71
+ logConfig := logsv1 .NewLoggingConfiguration ()
72
+ fss := cliflag.NamedFlagSets {}
73
+
74
+ logsFlagSet := fss .FlagSet ("logs" )
75
+ logs .AddFlags (logsFlagSet , logs .SkipLoggingConfigurationFlags ())
76
+ logsv1 .AddFlags (logConfig , logsFlagSet )
77
+ klogflag .Add (logsFlagSet )
78
+
79
+ genericFlagSet := fss .FlagSet ("generic" )
68
80
opts := options .NewOptions ()
81
+ genericFlagSet .AddGoFlagSet (flag .CommandLine )
82
+ opts .AddFlags (genericFlagSet )
69
83
70
84
cmd := & cobra.Command {
71
85
Use : names .KarmadaWebhookComponentName ,
72
86
Long : `The karmada-webhook starts a webhook server and manages policies about how to mutate and validate
73
87
Karmada resources including 'PropagationPolicy', 'OverridePolicy' and so on.` ,
88
+ PersistentPreRunE : func (_ * cobra.Command , _ []string ) error {
89
+ if err := logsv1 .ValidateAndApply (logConfig , features .FeatureGate ); err != nil {
90
+ return err
91
+ }
92
+ logs .InitLogs ()
93
+
94
+ // Starting from version 0.15.0, controller-runtime expects its consumers to set a logger through log.SetLogger.
95
+ // If SetLogger is not called within the first 30 seconds of a binaries lifetime, it will get
96
+ // set to a NullLogSink and report an error. Here's to silence the "log.SetLogger(...) was never called; logs will not be displayed" error
97
+ // by setting a logger through log.SetLogger.
98
+ // More info refer to: https://github.com/karmada-io/karmada/pull/4885.
99
+ controllerruntime .SetLogger (klog .Background ())
100
+ return nil
101
+ },
74
102
RunE : func (_ * cobra.Command , _ []string ) error {
75
103
// validate options
76
104
if errs := opts .Validate (); len (errs ) != 0 {
@@ -91,16 +119,6 @@ Karmada resources including 'PropagationPolicy', 'OverridePolicy' and so on.`,
91
119
},
92
120
}
93
121
94
- fss := cliflag.NamedFlagSets {}
95
-
96
- genericFlagSet := fss .FlagSet ("generic" )
97
- genericFlagSet .AddGoFlagSet (flag .CommandLine )
98
- opts .AddFlags (genericFlagSet )
99
-
100
- // Set klog flags
101
- logsFlagSet := fss .FlagSet ("logs" )
102
- klogflag .Add (logsFlagSet )
103
-
104
122
cmd .AddCommand (sharedcommand .NewCmdVersion (names .KarmadaWebhookComponentName ))
105
123
cmd .Flags ().AddFlagSet (genericFlagSet )
106
124
cmd .Flags ().AddFlagSet (logsFlagSet )
0 commit comments