private RemovalListener<K, V> createRemovalListener() {
        // Wrap the supplied removalNotificationConsumer with a RemovalListener that
        // logs the reason for the removal
        return (key, value, cause) -> {
            final Supplier<String> messageSupplier = () -> "Removal notification for cache '" +
                                                           name +
                                                           "' (key=" +
                                                           key +
                                                           ", value=" +
                                                           value +
                                                           ", cause=" +
                                                           cause + ")";

            if (cause == RemovalCause.SIZE) {
                reachedSizeLimitCount.incrementAndGet();
                LOGGER.debug(() -> "Cache reached size limit '" + name + "'");
            }
            LOGGER.trace(messageSupplier);
            removalNotificationConsumer.accept(key, value);
        };
    }
Subclasses should implement this method to add to the cacheBuilder as required
and return a cache built from cacheBuilder. The builder already has a
removalNotificationConsumer if applicable and recordStats has been set.
stroom-cache/stroom-cache-impl/src/main/java/stroom/cache/impl/AbstractStroomCache.java