Skip to content

Commit 591193b

Browse files
authored
Merge pull request #6496 from LeonZh0u/operator-structured-logs
JSON logging support for Karmada Operator
2 parents 450b642 + a56fb20 commit 591193b

File tree

3 files changed

+28
-17
lines changed

3 files changed

+28
-17
lines changed

operator/cmd/operator/app/operator.go

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import (
2626
"k8s.io/apimachinery/pkg/util/sets"
2727
restclient "k8s.io/client-go/rest"
2828
cliflag "k8s.io/component-base/cli/flag"
29+
"k8s.io/component-base/logs"
30+
logsv1 "k8s.io/component-base/logs/api/v1"
2931
"k8s.io/component-base/term"
3032
"k8s.io/klog/v2"
3133
controllerruntime "sigs.k8s.io/controller-runtime"
@@ -40,6 +42,7 @@ import (
4042
ctrlctx "github.com/karmada-io/karmada/operator/pkg/controller/context"
4143
"github.com/karmada-io/karmada/operator/pkg/controller/karmada"
4244
"github.com/karmada-io/karmada/operator/pkg/scheme"
45+
"github.com/karmada-io/karmada/pkg/features"
4346
versionmetrics "github.com/karmada-io/karmada/pkg/metrics"
4447
"github.com/karmada-io/karmada/pkg/sharedcli"
4548
"github.com/karmada-io/karmada/pkg/sharedcli/klogflag"
@@ -50,13 +53,32 @@ import (
5053
// NewOperatorCommand creates a *cobra.Command object with default parameters
5154
func NewOperatorCommand(ctx context.Context) *cobra.Command {
5255
o := options.NewOptions()
56+
logConfig := logsv1.NewLoggingConfiguration()
57+
fss := cliflag.NamedFlagSets{}
58+
59+
// Set klog flags
60+
logsFlagSet := fss.FlagSet("logs")
61+
logs.AddFlags(logsFlagSet, logs.SkipLoggingConfigurationFlags())
62+
logsv1.AddFlags(logConfig, logsFlagSet)
63+
klogflag.Add(logsFlagSet)
64+
65+
genericFlagSet := fss.FlagSet("generic")
66+
// Add the flag(--kubeconfig) that is added by controller-runtime
67+
// (https://github.com/kubernetes-sigs/controller-runtime/blob/v0.11.1/pkg/client/config/config.go#L39).
68+
genericFlagSet.AddGoFlagSet(flag.CommandLine)
69+
o.AddFlags(genericFlagSet, controllers.ControllerNames(), sets.List(controllersDisabledByDefault))
70+
5371
cmd := &cobra.Command{
5472
Use: "karmada-operator",
5573
PersistentPreRunE: func(*cobra.Command, []string) error {
5674
// silence client-go warnings.
5775
// karmada-operator generically watches APIs (including deprecated ones),
5876
// and CI ensures it works properly against matching kube-apiserver versions.
5977
restclient.SetDefaultWarningHandler(restclient.NoWarnings{})
78+
if err := logsv1.ValidateAndApply(logConfig, features.FeatureGate); err != nil {
79+
return err
80+
}
81+
logs.InitLogs()
6082
return nil
6183
},
6284
RunE: func(_ *cobra.Command, _ []string) error {
@@ -74,19 +96,6 @@ func NewOperatorCommand(ctx context.Context) *cobra.Command {
7496
return nil
7597
},
7698
}
77-
78-
fss := cliflag.NamedFlagSets{}
79-
80-
genericFlagSet := fss.FlagSet("generic")
81-
// Add the flag(--kubeconfig) that is added by controller-runtime
82-
// (https://github.com/kubernetes-sigs/controller-runtime/blob/v0.11.1/pkg/client/config/config.go#L39).
83-
genericFlagSet.AddGoFlagSet(flag.CommandLine)
84-
o.AddFlags(genericFlagSet, controllers.ControllerNames(), sets.List(controllersDisabledByDefault))
85-
86-
// Set klog flags
87-
logsFlagSet := fss.FlagSet("logs")
88-
klogflag.Add(logsFlagSet)
89-
9099
cmd.AddCommand(sharedcommand.NewCmdVersion("karmada-operator"))
91100
cmd.Flags().AddFlagSet(genericFlagSet)
92101
cmd.Flags().AddFlagSet(logsFlagSet)

operator/cmd/operator/operator.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import (
2020
"os"
2121

2222
"k8s.io/component-base/cli"
23+
"k8s.io/component-base/logs"
2324
_ "k8s.io/component-base/logs/json/register" // for JSON log format registration
24-
"k8s.io/klog/v2"
2525
controllerruntime "sigs.k8s.io/controller-runtime"
2626

2727
"github.com/karmada-io/karmada/operator/cmd/operator/app"
@@ -34,8 +34,9 @@ func main() {
3434
// set to a NullLogSink and report an error. Here's to silence the "log.SetLogger(...) was never called; logs will not be displayed" error
3535
// by setting a logger through log.SetLogger.
3636
// More info refer to: https://github.com/karmada-io/karmada/pull/4885.
37-
controllerruntime.SetLogger(klog.Background())
3837
command := app.NewOperatorCommand(ctx)
39-
code := cli.Run(command)
40-
os.Exit(code)
38+
exitCode := cli.Run(command)
39+
// Ensure any buffered log entries are flushed
40+
logs.FlushLogs()
41+
os.Exit(exitCode)
4142
}

operator/config/deploy/karmada-operator-deployment.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ spec:
2222
command:
2323
- /bin/karmada-operator
2424
- --leader-elect-resource-namespace=karmada-system
25+
- --logging-format=json
2526
- --v=4
2627
ports:
2728
- containerPort: 8080

0 commit comments

Comments
 (0)