Skip to content

Commit 1b6f047

Browse files
authored
[Feature] Unify logging system (#1007)
1 parent ccf6f11 commit 1b6f047

File tree

211 files changed

+2967
-2542
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

211 files changed

+2967
-2542
lines changed

cmd/admin.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,11 @@ func cmdGetAgencyState(cmd *cobra.Command, _ []string) {
107107
ctx := getInterruptionContext()
108108
d, certCA, auth, err := getDeploymentAndCredentials(ctx, deploymentName)
109109
if err != nil {
110-
cliLog.Fatal().Err(err).Msg("failed to create basic data for the connection")
110+
logger.Err(err).Fatal("failed to create basic data for the connection")
111111
}
112112

113113
if d.Spec.GetMode() != api.DeploymentModeCluster {
114-
cliLog.Fatal().Msgf("agency state does not work for the \"%s\" deployment \"%s\"", d.Spec.GetMode(),
114+
logger.Fatal("agency state does not work for the \"%s\" deployment \"%s\"", d.Spec.GetMode(),
115115
d.GetName())
116116
}
117117

@@ -120,7 +120,7 @@ func cmdGetAgencyState(cmd *cobra.Command, _ []string) {
120120
conn := createClient([]string{endpoint}, certCA, auth, connection.ApplicationJSON)
121121
leaderID, err := getAgencyLeader(ctx, conn)
122122
if err != nil {
123-
cliLog.Fatal().Err(err).Msg("failed to get leader ID")
123+
logger.Err(err).Fatal("failed to get leader ID")
124124
}
125125

126126
dnsLeaderName := k8sutil.CreatePodDNSName(d.GetObjectMeta(), api.ServerGroupAgents.AsRole(), leaderID)
@@ -131,7 +131,7 @@ func cmdGetAgencyState(cmd *cobra.Command, _ []string) {
131131
defer body.Close()
132132
}
133133
if err != nil {
134-
cliLog.Fatal().Err(err).Msg("can not get state of the agency")
134+
logger.Err(err).Fatal("can not get state of the agency")
135135
}
136136

137137
// Print and receive parallelly.
@@ -143,11 +143,11 @@ func cmdGetAgencyDump(cmd *cobra.Command, _ []string) {
143143
ctx := getInterruptionContext()
144144
d, certCA, auth, err := getDeploymentAndCredentials(ctx, deploymentName)
145145
if err != nil {
146-
cliLog.Fatal().Err(err).Msg("failed to create basic data for the connection")
146+
logger.Err(err).Fatal("failed to create basic data for the connection")
147147
}
148148

149149
if d.Spec.GetMode() != api.DeploymentModeCluster {
150-
cliLog.Fatal().Msgf("agency dump does not work for the \"%s\" deployment \"%s\"", d.Spec.GetMode(),
150+
logger.Fatal("agency dump does not work for the \"%s\" deployment \"%s\"", d.Spec.GetMode(),
151151
d.GetName())
152152
}
153153

@@ -158,7 +158,7 @@ func cmdGetAgencyDump(cmd *cobra.Command, _ []string) {
158158
defer body.Close()
159159
}
160160
if err != nil {
161-
cliLog.Fatal().Err(err).Msg("can not get dump")
161+
logger.Err(err).Fatal("can not get dump")
162162
}
163163

164164
// Print and receive parallelly.

cmd/cmd.go

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -31,29 +31,33 @@ import (
3131
"strings"
3232
"time"
3333

34+
"github.com/arangodb/kube-arangodb/pkg/util/globals"
35+
36+
"github.com/gin-gonic/gin"
37+
38+
operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http"
39+
40+
"github.com/arangodb/kube-arangodb/pkg/version"
41+
42+
"github.com/arangodb/kube-arangodb/pkg/operator/scope"
43+
44+
"github.com/arangodb/kube-arangodb/pkg/deployment/features"
45+
3446
deploymentApi "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
3547
"github.com/arangodb/kube-arangodb/pkg/crd"
36-
"github.com/arangodb/kube-arangodb/pkg/deployment/features"
3748
"github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme"
3849
"github.com/arangodb/kube-arangodb/pkg/logging"
3950
"github.com/arangodb/kube-arangodb/pkg/operator"
40-
"github.com/arangodb/kube-arangodb/pkg/operator/scope"
4151
"github.com/arangodb/kube-arangodb/pkg/server"
4252
"github.com/arangodb/kube-arangodb/pkg/util"
4353
"github.com/arangodb/kube-arangodb/pkg/util/constants"
4454
utilsError "github.com/arangodb/kube-arangodb/pkg/util/errors"
45-
"github.com/arangodb/kube-arangodb/pkg/util/globals"
46-
operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http"
4755
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
4856
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
4957
"github.com/arangodb/kube-arangodb/pkg/util/probe"
5058
"github.com/arangodb/kube-arangodb/pkg/util/retry"
51-
"github.com/arangodb/kube-arangodb/pkg/version"
52-
53-
"github.com/gin-gonic/gin"
5459
"github.com/pkg/errors"
5560
"github.com/rs/zerolog"
56-
"github.com/rs/zerolog/log"
5761
"github.com/spf13/cobra"
5862
flag "github.com/spf13/pflag"
5963
appsv1 "k8s.io/api/apps/v1"
@@ -83,14 +87,15 @@ const (
8387
)
8488

8589
var (
90+
logger = logging.Global().RegisterAndGetLogger("root", logging.Info)
91+
eventRecorder = logging.Global().RegisterAndGetLogger("root-event-recorder", logging.Info)
92+
8693
cmdMain = cobra.Command{
8794
Use: "arangodb_operator",
8895
Run: executeMain,
8996
}
9097

9198
logLevels []string
92-
cliLog = logging.NewRootLogger()
93-
logService logging.Service
9499
serverOptions struct {
95100
host string
96101
port int
@@ -157,13 +162,14 @@ func init() {
157162
f.StringVar(&serverOptions.tlsSecretName, "server.tls-secret-name", "", "Name of secret containing tls.crt & tls.key for HTTPS server (if empty, self-signed certificate is used)")
158163
f.StringVar(&serverOptions.adminSecretName, "server.admin-secret-name", defaultAdminSecretName, "Name of secret containing username + password for login to the dashboard")
159164
f.BoolVar(&serverOptions.allowAnonymous, "server.allow-anonymous-access", false, "Allow anonymous access to the dashboard")
160-
f.StringArrayVar(&logLevels, "log.level", []string{defaultLogLevel}, fmt.Sprintf("Set log levels in format <level> or <logger>=<level>. Possible loggers: %s", strings.Join(logging.LoggerNames(), ", ")))
165+
f.StringArrayVar(&logLevels, "log.level", []string{defaultLogLevel}, fmt.Sprintf("Set log levels in format <level> or <logger>=<level>. Possible loggers: %s", strings.Join(logging.Global().Names(), ", ")))
161166
f.BoolVar(&operatorOptions.enableDeployment, "operator.deployment", false, "Enable to run the ArangoDeployment operator")
162167
f.BoolVar(&operatorOptions.enableDeploymentReplication, "operator.deployment-replication", false, "Enable to run the ArangoDeploymentReplication operator")
163168
f.BoolVar(&operatorOptions.enableStorage, "operator.storage", false, "Enable to run the ArangoLocalStorage operator")
164169
f.BoolVar(&operatorOptions.enableBackup, "operator.backup", false, "Enable to run the ArangoBackup operator")
165170
f.BoolVar(&operatorOptions.enableApps, "operator.apps", false, "Enable to run the ArangoApps operator")
166171
f.BoolVar(&operatorOptions.enableK2KClusterSync, "operator.k2k-cluster-sync", false, "Enable to run the ListSimple operator")
172+
f.MarkDeprecated("operator.k2k-cluster-sync", "Enabled within deployment operator")
167173
f.BoolVar(&operatorOptions.versionOnly, "operator.version", false, "Enable only version endpoint in Operator")
168174
f.StringVar(&operatorOptions.alpineImage, "operator.alpine-image", UBIImageEnv.GetOrDefault(defaultAlpineImage), "Docker image used for alpine containers")
169175
f.MarkDeprecated("operator.alpine-image", "Value is not used anymore")
@@ -205,9 +211,6 @@ func executeUsage(cmd *cobra.Command, args []string) {
205211

206212
// Run the operator
207213
func executeMain(cmd *cobra.Command, args []string) {
208-
// Set global logger
209-
log.Logger = logging.NewRootLogger()
210-
211214
// Get environment
212215
namespace := os.Getenv(constants.EnvOperatorPodNamespace)
213216
name := os.Getenv(constants.EnvOperatorPodName)
@@ -228,79 +231,82 @@ func executeMain(cmd *cobra.Command, args []string) {
228231

229232
// Prepare log service
230233
var err error
231-
if err := logging.InitGlobalLogger(defaultLogLevel, logLevels); err != nil {
232-
cliLog.Fatal().Err(err).Msg("Failed to initialize log service")
234+
235+
levels, err := logging.ParseLogLevelsFromArgs(logLevels)
236+
if err != nil {
237+
logger.Err(err).Fatal("Unable to parse log level")
233238
}
234239

235-
logService = logging.GlobalLogger()
240+
logging.Global().ApplyLogLevels(levels)
236241

237-
logService.ConfigureRootLogger(func(log zerolog.Logger) zerolog.Logger {
238-
podNameParts := strings.Split(name, "-")
239-
operatorID := podNameParts[len(podNameParts)-1]
240-
cliLog = cliLog.With().Str("operator-id", operatorID).Logger()
241-
return log.With().Str("operator-id", operatorID).Logger()
242+
podNameParts := strings.Split(name, "-")
243+
operatorID := podNameParts[len(podNameParts)-1]
244+
logging.Global().RegisterWrappers(func(in *zerolog.Event) *zerolog.Event {
245+
return in.Str("operator-id", operatorID)
242246
})
243247

244-
klog.SetOutput(logService.MustGetLogger(logging.LoggerNameKLog))
248+
kl := logging.Global().RegisterAndGetLogger("klog", logging.Info)
249+
250+
klog.SetOutput(kl.InfoIO())
245251
klog.Info("nice to meet you")
246252
klog.Flush()
247253

248254
// Check operating mode
249255
if !operatorOptions.enableDeployment && !operatorOptions.enableDeploymentReplication && !operatorOptions.enableStorage &&
250256
!operatorOptions.enableBackup && !operatorOptions.enableApps && !operatorOptions.enableK2KClusterSync {
251257
if !operatorOptions.versionOnly {
252-
cliLog.Fatal().Err(err).Msg("Turn on --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync or any combination of these")
258+
logger.Err(err).Fatal("Turn on --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync or any combination of these")
253259
}
254260
} else if operatorOptions.versionOnly {
255-
cliLog.Fatal().Err(err).Msg("Options --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync cannot be enabled together with --operator.version")
261+
logger.Err(err).Fatal("Options --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync cannot be enabled together with --operator.version")
256262
}
257263

258264
// Log version
259-
cliLog.Info().
265+
logger.
260266
Str("pod-name", name).
261267
Str("pod-namespace", namespace).
262-
Msgf("Starting arangodb-operator (%s), version %s build %s", version.GetVersionV1().Edition.Title(), version.GetVersionV1().Version, version.GetVersionV1().Build)
268+
Info("Starting arangodb-operator (%s), version %s build %s", version.GetVersionV1().Edition.Title(), version.GetVersionV1().Version, version.GetVersionV1().Build)
263269

264270
// Check environment
265271
if !operatorOptions.versionOnly {
266272
if len(namespace) == 0 {
267-
cliLog.Fatal().Msgf("%s environment variable missing", constants.EnvOperatorPodNamespace)
273+
logger.Fatal("%s environment variable missing", constants.EnvOperatorPodNamespace)
268274
}
269275
if len(name) == 0 {
270-
cliLog.Fatal().Msgf("%s environment variable missing", constants.EnvOperatorPodName)
276+
logger.Fatal("%s environment variable missing", constants.EnvOperatorPodName)
271277
}
272278
if len(ip) == 0 {
273-
cliLog.Fatal().Msgf("%s environment variable missing", constants.EnvOperatorPodIP)
279+
logger.Fatal("%s environment variable missing", constants.EnvOperatorPodIP)
274280
}
275281

276282
// Get host name
277283
id, err := os.Hostname()
278284
if err != nil {
279-
cliLog.Fatal().Err(err).Msg("Failed to get hostname")
285+
logger.Err(err).Fatal("Failed to get hostname")
280286
}
281287

282288
client, ok := kclient.GetDefaultFactory().Client()
283289
if !ok {
284-
cliLog.Fatal().Msg("Failed to get client")
290+
logger.Fatal("Failed to get client")
285291
}
286292

287293
if crdOptions.install {
288294
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
289295
defer cancel()
290296

291-
crd.EnsureCRD(ctx, logService.MustGetLogger("crd"), client)
297+
crd.EnsureCRD(ctx, client)
292298
}
293299

294300
secrets := client.Kubernetes().CoreV1().Secrets(namespace)
295301

296302
// Create operator
297303
cfg, deps, err := newOperatorConfigAndDeps(id+"-"+name, namespace, name)
298304
if err != nil {
299-
cliLog.Fatal().Err(err).Msg("Failed to create operator config & deps")
305+
logger.Err(err).Fatal("Failed to create operator config & deps")
300306
}
301307
o, err := operator.NewOperator(cfg, deps)
302308
if err != nil {
303-
cliLog.Fatal().Err(err).Msg("Failed to create operator")
309+
logger.Err(err).Fatal("Failed to create operator")
304310
}
305311

306312
listenAddr := net.JoinHostPort(serverOptions.host, strconv.Itoa(serverOptions.port))
@@ -314,7 +320,6 @@ func executeMain(cmd *cobra.Command, args []string) {
314320
AdminSecretName: serverOptions.adminSecretName,
315321
AllowAnonymous: serverOptions.allowAnonymous,
316322
}, server.Dependencies{
317-
Log: logService.MustGetLogger(logging.LoggerNameServer),
318323
LivenessProbe: &livenessProbe,
319324
Deployment: server.OperatorDependency{
320325
Enabled: cfg.EnableDeployment,
@@ -344,9 +349,9 @@ func executeMain(cmd *cobra.Command, args []string) {
344349

345350
Secrets: secrets,
346351
}); err != nil {
347-
cliLog.Fatal().Err(err).Msg("Failed to create HTTP server")
352+
logger.Err(err).Fatal("Failed to create HTTP server")
348353
} else {
349-
go utilsError.LogError(cliLog, "error while starting service", svr.Run)
354+
go utilsError.LogError(logger, "error while starting service", svr.Run)
350355
}
351356

352357
// startChaos(context.Background(), cfg.KubeCli, cfg.Namespace, chaosLevel)
@@ -355,15 +360,15 @@ func executeMain(cmd *cobra.Command, args []string) {
355360
o.Run()
356361
} else {
357362
if err := startVersionProcess(); err != nil {
358-
cliLog.Fatal().Err(err).Msg("Failed to create HTTP server")
363+
logger.Err(err).Fatal("Failed to create HTTP server")
359364
}
360365
}
361366
}
362367

363368
func startVersionProcess() error {
364369
// Just expose version
365370
listenAddr := net.JoinHostPort(serverOptions.host, strconv.Itoa(serverOptions.port))
366-
cliLog.Info().Str("addr", listenAddr).Msgf("Starting version endpoint")
371+
logger.Str("addr", listenAddr).Info("Starting version endpoint")
367372

368373
gin.SetMode(gin.ReleaseMode)
369374
r := gin.New()
@@ -396,7 +401,7 @@ func newOperatorConfigAndDeps(id, namespace, name string) (operator.Config, oper
396401
return operator.Config{}, operator.Dependencies{}, errors.WithStack(fmt.Errorf("Failed to get my pod's service account: %s", err))
397402
}
398403

399-
eventRecorder := createRecorder(cliLog, client.Kubernetes(), name, namespace)
404+
eventRecorder := createRecorder(client.Kubernetes(), name, namespace)
400405

401406
scope, ok := scope.AsScope(operatorOptions.scope)
402407
if !ok {
@@ -424,7 +429,6 @@ func newOperatorConfigAndDeps(id, namespace, name string) (operator.Config, oper
424429
ShutdownTimeout: shutdownOptions.timeout,
425430
}
426431
deps := operator.Dependencies{
427-
LogService: logService,
428432
Client: client,
429433
EventRecorder: eventRecorder,
430434
LivenessProbe: &livenessProbe,
@@ -446,10 +450,10 @@ func getMyPodInfo(kubecli kubernetes.Interface, namespace, name string) (string,
446450
op := func() error {
447451
pod, err := kubecli.CoreV1().Pods(namespace).Get(context.Background(), name, metav1.GetOptions{})
448452
if err != nil {
449-
cliLog.Error().
453+
logger.
450454
Err(err).
451455
Str("name", name).
452-
Msg("Failed to get operator pod")
456+
Error("Failed to get operator pod")
453457
return errors.WithStack(err)
454458
}
455459
sa = pod.Spec.ServiceAccountName
@@ -468,10 +472,10 @@ func getMyPodInfo(kubecli kubernetes.Interface, namespace, name string) (string,
468472
return image, sa, nil
469473
}
470474

471-
func createRecorder(log zerolog.Logger, kubecli kubernetes.Interface, name, namespace string) record.EventRecorder {
475+
func createRecorder(kubecli kubernetes.Interface, name, namespace string) record.EventRecorder {
472476
eventBroadcaster := record.NewBroadcaster()
473477
eventBroadcaster.StartLogging(func(format string, args ...interface{}) {
474-
log.Info().Msgf(format, args...)
478+
eventRecorder.Info(format, args...)
475479
})
476480
eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubecli.CoreV1().RESTClient()).Events(namespace)})
477481
combinedScheme := runtime.NewScheme()

0 commit comments

Comments
 (0)