コード例 #1
0
  private Handler configureHandler(final Properties properties, final String handlerName)
      throws IOException {
    if (configuredHandlers.containsKey(handlerName)) {
      return configuredHandlers.get(handlerName);
    }

    // Get handler class name, instantiate it
    final String handlerClassName = getStringProperty(properties, getKey("handler", handlerName));
    if (handlerClassName == null) {
      throw new IllegalArgumentException("Handler " + handlerName + " has no class name");
    }
    final Handler handler;
    try {
      handler = (Handler) Class.forName(handlerClassName).getConstructor().newInstance();
    } catch (Exception e) {
      throw new IllegalArgumentException(
          "Handler " + handlerName + " could not be instantiated", e);
    }
    configuredHandlers.put(handlerName, handler);

    // Get handler level
    final String levelName = getStringProperty(properties, getKey("handler", handlerName, "level"));
    if (levelName != null) {
      try {
        handler.setLevel(LogContext.getSystemLogContext().getLevelForName(levelName));
      } catch (IllegalArgumentException e) {
        System.err.printf("Failed to set level %s on %s: %s\n", levelName, handler, e.getMessage());
      }
    }

    // Get handler encoding
    final String encodingName =
        getStringProperty(properties, getKey("handler", handlerName, "encoding"));
    if (encodingName != null) {
      try {
        handler.setEncoding(encodingName);
      } catch (UnsupportedEncodingException e) {
        System.err.printf(
            "Failed to set encoding %s on %s: %s\n", encodingName, handler, e.getMessage());
      }
    }

    // Get error handler
    final String errorManagerName =
        getStringProperty(properties, getKey("handler", handlerName, "errorManager"));
    if (errorManagerName != null) {
      try {
        handler.setErrorManager(configureErrorManager(properties, errorManagerName));
      } catch (IllegalArgumentException e) {
        System.err.printf(
            "Failed to set error manager %s on %s: %s\n",
            errorManagerName, handler, e.getMessage());
      }
    }

    // Get filter
    final String filterName =
        getStringProperty(properties, getKey("handler", handlerName, "filter"));
    if (filterName != null) {
      try {
        handler.setFilter(configureFilter(properties, filterName));
      } catch (IllegalArgumentException e) {
        System.err.printf(
            "Failed to set filter %s on %s: %s\n", filterName, handler, e.getMessage());
      }
    }

    // Get formatter
    final String formatterName =
        getStringProperty(properties, getKey("handler", handlerName, "formatter"));
    if (formatterName != null) {
      try {
        handler.setFormatter(configureFormatter(properties, formatterName));
      } catch (IllegalArgumentException e) {
        System.err.printf(
            "Failed to set formatter %s on %s: %s\n", filterName, handler, e.getMessage());
      }
    }

    // Get properties
    configureProperties(properties, handler, getKey("handler", handlerName));

    return handler;
  }