private String itemToString(final DelayedRefreshable delayedRefreshable) {
        if (delayedRefreshable != null) {
            final Refreshable refreshable = delayedRefreshable.getRefreshable();
            return LogUtil.message("item {} ({}) of type {} from refresh queue, " +
                            "expireTime: {} ({}), expireTimeWithBuffer: {} ({}), queue size after: {}, " +
                            "item detail: {}",
                    System.identityHashCode(refreshable),
                    System.identityHashCode(delayedRefreshable),
                    refreshable.getClass().getSimpleName(),
                    LogUtil.instant(refreshable.getExpireTimeEpochMs()),
                    Duration.between(
                            Instant.now(),
                            Instant.ofEpochMilli(refreshable.getExpireTimeEpochMs())),
                    LogUtil.instant(refreshable.getExpireTimeWithBufferEpochMs(RefreshMode.EAGER)),
                    Duration.between(
                            Instant.now(),
                            Instant.ofEpochMilli(refreshable.getExpireTimeWithBufferEpochMs(RefreshMode.EAGER))),
                    delayQueue.size(),
                    refreshable);
        } else {
            return null;
        }
    }
Register the refreshable so that its refreshing gets managed. Can be called many times
for the same {@link Refreshable}, e.g. to notify the {@link RefreshManager} that it was
refreshed externally.
stroom-security/stroom-security-common-impl/src/main/java/stroom/security/common/impl/RefreshManager.java