in pkg/log/logger.go [232:283]
func initLoggingConfig(config map[string]string) {
levelMap := make(map[string]zapcore.Level)
levelMap[nullLogger] = zapcore.InfoLevel
zapLoggers := make([]*zap.Logger, len(loggers))
// override default level if found (log.level key)
if defaultLevel, ok := config[defaultLog]; ok {
if levelRef := parseLevel(defaultLevel); levelRef != nil {
levelMap[nullLogger] = *levelRef
}
}
// parse out log entries and build level map
for k, v := range config {
// disallow spaces and periods
if strings.Contains(k, "..") || strings.Contains(k, " ") {
continue
}
// ensure config key starts with "log."
name, ok := strings.CutPrefix(k, logPrefix)
if !ok {
continue
}
// ensure config key ends with ".level"
name, ok = strings.CutSuffix(name, levelSuffix)
if !ok {
continue
}
// if value is a valid log level, store it in the level map
if levelRef := parseLevel(v); levelRef != nil {
levelMap[name] = *levelRef
}
}
// compute the finest log level necessary to allow all loggers to succeed
minLevel := zapcore.InvalidLevel - 1
for _, v := range levelMap {
minLevel = min(v, minLevel)
}
// create each configured logger and initialize the overall configuration
for i := 0; i < len(loggers); i++ {
zapLoggers[i] = createLogger(levelMap, loggers[i].name)
}
newLoggerConfig := loggerConfig{loggers: zapLoggers}
// update the root zap logger level
zapConfigs.Level.SetLevel(minLevel)
// atomically update the set of loggers
currentLoggerConfig.Store(&newLoggerConfig)
}