Пример #1
0
  @SuppressWarnings("unchecked")
  public String format(final LogRecord record) {
    // Reset working buffer. If the buffer is too large, then we need a new
    // one in order to avoid the penalty of creating a large array.
    if (buf.capacity() > UPPER_LIMIT) {
      buf = new StringBuffer(DEFAULT_SIZE);
    } else {
      buf.setLength(0);
    }
    buf.append("<log4j:event logger=\"");
    buf.append(Transform.escapeTags(record.getLoggerName()));
    buf.append("\" timestamp=\"");
    buf.append(record.getMillis());
    buf.append("\" level=\"");

    buf.append(Transform.escapeTags(record.getLevel().getName()));
    buf.append("\" thread=\"");
    buf.append(String.valueOf(record.getThreadID()));
    buf.append("\">\r\n");

    buf.append("<log4j:message><![CDATA[");
    // Append the rendered message. Also make sure to escape any
    // existing CDATA sections.
    Transform.appendEscapingCDATA(buf, record.getMessage());
    buf.append("]]></log4j:message>\r\n");

    if (record.getThrown() != null) {
      String[] s = Transform.getThrowableStrRep(record.getThrown());
      if (s != null) {
        buf.append("<log4j:throwable><![CDATA[");
        for (String value : s) {
          Transform.appendEscapingCDATA(buf, value);
          buf.append("\r\n");
        }
        buf.append("]]></log4j:throwable>\r\n");
      }
    }

    if (locationInfo) {
      buf.append("<log4j:locationInfo class=\"");
      buf.append(Transform.escapeTags(record.getSourceClassName()));
      buf.append("\" method=\"");
      buf.append(Transform.escapeTags(record.getSourceMethodName()));
      buf.append("\" file=\"?\" line=\"?\"/>\r\n");
    }

    if (properties) {
      if (MDC.getMDCAdapter() instanceof BasicMDCAdapter) {
        BasicMDCAdapter mdcAdapter = (BasicMDCAdapter) MDC.getMDCAdapter();
        Set keySet = mdcAdapter.getKeys();
        if (keySet != null && keySet.size() > 0) {
          buf.append("<log4j:properties>\r\n");
          Object[] keys = keySet.toArray();
          Arrays.sort(keys);
          for (Object key1 : keys) {
            String key = key1.toString();
            Object val = mdcAdapter.get(key);
            if (val != null) {
              buf.append("<log4j:data name=\"");
              buf.append(Transform.escapeTags(key));
              buf.append("\" value=\"");
              buf.append(Transform.escapeTags(String.valueOf(val)));
              buf.append("\"/>\r\n");
            }
          }
          buf.append("</log4j:properties>\r\n");
        }
      }
    }
    buf.append("</log4j:event>\r\n\r\n");

    return buf.toString();
  }