示例#1
0
  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);
  }