craigcondit commented on code in PR #611:
URL: https://github.com/apache/yunikorn-k8shim/pull/611#discussion_r1231395464


##########
pkg/log/logger.go:
##########
@@ -30,12 +33,95 @@ var once sync.Once
 var logger *zap.Logger
 var zapConfigs *zap.Config
 
+// LoggerHandle is used to efficiently look up logger references
+type LoggerHandle struct {
+       id   int
+       name string
+}
+
+func (h LoggerHandle) String() string {
+       return h.name
+}
+
+// Logger constants for configuration
+const (
+       defaultLog  = "log.level"
+       logPrefix   = "log."
+       levelSuffix = ".level"
+)
+
+// Predefined loggers: when adding new loggers, ids must be sequential, and 
all must be added to the loggers slice in the same order
+
+var K8Shim = &LoggerHandle{id: 1, name: "k8shim"}
+var Kubernetes = &LoggerHandle{id: 2, name: "kubernetes"}
+var Admission = &LoggerHandle{id: 3, name: "admission"}
+var Test = &LoggerHandle{id: 4, name: "test"}
+
+var loggers = []*LoggerHandle{
+       K8Shim,
+       Kubernetes,
+       Admission,
+       Test,
+}
+
+type loggerConfig struct {
+       loggers []*zap.Logger
+}
+
+var currentLoggerConfig = atomic.Pointer[loggerConfig]{}
+var defaultLogger = atomic.Pointer[LoggerHandle]{}
+
+// Logger retrieves the global logger
 func Logger() *zap.Logger {
+       once.Do(initLogger)
+       return Log(defaultLogger.Load())
+}
+
+// RootLogger retrieves the root logger
+func RootLogger() *zap.Logger {
        once.Do(initLogger)
        return logger
 }
 
+// Log retrieves a standard logger
+func Log(handle *LoggerHandle) *zap.Logger {
+       once.Do(initLogger)
+       if handle == nil || handle.id == 0 {
+               handle = defaultLogger.Load()
+       }
+       conf := currentLoggerConfig.Load()
+       return conf.loggers[handle.id-1]
+}
+
+func createLogger(levelMap map[string]zapcore.Level, name string) *zap.Logger {
+       level := loggerLevel(levelMap, name)
+       return logger.Named(name).WithOptions(zap.WrapCore(func(inner 
zapcore.Core) zapcore.Core {
+               return filteredCore{inner: inner, level: level}
+       }))
+}
+
+func loggerLevel(levelMap map[string]zapcore.Level, name string) zapcore.Level 
{

Review Comment:
   Added extensive comments throughout.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to