docs: public static final void xmlConfig(File configFile) throws IOException
      {
          try
          {
              JAXBContext jaxbCtx = JAXBContext.newInstance("org.vesalainen.util.jaxb");
              Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
              JavaLoggingConfig javaLoggingConfig = (JavaLoggingConfig) unmarshaller.unmarshal(configFile);
              Map<String,String> expressionMap = new HashMap<>();
              Properties properties = javaLoggingConfig.getProperties();
              if (properties != null)
              {
                  for (Element element : properties.getAny())
                  {
                      String property = element.getTagName();
                      String expression = element.getTextContent();
                      expressionMap.put(property, expression);
                  }
              }
              ExpressionParser ep = new ExpressionParser(expressionMap);
              for (LoggerType loggerType : javaLoggingConfig.getLogger())
              {
                  String name = ep.replace(loggerType.getName());
                  JavaLogging javaLogging = getLogger(name);
                  Logger logger = javaLogging.getLogger();
                  String lev = ep.replace(loggerType.getLevel());
                  Level level = lev != null ? BaseLogging.parseLevel(lev) : null;
                  if (level != null)
                  {
                      logger.setLevel(level);
                  }
                  logger.setUseParentHandlers(parseBoolean(ep.replace(loggerType.getUseParentHandlers())));
                  String resourceBundleString = ep.replace(loggerType.getResourceBundle());
                  if (resourceBundleString != null)
                  {
                      Locale locale;
                      String languageTag = ep.replace(loggerType.getLocale());
                      if (languageTag != null)
                      {
                          locale = Locale.forLanguageTag(languageTag);
                      }
                      else
                      {
                          locale = Locale.getDefault();
                      }
                      ResourceBundle resourceBundle = ResourceBundle.getBundle(resourceBundleString, locale);
                      logger.setResourceBundle(resourceBundle);
                  }
                  logger.setFilter(getInstance(ep.replace(loggerType.getFilter())));
                  for (ConsoleHandlerType consoleHandlerType : loggerType.getConsoleHandler())
                  {
                      logger.addHandler(createConsoleHandler(ep, consoleHandlerType, level));
                  }
                  for (FileHandlerType fileHandlerType : loggerType.getFileHandler())
                  {
                      logger.addHandler(createFileHandler(ep, fileHandlerType, level));
                  }
                  for (MemoryHandlerType memoryHandlerType : loggerType.getMemoryHandler())
                  {
                      logger.addHandler(createMemoryHandler(ep, memoryHandlerType, level));
                  }
                  for (SocketHandlerType socketHandlerType : loggerType.getSocketHandler())
                  {
                      logger.addHandler(createSocketHandler(ep, socketHandlerType, level));
                  }
              }
          }
          catch (JAXBException ex)
          {
              throw new RuntimeException(ex);
          }
      }