github.com/verrazzano/verrazzano@v1.7.0/tools/vz/pkg/analysis/internal/util/log/log.go (about) 1 // Copyright (C) 2020, 2022, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 // Package log handles logging 5 package log 6 7 import ( 8 "os" 9 10 "go.uber.org/zap" 11 "go.uber.org/zap/zapcore" 12 logf "sigs.k8s.io/controller-runtime/pkg/log" 13 kzap "sigs.k8s.io/controller-runtime/pkg/log/zap" 14 ) 15 16 // InitLogs initializes logs with Time and Global Level of Logs set at Info 17 func InitLogs(opts kzap.Options) { 18 var config zap.Config 19 if opts.Development { 20 config = zap.NewDevelopmentConfig() 21 } else { 22 config = zap.NewProductionConfig() 23 } 24 if opts.Level != nil { 25 config.Level = opts.Level.(zap.AtomicLevel) 26 } else { 27 config.Level.SetLevel(zapcore.InfoLevel) 28 } 29 config.EncoderConfig.EncodeTime = zapcore.RFC3339TimeEncoder 30 config.EncoderConfig.TimeKey = "@timestamp" 31 config.EncoderConfig.MessageKey = "message" 32 logger, err := config.Build() 33 if err != nil { 34 zap.S().Errorf("Error creating logger %v", err) 35 } else { 36 zap.ReplaceGlobals(logger) 37 } 38 39 // Use a zap logr.Logger implementation. If none of the zap 40 // flags are configured (or if the zap flag set is not being 41 // used), this defaults to a production zap logger. 42 // 43 // The logger instantiated here can be changed to any logger 44 // implementing the logr.Logger interface. This logger will 45 // be propagated through the whole operator, generating 46 // uniform and structured logs. 47 encoder := zapcore.NewJSONEncoder(config.EncoderConfig) 48 logf.SetLogger(kzap.New(kzap.UseFlagOptions(&opts), kzap.Encoder(encoder))) 49 } 50 51 // GetDebugEnabledLogger Mostly useful for getting a debug enabled logger for unit tests 52 func GetDebugEnabledLogger() *zap.SugaredLogger { 53 atom := zap.NewAtomicLevel() 54 encoderCfg := zap.NewProductionEncoderConfig() 55 encoderCfg.TimeKey = "" 56 logger := zap.New(zapcore.NewCore( 57 zapcore.NewJSONEncoder(encoderCfg), 58 zapcore.Lock(os.Stdout), 59 atom, 60 )) 61 defer logger.Sync() 62 atom.SetLevel(zap.DebugLevel) 63 return logger.Sugar() 64 }