void parseCatsAndRenderers()

in src/main/java/org/apache/log4j/PropertyConfigurator.java [658:701]


  void parseCatsAndRenderers(Properties props, LoggerRepository hierarchy) {
    Enumeration enumeration = props.propertyNames();
    while(enumeration.hasMoreElements()) {
      String key = (String) enumeration.nextElement();
      if(key.startsWith(CATEGORY_PREFIX) || key.startsWith(LOGGER_PREFIX)) {
	String loggerName = null;
	if(key.startsWith(CATEGORY_PREFIX)) {
	  loggerName = key.substring(CATEGORY_PREFIX.length());
	} else if(key.startsWith(LOGGER_PREFIX)) {
	  loggerName = key.substring(LOGGER_PREFIX.length());
	}
	String value =  OptionConverter.findAndSubst(key, props);
	Logger logger = hierarchy.getLogger(loggerName, loggerFactory);
	synchronized(logger) {
	  parseCategory(props, logger, key, loggerName, value);
	  parseAdditivityForLogger(props, logger, loggerName);
	}
      } else if(key.startsWith(RENDERER_PREFIX)) {
	String renderedClass = key.substring(RENDERER_PREFIX.length());
	String renderingClass = OptionConverter.findAndSubst(key, props);
	if(hierarchy instanceof RendererSupport) {
	  RendererMap.addRenderer((RendererSupport) hierarchy, renderedClass,
				  renderingClass);
	}
      } else if (key.equals(THROWABLE_RENDERER_PREFIX)) {
          if (hierarchy instanceof ThrowableRendererSupport) {
            ThrowableRenderer tr = (ThrowableRenderer)
                  OptionConverter.instantiateByKey(props,
                          THROWABLE_RENDERER_PREFIX,
                          org.apache.log4j.spi.ThrowableRenderer.class,
                          null);
            if(tr == null) {
                LogLog.error(
                    "Could not instantiate throwableRenderer.");
            } else {
                PropertySetter setter = new PropertySetter(tr);
                setter.setProperties(props, THROWABLE_RENDERER_PREFIX + ".");
                ((ThrowableRendererSupport) hierarchy).setThrowableRenderer(tr);

            }
          }
      }
    }
  }