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]