code: public void readConfiguration(InputStream ins) throws IOException {
          checkPermission();
          reset();
  
          // Load the properties
          Properties.loadLineReader(new Properties.LineReader(ins), props::put);
          if (ReflectionUtil.isJreReflectionStripped()) {
            reflectionStrippedProcessing();
          }
          // Instantiate new configuration objects.
          String names[] = parseClassNames("config");
  
          for (int i = 0; i < names.length; i++) {
              String word = names[i];
              try {
                  getClassInstance(word).newInstance();
              } catch (Exception ex) {
                  System.err.println("Can't load config class \"" + word + "\"");
                  System.err.println("" + ex);
                  // ex.printStackTrace();
              }
          }
  
          // Set levels on any pre-existing loggers, based on the new properties.
          setLevelsOnExistingLoggers();
  
          /* J2ObjC removed.
          // Notify any interested parties that our properties have changed.
          changes.firePropertyChange(null, null, null);
          */
  
          // Note that we need to reinitialize global handles when
          // they are first referenced.
          synchronized (this) {
              initializedGlobalHandlers = false;
          }
      }
docs: Reinitialize the logging properties and reread the logging configuration
  from the given stream, which should be in java.util.Properties format.
  A PropertyChangeEvent will be fired after the properties are read.
  <p>
  Any log level definitions in the new configuration file will be
  applied using Logger.setLevel(), if the target Logger exists.
  
  @param ins       stream to read properties from
  @exception  SecurityException  if a security manager exists and if
  the caller does not have LoggingPermission("control").
  @exception  IOException if there are problems reading from the stream.