docs: public void getTraceSummaryLine(StringBuilder buff) {
      super.getTraceSummaryLine(buff);
      
      buff.append(",subMsgType=");
      buff.append(getSubscriptionMessageType());
  
      List topics = getTopics();
      buff.append(",topicCount=");
      buff.append(topics.size());
      
      // As we may have a lot of topics, with a lot of duplication of topic space
      // and mapping, we need to condense the topic output. The following form is chosen:
      // topics=[my/topic1|0|1,my/topic2|0|2],0=Topic.Space.1,1=Topic.Space.2,2=Topic.Space.3
      //
      // Even condensed there's a concern the output could get too large, so it's limited to around 4KB
      Iterator tIterator = topics.iterator();
      Iterator tsIterator = getTopicSpaces().iterator();
      Iterator tsmIterator = getTopicSpaceMappings().iterator();
      // We use a list, not a map, for the list of unique names. This is because
      // we expect this list to be small, and want to keep it in order without
      // the overhead of a sorted map.
      ArrayList<String> uniqueNames = new ArrayList<String>();
      
      // Iterate through the topics
      buff.append(",topics=[");
      while(tIterator.hasNext()) {
        String topic = String.valueOf(tIterator.next());
        
        // Get integer keys for the string topicSpace/topicSpaceMapping values, coping with nulls
        int tsInteger  = getIntKeyForString(uniqueNames, tsIterator.hasNext()?tsIterator.next():null);
        int tsmInteger = getIntKeyForString(uniqueNames, tsmIterator.hasNext()?tsmIterator.next():null);
        
        // Append a compressed version of the topic + mapping
        buff.append(topic);
        buff.append('|');
        buff.append(tsInteger);
        buff.append('|');
        buff.append(tsmInteger);
        
        // Break out of the loop if it looks like we're going to
        // produce a dangerously large amount of output on the line.
        if (buff.length() > 4000) {
          buff.append(",..."); // We've already printed the count
          break;
        }
        
        // Append a separator if we're going round again
        if (tIterator.hasNext()) buff.append(',');
      }
      buff.append(']');
      
      // Append the unique topic space names with their integer values
      for (int i = 0; i < uniqueNames.size(); i++) {
        buff.append(',');
        buff.append(i);
        buff.append('=');
        buff.append(uniqueNames.get(i));
      }
      
      buff.append(",meName=");
      buff.append(getMEName());
      
      buff.append(",meUuid=");
      buff.append(new SIBUuid8(getMEUUID()));
      
      buff.append(",busName=");
      buff.append(getBusName());
      
    }