Esempio n. 1
0
  private void appendStructuredElements(final StringBuilder buffer, final LogEvent event) {
    final Message message = event.getMessage();
    final boolean isStructured = message instanceof StructuredDataMessage;

    if (!isStructured && (fieldFormatters != null && fieldFormatters.isEmpty()) && !includeMdc) {
      buffer.append('-');
      return;
    }

    final Map<String, StructuredDataElement> sdElements =
        new HashMap<String, StructuredDataElement>();
    final Map<String, String> contextMap = event.getContextMap();

    if (mdcRequired != null) {
      checkRequired(contextMap);
    }

    if (fieldFormatters != null) {
      for (final Map.Entry<String, FieldFormatter> sdElement : fieldFormatters.entrySet()) {
        final String sdId = sdElement.getKey();
        final StructuredDataElement elem = sdElement.getValue().format(event);
        sdElements.put(sdId, elem);
      }
    }

    if (includeMdc && contextMap.size() > 0) {
      if (sdElements.containsKey(mdcSdId.toString())) {
        final StructuredDataElement union = sdElements.get(mdcSdId.toString());
        union.union(contextMap);
        sdElements.put(mdcSdId.toString(), union);
      } else {
        final StructuredDataElement formattedContextMap =
            new StructuredDataElement(contextMap, false);
        sdElements.put(mdcSdId.toString(), formattedContextMap);
      }
    }

    if (isStructured) {
      final StructuredDataMessage data = (StructuredDataMessage) message;
      final Map<String, String> map = data.getData();
      final StructuredDataId id = data.getId();
      final String sdId = getId(id);

      if (sdElements.containsKey(sdId)) {
        final StructuredDataElement union = sdElements.get(id.toString());
        union.union(map);
        sdElements.put(sdId, union);
      } else {
        final StructuredDataElement formattedData = new StructuredDataElement(map, false);
        sdElements.put(sdId, formattedData);
      }
    }

    if (sdElements.isEmpty()) {
      buffer.append('-');
      return;
    }

    for (final Map.Entry<String, StructuredDataElement> entry : sdElements.entrySet()) {
      formatStructuredElement(entry.getKey(), mdcPrefix, entry.getValue(), buffer, checker);
    }
  }