public void initialize() { super.initialize(); log4JProperties = new Properties(); Map configuredAppenders = new HashMap(); if (appenders == null || appenders.size() == 0) { if (defaultAppender != null) { throw new IllegalArgumentException( "A default appender cant be specified without any appenders configured."); } defaultAppender = "anonymous"; log4JProperties.setProperty("log4j.appender.anonymous", "org.apache.log4j.ConsoleAppender"); log4JProperties.setProperty("log4j.appender.anonymous.threshold", getThresholdAsString()); log4JProperties.setProperty( "log4j.appender.anonymous.layout", "org.apache.log4j.PatternLayout"); log4JProperties.setProperty( "log4j.appender.anonymous.layout.conversionPattern", "%-4r [%t] %-5p %c %x - %m%n"); } else { for (int i = 0; i < appenders.size(); i++) { Appender appender = (Appender) appenders.get(i); String id = appender.getId(); if (configuredAppenders.containsKey(id)) { throw new IllegalArgumentException( "There already exists a appender with the id '" + id + "'."); } if (id == null) { throw new IllegalArgumentException("The appender must have a id."); } if (appender.getThreshold() == null) { appender.setThreshold(getThresholdAsString()); } if (appender.getConversionPattern() == null) { throw new IllegalArgumentException("The appender must have a conversion pattern."); } if (appender.getType() == null) { throw new IllegalArgumentException("The appender must have a type."); } try { Class.forName(appender.getType()); } catch (ClassNotFoundException ex) { throw new IllegalArgumentException( "Could not find the appender class: " + appender.getType(), ex); } catch (LinkageError ex) { throw new IllegalArgumentException( "Could load the appender class: " + appender.getType(), ex); } String base = "log4j.appender." + id; log4JProperties.setProperty(base, appender.getType()); log4JProperties.setProperty(base + ".threshold", appender.getThreshold()); log4JProperties.setProperty(base + ".layout", "org.apache.log4j.PatternLayout"); log4JProperties.setProperty( base + ".layout.conversionPattern", appender.getConversionPattern()); Enumeration e = appender.getProperties().keys(); while (e.hasMoreElements()) { String key = e.nextElement().toString(); log4JProperties.setProperty(base + "." + key, appender.getProperty(key)); if ("file".equals(key)) { File logFile = new File(appender.getProperty(key)); File logDir = logFile.getParentFile(); if (!logDir.exists()) { logDir.mkdirs(); } } } configuredAppenders.put(id, appender); } if (defaultAppender == null) { if (configuredAppenders.size() == 1) { defaultAppender = ((Appender) appenders.get(0)).getId(); } else { throw new IllegalArgumentException( "A default appender must be specified when having several appenders."); } } else { StringTokenizer tokenizer = new StringTokenizer(defaultAppender, ","); while (tokenizer.hasMoreTokens()) { String appender = tokenizer.nextToken(); if (!configuredAppenders.containsKey(appender)) { throw new IllegalArgumentException( "Could not find the default appender: '" + defaultAppender + "'."); } } } } if (levels != null && levels.size() > 0) { for (Iterator it = levels.iterator(); it.hasNext(); ) { Level level = (Level) it.next(); log4JProperties.put("log4j.logger." + level.getHierarchy(), level.getLevel()); } } if (getThresholdAsString() == null) { throw new IllegalArgumentException("INTERNAL ERROR: The threshold must be set."); } if (defaultAppender == null) { throw new IllegalArgumentException("INTERNAL ERROR: The default appender must be set."); } log4JProperties.setProperty("log4j.rootLogger", getThresholdAsString() + "," + defaultAppender); }