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  }