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; }