@Override
    public ColocationLogger startColocationLogger(PartitionedRegion region) {
      Function<PartitionedRegion, Set<String>> allColocationRegionsProvider =
          pr -> getAllColocationRegions(pr).keySet();
      ExecutorService executorService = Executors.newSingleThreadExecutor(
          runnable -> new LoggingThread("ColocationLogger for " + region.getName(), false,
              runnable));
      Consumer<String> spyLogger = SpyLogger.spy();
      assertThat(spyLogger).isNotNull();
      return new SingleThreadColocationLogger(region, 1000, 1000, spyLogger,
          allColocationRegionsProvider, executorService).start();
    }
The colocation tree has the regions started in a specific order so that the logging is
predictable. For each entry in the list, the array values are:

<pre>
  [0] - the region name
  [1] - the name of that region's parent
  [2] - the number of warnings that will be logged after the region is created (1 warning for
        each region in the tree that exists that still has 1 or more missing children.)
</pre>
geode-core/src/distributedTest/java/org/apache/geode/internal/cache/partitioned/PersistentColocatedPartitionedRegionDistributedTest.java