I got this.. I think my first comment was not clear..

The problem is that each cache entry (query / entity / collection) has a different log method / signature  :

* CacheLogger#queryCacheHit
* CacheLogger#entityCacheHit
* CacheLogger#collectionCacheHit
* ...

A single LoggedCache does not know each one it would have to use (unless it uses instanceof $key/$entry) during the Region#get / Region#put...

```php
public function get(CacheKey $key)
{
    $entry = $this->region->get($key);

    if($entry) {
        $this->logger->queryCacheHit($key);      // if this region is a query region
        $this->logger->entityCacheHit($key);     // if this region is a entity region
        $this->logger->collectionCacheHit($key); // if this region is a collection region
    }
    // ....
    return $entry;
}
```

It would require a logged region for each one of the entries and another version for concurrent regions:

* LoggedQueryCacheRegion
* LoggedEntityCacheRegion
* LoggedCollectionCacheRegion
* ConcurrentLoggedQueryCacheRegion
* ConcurrentLoggedEntityCacheRegion
* ConcurrentLoggedCollectionCacheRegion