9
9
"strconv"
10
10
"strings"
11
11
12
+ "github.com/go-logr/zapr"
12
13
"go.uber.org/zap"
13
14
"k8s.io/apimachinery/pkg/runtime"
14
15
"k8s.io/apimachinery/pkg/types"
@@ -25,6 +26,7 @@ import (
25
26
localruntime "runtime"
26
27
ctrl "sigs.k8s.io/controller-runtime"
27
28
runtime_cluster "sigs.k8s.io/controller-runtime/pkg/cluster"
29
+ kubelog "sigs.k8s.io/controller-runtime/pkg/log"
28
30
metricsServer "sigs.k8s.io/controller-runtime/pkg/metrics/server"
29
31
crWebhook "sigs.k8s.io/controller-runtime/pkg/webhook"
30
32
@@ -275,13 +277,7 @@ func setupWebhook(ctx context.Context, cfg *rest.Config, log *zap.SugaredLogger,
275
277
}
276
278
277
279
func initializeEnvironment () {
278
- omOperatorEnv := os .Getenv (util .OmOperatorEnv )
279
- configuredEnv := omOperatorEnv
280
- if ! validateEnv (omOperatorEnv ) {
281
- omOperatorEnv = operatorEnvironments [0 ]
282
- }
283
-
284
- initLogger (omOperatorEnv )
280
+ omOperatorEnv , configuredEnv := getOperatorEnvs ()
285
281
286
282
if configuredEnv != omOperatorEnv {
287
283
log .Infof ("Configured environment %s, not recognized. Must be one of %v" , configuredEnv , operatorEnvironments )
@@ -320,6 +316,15 @@ func initializeEnvironment() {
320
316
env .PrintWithPrefix (printableEnvPrefixes )
321
317
}
322
318
319
+ func getOperatorEnvs () (string , string ) {
320
+ omOperatorEnv := os .Getenv (util .OmOperatorEnv )
321
+ configuredEnv := omOperatorEnv
322
+ if ! validateEnv (omOperatorEnv ) {
323
+ omOperatorEnv = operatorEnvironments [0 ]
324
+ }
325
+ return omOperatorEnv , configuredEnv
326
+ }
327
+
323
328
// quoteKey reports whether key is required to be quoted. Taken from: 1.22.0 mod.go
324
329
func quoteKey (key string ) bool {
325
330
return len (key ) == 0 || strings .ContainsAny (key , "= \t \r \n \" `" )
@@ -360,22 +365,41 @@ func validateEnv(env string) bool {
360
365
return stringutil .Contains (operatorEnvironments [:], env )
361
366
}
362
367
363
- func initLogger (env string ) {
368
+ func init () {
369
+ InitGlobalLogger ()
370
+ }
371
+
372
+ func InitGlobalLogger () {
373
+ omOperatorEnv , _ := getOperatorEnvs ()
374
+
364
375
var logger * zap.Logger
365
376
var e error
366
377
367
- switch env {
378
+ switch omOperatorEnv {
368
379
case "prod" :
369
380
logger , e = zap .NewProduction ()
370
381
case "dev" , "local" :
371
382
// Overriding the default stacktrace behavior - have them only for errors but not for warnings
372
383
logger , e = zap .NewDevelopment (zap .AddStacktrace (zap .ErrorLevel ))
384
+ default :
385
+ // if for some reason we didn't set a logger, let's be safe and default to prod
386
+ fmt .Println ("No OPERATOR_ENV set, defaulting setting logger to prod" )
387
+ logger , e = zap .NewProduction ()
373
388
}
374
389
375
390
if e != nil {
376
391
fmt .Println ("Failed to create logger, will use the default one" )
377
392
fmt .Println (e )
393
+ // in the worst case logger might stay nil, replacing everything with a nil logger,
394
+ // we don't want that
395
+ logger = zap .S ().Desugar ()
378
396
}
397
+
398
+ // Set the global logger used by our operator
379
399
zap .ReplaceGlobals (logger )
400
+ // Set the logger for controller-runtime based on the general level of the operator
401
+ kubelog .SetLogger (zapr .NewLogger (logger ))
402
+
403
+ // Set the logger used by main.go
380
404
log = zap .S ()
381
405
}
0 commit comments