code: private Document parse(final String data) {
      if (docBuilder == null || data == null) {
        return null;
      }
      Document document = null;
  
      try {
        // we change the system ID to a valid URI so that Crimson won't
        // complain. Indeed, "log4j.dtd" alone is not a valid URI which
        // causes Crimson to barf. The Log4jEntityResolver only cares
        // about the "log4j.dtd" ending.
  
        /**
         * resetting the length of the StringBuffer is dangerous, particularly
         * on some JDK 1.4 impls, there's a known Bug that causes a memory leak
         */
        StringBuffer buf = new StringBuffer(1024);
  
        buf.append(BEGINPART);
        buf.append(data);
        buf.append(ENDPART);
  
        InputSource inputSource =
          new InputSource(new StringReader(buf.toString()));
        document = docBuilder.parse(inputSource);
      } catch (Exception e) {
        e.printStackTrace();
      }
  
      return document;
    }
docs: Converts the LoggingEvent data in XML string format into an actual
  XML Document class instance.
  @param data XML fragment
  @return dom document