code: protected
    void parseCategoryFactory(Element factoryElement) {
      String className = subst(factoryElement.getAttribute(CLASS_ATTR));
  
      if(EMPTY_STR.equals(className)) {
        LogLog.error("Category Factory tag " + CLASS_ATTR + " attribute not found.");
        LogLog.debug("No Category Factory configured.");
      }
      else {
        LogLog.debug("Desired category factory: ["+className+']');
        Object factory = OptionConverter.instantiateByClassName(className,
                                                                   LoggerFactory.class, 
                                                                   null);
        if (factory instanceof LoggerFactory) {
            catFactory = (LoggerFactory) factory;
        } else {
            LogLog.error("Category Factory class " + className + " does not implement org.apache.log4j.LoggerFactory");
        }
        PropertySetter propSetter = new PropertySetter(factory);
  
        Element  currentElement = null;
        Node     currentNode    = null;
        NodeList children       = factoryElement.getChildNodes();
        final int length        = children.getLength();
  
        for (int loop=0; loop < length; loop++) {
          currentNode = children.item(loop);
  	if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
  	  currentElement = (Element)currentNode;
  	  if (currentElement.getTagName().equals(PARAM_TAG)) {
  	    setParameter(currentElement, propSetter);
  	  } else {
             quietParseUnrecognizedElement(factory, currentElement, props);
        }
  	}
        }
      }
    }
docs: Used internally to parse the category factory element.