code: private static void publish(Logger logger, LogRecord record) {
      // Annoyingly this method appears to copy the array every time it is called, but there's
      // nothing much we can do about this (and there could be synchronization issues even if we
      // could access things directly because handlers can be changed at any time). Most of the
      // time this returns the singleton empty array however, so it's not as bad as all that.
      for (Handler handler : logger.getHandlers()) {
        handler.publish(record);
      }
      if (logger.getUseParentHandlers()) {
        logger = logger.getParent();
        if (logger != null) {
          publish(logger, record);
        }
      }
    }
docs: rate limiting. Thus we don't have to care about using iterative methods vs recursion here.