This is an automated email from the ASF dual-hosted git repository.

tv pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jcs.git

commit f77df1a1fdf9d61dd2947f9e825631fd0deddf2d
Author: Thomas Vandahl <[email protected]>
AuthorDate: Mon Feb 16 21:29:42 2026 +0100

    Rework cache event logging
---
 .../jcs4/auxiliary/AbstractAuxiliaryCache.java     | 122 +---------------
 .../AbstractAuxiliaryCacheEventLogging.java        |  31 ++--
 .../auxiliary/AbstractCacheEventLogSupport.java    | 162 +++++++++++++++++++++
 .../jcs4/auxiliary/disk/AbstractDiskCache.java     | 143 +++---------------
 .../jcs4/auxiliary/disk/indexed/IndexedDisk.java   |   1 -
 .../auxiliary/disk/indexed/IndexedDiskCache.java   |   8 +-
 .../jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java    |  12 +-
 .../lateral/socket/tcp/LateralTCPCacheFactory.java |   3 +-
 .../lateral/socket/tcp/LateralTCPCacheNoWait.java  |  14 +-
 .../socket/tcp/LateralTCPCacheNoWaitFacade.java    |  17 +--
 .../remote/AbstractRemoteAuxiliaryCache.java       |  22 +--
 .../remote/AbstractRemoteCacheNoWaitFacade.java    |  11 --
 .../commons/jcs4/auxiliary/remote/RemoteCache.java |   7 +-
 .../jcs4/auxiliary/remote/RemoteCacheManager.java  |   3 +-
 .../jcs4/auxiliary/remote/RemoteCacheNoWait.java   |  11 --
 .../auxiliary/remote/RemoteCacheNoWaitFacade.java  |  16 +-
 .../remote/http/client/RemoteHttpCache.java        |   7 +-
 .../http/server/AbstractRemoteCacheService.java    |  95 ++++--------
 .../remote/http/server/RemoteHttpCacheService.java |   9 ++
 .../auxiliary/remote/server/RemoteCacheServer.java |  91 ++++++------
 .../remote/server/RemoteCacheServerFactory.java    |  19 ++-
 .../commons/jcs4/engine/logging/CacheEvent.java    | 142 +++++-------------
 .../logging/CacheEventLoggerDebugLogger.java       |  34 +----
 .../jcs4/engine/logging/behavior/ICacheEvent.java  |  37 +----
 .../engine/logging/behavior/ICacheEventLogger.java | 108 +++++++++-----
 .../jcs4/io/ObjectInputStreamClassLoaderAware.java |   1 +
 .../AuxiliaryCacheConfiguratorUnitTest.java        |   1 -
 .../commons/jcs4/auxiliary/MockAuxiliaryCache.java |   7 -
 .../jcs4/auxiliary/MockCacheEventLogger.java       |  33 ++++-
 .../tcp/LateralTCPDiscoveryListenerUnitTest.java   |   2 +-
 .../auxiliary/remote/MockRemoteCacheClient.java    |  11 --
 .../CompositeCacheConfiguratorUnitTest.java        |   6 +-
 .../control/CompositeCacheDiskUsageUnitTest.java   |   7 -
 .../CacheEventLoggerDebugLoggerUnitTest.java       |  21 +--
 .../jcs4/engine/logging/MockCacheEventLogger.java  |  95 ------------
 35 files changed, 503 insertions(+), 806 deletions(-)

diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCache.java
index 6332f170..71234d4e 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCache.java
@@ -28,71 +28,21 @@ import java.util.stream.Collectors;
 
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.behavior.IElementSerializer;
-import org.apache.commons.jcs4.engine.logging.CacheEvent;
-import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
-import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
 import org.apache.commons.jcs4.engine.match.KeyMatcherPatternImpl;
 import org.apache.commons.jcs4.engine.match.behavior.IKeyMatcher;
 import org.apache.commons.jcs4.utils.serialization.StandardSerializer;
 
 /** This holds convenience methods used by most auxiliary caches. */
 public abstract class AbstractAuxiliaryCache<K, V>
+    extends AbstractCacheEventLogSupport<K, V>
     implements AuxiliaryCache<K, V>
 {
-    /** An optional event logger */
-    private ICacheEventLogger cacheEventLogger;
-
     /** The serializer. Uses a standard serializer by default. */
     private IElementSerializer elementSerializer = new StandardSerializer();
 
     /** Key matcher used by the getMatching API */
     private IKeyMatcher<K> keyMatcher = new KeyMatcherPatternImpl<>();
 
-    /**
-     * Logs an event if an event logger is configured.
-     *
-     * @param item
-     * @param eventName
-     * @return ICacheEvent
-     */
-    protected ICacheEvent<K> createICacheEvent( final ICacheElement<K, V> 
item, final String eventName )
-    {
-        if ( cacheEventLogger == null )
-        {
-            return new CacheEvent<>();
-        }
-        final String diskLocation = getEventLoggingExtraInfo();
-        String regionName = null;
-        K key = null;
-        if ( item != null )
-        {
-            regionName = item.cacheName();
-            key = item.key();
-        }
-        return cacheEventLogger.createICacheEvent( 
getAuxiliaryCacheAttributes().getName(), regionName, eventName,
-                                                   diskLocation, key );
-    }
-
-    /**
-     * Logs an event if an event logger is configured.
-     *
-     * @param regionName
-     * @param key
-     * @param eventName
-     * @return ICacheEvent
-     */
-    protected <T> ICacheEvent<T> createICacheEvent( final String regionName, 
final T key, final String eventName )
-    {
-        if ( cacheEventLogger == null )
-        {
-            return new CacheEvent<>();
-        }
-        final String diskLocation = getEventLoggingExtraInfo();
-        return cacheEventLogger.createICacheEvent( 
getAuxiliaryCacheAttributes().getName(), regionName, eventName,
-                                                   diskLocation, key );
-
-    }
-
     /**
      * Gets the item from the cache.
      *
@@ -103,16 +53,6 @@ public abstract class AbstractAuxiliaryCache<K, V>
     @Override
     public abstract ICacheElement<K, V> get( K key ) throws IOException;
 
-    /**
-     * Allows it to be injected.
-     *
-     * @return cacheEventLogger
-     */
-    public ICacheEventLogger getCacheEventLogger()
-    {
-        return this.cacheEventLogger;
-    }
-
     /**
      * Allows it to be injected.
      *
@@ -123,13 +63,6 @@ public abstract class AbstractAuxiliaryCache<K, V>
         return this.elementSerializer;
     }
 
-    /**
-     * Gets the extra info for the event log.
-     *
-     * @return IP, or disk location, etc.
-     */
-    public abstract String getEventLoggingExtraInfo();
-
     /**
      * Returns the key matcher used by get matching.
      *
@@ -140,49 +73,6 @@ public abstract class AbstractAuxiliaryCache<K, V>
         return this.keyMatcher;
     }
 
-    /**
-     * Logs an event if an event logger is configured.
-     *
-     * @param source
-     * @param eventName
-     * @param optionalDetails
-     */
-    protected void logApplicationEvent( final String source, final String 
eventName, final String optionalDetails )
-    {
-        if ( cacheEventLogger != null )
-        {
-            cacheEventLogger.logApplicationEvent( source, eventName, 
optionalDetails );
-        }
-    }
-
-    /**
-     * Logs an event if an event logger is configured.
-     *
-     * @param source
-     * @param eventName
-     * @param errorMessage
-     */
-    protected void logError( final String source, final String eventName, 
final String errorMessage )
-    {
-        if ( cacheEventLogger != null )
-        {
-            cacheEventLogger.logError( source, eventName, errorMessage );
-        }
-    }
-
-    /**
-     * Logs an event if an event logger is configured.
-     *
-     * @param cacheEvent
-     */
-    protected <T> void logICacheEvent( final ICacheEvent<T> cacheEvent )
-    {
-        if ( cacheEventLogger != null )
-        {
-            cacheEventLogger.logICacheEvent( cacheEvent );
-        }
-    }
-
     /**
      * Gets multiple items from the cache based on the given set of keys.
      *
@@ -214,16 +104,6 @@ public abstract class AbstractAuxiliaryCache<K, V>
         return new HashMap<>();
     }
 
-    /**
-     * Allows it to be injected.
-     *
-     * @param cacheEventLogger
-     */
-    public void setCacheEventLogger( final ICacheEventLogger cacheEventLogger )
-    {
-        this.cacheEventLogger = cacheEventLogger;
-    }
-
     /**
      * Allows you to inject a custom serializer. A good example would be a 
compressing standard
      * serializer.
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCacheEventLogging.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCacheEventLogging.java
index 06f50e5c..a0c2203e 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCacheEventLogging.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractAuxiliaryCacheEventLogging.java
@@ -26,7 +26,7 @@ import java.util.Set;
 
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
-import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 
 /**
  * All ICacheEvents are defined as final. Children must implement process 
events. These are wrapped
@@ -58,7 +58,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, V>
     protected final void disposeWithEventLogging()
         throws IOException
     {
-        final ICacheEvent<String> cacheEvent = createICacheEvent( 
getCacheName(), "none", ICacheEventLogger.DISPOSE_EVENT );
+        final ICacheEvent<String> cacheEvent = createICacheEvent( 
getCacheName(), "none",
+                CacheEventType.DISPOSE_EVENT, this::getEventLoggingExtraInfo);
         try
         {
             processDispose();
@@ -115,7 +116,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, 
V>
     protected final Map<K, ICacheElement<K, V>> getMatchingWithEventLogging( 
final String pattern )
         throws IOException
     {
-        final ICacheEvent<String> cacheEvent = createICacheEvent( 
getCacheName(), pattern, ICacheEventLogger.GETMATCHING_EVENT );
+        final ICacheEvent<String> cacheEvent = createICacheEvent( 
getCacheName(), pattern,
+                CacheEventType.GETMATCHING_EVENT, 
this::getEventLoggingExtraInfo);
         try
         {
             return processGetMatching( pattern );
@@ -152,8 +154,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, 
V>
     protected final Map<K, ICacheElement<K, V>> 
getMultipleWithEventLogging(final Set<K> keys )
         throws IOException
     {
-        final ICacheEvent<Serializable> cacheEvent = createICacheEvent( 
getCacheName(), (Serializable) keys,
-                                                    
ICacheEventLogger.GETMULTIPLE_EVENT );
+        final ICacheEvent<Serializable> cacheEvent = createICacheEvent( 
getCacheName(),
+                (Serializable) keys, CacheEventType.GETMULTIPLE_EVENT, 
this::getEventLoggingExtraInfo);
         try
         {
             return processGetMultiple( keys );
@@ -174,7 +176,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, 
V>
     protected final ICacheElement<K, V> getWithEventLogging( final K key )
         throws IOException
     {
-        final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), 
key, ICacheEventLogger.GET_EVENT );
+        final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), 
key,
+                CacheEventType.GET_EVENT, this::getEventLoggingExtraInfo);
         try
         {
             return processGet( key );
@@ -275,7 +278,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, 
V>
     protected final void removeAllWithEventLogging()
         throws IOException
     {
-        final ICacheEvent<String> cacheEvent = createICacheEvent( 
getCacheName(), "all", ICacheEventLogger.REMOVEALL_EVENT );
+        final ICacheEvent<String> cacheEvent = createICacheEvent( 
getCacheName(), "all",
+                CacheEventType.REMOVEALL_EVENT, 
this::getEventLoggingExtraInfo);
         try
         {
             processRemoveAll();
@@ -296,7 +300,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, 
V>
     protected final boolean removeWithEventLogging( final K key )
         throws IOException
     {
-        final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), 
key, ICacheEventLogger.REMOVE_EVENT );
+        final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), 
key,
+                CacheEventType.REMOVE_EVENT, this::getEventLoggingExtraInfo);
         try
         {
             return processRemove( key );
@@ -329,7 +334,8 @@ public abstract class AbstractAuxiliaryCacheEventLogging<K, 
V>
     protected final void updateWithEventLogging( final ICacheElement<K, V> 
cacheElement )
         throws IOException
     {
-        final ICacheEvent<K> cacheEvent = createICacheEvent( cacheElement, 
ICacheEventLogger.UPDATE_EVENT );
+        final ICacheEvent<K> cacheEvent = createICacheEvent( cacheElement,
+                CacheEventType.UPDATE_EVENT, this::getEventLoggingExtraInfo);
         try
         {
             processUpdate( cacheElement );
@@ -339,4 +345,11 @@ public abstract class 
AbstractAuxiliaryCacheEventLogging<K, V>
             logICacheEvent( cacheEvent );
         }
     }
+
+    /**
+     * Gets the extra info for the event log.
+     *
+     * @return disk location
+     */
+    public abstract String getEventLoggingExtraInfo();
 }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractCacheEventLogSupport.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractCacheEventLogSupport.java
new file mode 100644
index 00000000..c803c973
--- /dev/null
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/AbstractCacheEventLogSupport.java
@@ -0,0 +1,162 @@
+package org.apache.commons.jcs4.auxiliary;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Optional;
+import java.util.function.Supplier;
+
+import org.apache.commons.jcs4.engine.behavior.ICacheElement;
+import org.apache.commons.jcs4.engine.logging.CacheEvent;
+import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
+import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
+
+public abstract class AbstractCacheEventLogSupport<K, V>
+{
+    /** An optional event logger */
+    private Optional<ICacheEventLogger> cacheEventLogger = Optional.empty();
+
+    /**
+     * Creates an event.
+     *
+     * @param source e.g. RemoteCacheServer
+     * @param region the name of the region
+     * @param eventType e.g. update, get, put, remove
+     * @param optionalDetails any extra message
+     * @param key the cache key
+     * @return ICacheEvent
+     */
+    protected <T> ICacheEvent<T> createICacheEvent(final String source, final 
String region,
+            final CacheEventType eventType, final String optionalDetails, 
final T key)
+    {
+        if (getCacheEventLogger().isEmpty())
+        {
+            return new CacheEvent<>();
+        }
+
+        return getCacheEventLogger().get().createICacheEvent(
+                source, region, eventType, optionalDetails, key);
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     *
+     * @param item
+     * @param eventType
+     * @param eventLoggingExtraInfo
+     * @return ICacheEvent
+     */
+    protected ICacheEvent<K> createICacheEvent(final ICacheElement<K, V> item,
+            final CacheEventType eventType, Supplier<String> 
eventLoggingExtraInfo)
+    {
+        if (getCacheEventLogger().isEmpty())
+        {
+            return new CacheEvent<>();
+        }
+        String regionName = item == null ? null : item.cacheName();
+        K key = item == null ? null : item.key();
+
+        return createICacheEvent(getAuxiliaryCacheAttributes().getName(), 
regionName,
+                eventType, eventLoggingExtraInfo.get(), key);
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     *
+     * @param regionName
+     * @param key
+     * @param eventType
+     * @param eventLoggingExtraInfo
+     * @return ICacheEvent
+     */
+    protected <T> ICacheEvent<T> createICacheEvent(final String regionName, 
final T key,
+            final CacheEventType eventType, Supplier<String> 
eventLoggingExtraInfo)
+    {
+        if (getCacheEventLogger().isEmpty())
+        {
+            return new CacheEvent<>();
+        }
+
+        return createICacheEvent(getAuxiliaryCacheAttributes().getName(), 
regionName,
+                eventType, eventLoggingExtraInfo.get(), key);
+    }
+
+    /**
+     * Allows it to be injected.
+     *
+     * @return cacheEventLogger
+     */
+    public Optional<ICacheEventLogger> getCacheEventLogger()
+    {
+        return cacheEventLogger;
+    }
+
+    /**
+     * Gets the extra info for the event log.
+     *
+     * @return IP, or disk location, etc.
+     */
+    public abstract AuxiliaryCacheAttributes getAuxiliaryCacheAttributes();
+
+    /**
+     * Logs an event if an event logger is configured.
+     *
+     * @param source
+     * @param eventType
+     * @param optionalDetails
+     */
+    protected void logApplicationEvent(final String source, final 
CacheEventType eventType, final String optionalDetails)
+    {
+        getCacheEventLogger().ifPresent(logger -> logger.logApplicationEvent( 
source, eventType, optionalDetails));
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     *
+     * @param source
+     * @param eventType
+     * @param errorMessage
+     */
+    protected void logError(final String source, final CacheEventType 
eventType, final String errorMessage)
+    {
+        getCacheEventLogger().ifPresent(logger -> logger.logError( source, 
eventType, errorMessage));
+    }
+
+    /**
+     * Logs an event if an event logger is configured.
+     *
+     * @param cacheEvent
+     */
+    protected <T> void logICacheEvent(final ICacheEvent<T> cacheEvent)
+    {
+        getCacheEventLogger().ifPresent(logger -> logger.logICacheEvent( 
cacheEvent ));
+    }
+
+    /**
+     * Allows it to be injected.
+     *
+     * @param cacheEventLogger
+     */
+    public void setCacheEventLogger(final ICacheEventLogger cacheEventLogger)
+    {
+        this.cacheEventLogger = Optional.ofNullable(cacheEventLogger);
+    }
+
+}
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java
index 3273782b..3a88e335 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import org.apache.commons.jcs4.auxiliary.AbstractAuxiliaryCacheEventLogging;
@@ -91,7 +92,7 @@ public abstract class AbstractDiskCache<K, V>
         {
             if (alive.get())
             {
-                doDispose();
+                disposeWithEventLogging();
             }
         }
 
@@ -135,7 +136,7 @@ public abstract class AbstractDiskCache<K, V>
                             // If the element is still eligible, spool it.
                             if ( pe.isSpoolable() )
                             {
-                                doUpdate( element );
+                                updateWithEventLogging( element );
                             }
                         }
                         finally
@@ -151,7 +152,7 @@ public abstract class AbstractDiskCache<K, V>
                 else
                 {
                     // call the child's implementation
-                    doUpdate( element );
+                    updateWithEventLogging( element );
                 }
             }
             else
@@ -176,7 +177,7 @@ public abstract class AbstractDiskCache<K, V>
         public void handleRemove( final String cacheName, final K key )
             throws IOException
         {
-            if (alive.get() && doRemove( key ) )
+            if (alive.get() && removeWithEventLogging(key))
             {
                 log.debug( "Element removed, key: " + key );
             }
@@ -193,7 +194,7 @@ public abstract class AbstractDiskCache<K, V>
         {
             if (alive.get())
             {
-                doRemoveAll();
+                removeAllWithEventLogging();
             }
         }
 
@@ -242,7 +243,7 @@ public abstract class AbstractDiskCache<K, V>
     private final String cacheName;
 
     /** DEBUG: Keeps a count of the number of purgatory hits for debug 
messages */
-    private int purgHits;
+    private final AtomicInteger purgHits = new AtomicInteger();
 
     /**
      * We lock here, so that we cannot get an update after a remove all. an 
individual removal locks
@@ -296,109 +297,11 @@ public abstract class AbstractDiskCache<K, V>
 
         // Invoke any implementation specific disposal code
         // need to handle the disposal first.
-        doDispose();
+        disposeWithEventLogging();
 
         alive.set(false);
     }
 
-    /**
-     * Dispose of the persistent store. Note that disposal of purgatory and 
setting alive to false
-     * does NOT need to be done by this method.
-     *
-     * Before the event logging layer, the subclasses implemented the do* 
methods. Now the do*
-     * methods call the *EventLogging method on the super. The 
*WithEventLogging methods call the
-     * abstract process* methods. The children implement the process methods.
-     *
-     * @throws IOException
-     */
-    protected final void doDispose()
-        throws IOException
-    {
-        super.disposeWithEventLogging();
-    }
-
-    /**
-     * Gets a value from the persistent store.
-     *
-     * Before the event logging layer, the subclasses implemented the do* 
methods. Now the do*
-     * methods call the *EventLogging method on the super. The 
*WithEventLogging methods call the
-     * abstract process* methods. The children implement the process methods.
-     *
-     * @param key Key to locate value for.
-     * @return An object matching key, or null.
-     * @throws IOException
-     */
-    protected final ICacheElement<K, V> doGet( final K key )
-        throws IOException
-    {
-        return super.getWithEventLogging( key );
-    }
-
-    /**
-     * Gets a value from the persistent store.
-     *
-     * Before the event logging layer, the subclasses implemented the do* 
methods. Now the do*
-     * methods call the *EventLogging method on the super. The 
*WithEventLogging methods call the
-     * abstract process* methods. The children implement the process methods.
-     *
-     * @param pattern Used to match keys.
-     * @return A map of matches.
-     * @throws IOException
-     */
-    protected final Map<K, ICacheElement<K, V>> doGetMatching( final String 
pattern )
-        throws IOException
-    {
-        return super.getMatchingWithEventLogging( pattern );
-    }
-
-    /**
-     * Remove an object from the persistent store if found.
-     *
-     * Before the event logging layer, the subclasses implemented the do* 
methods. Now the do*
-     * methods call the *EventLogging method on the super. The 
*WithEventLogging methods call the
-     * abstract process* methods. The children implement the process methods.
-     *
-     * @param key Key of object to remove.
-     * @return whether or no the item was present when removed
-     * @throws IOException
-     */
-    protected final boolean doRemove( final K key )
-        throws IOException
-    {
-        return super.removeWithEventLogging( key );
-    }
-
-    /**
-     * Remove all objects from the persistent store.
-     *
-     * Before the event logging layer, the subclasses implemented the do* 
methods. Now the do*
-     * methods call the *EventLogging method on the super. The 
*WithEventLogging methods call the
-     * abstract process* methods. The children implement the process methods.
-     *
-     * @throws IOException
-     */
-    protected final void doRemoveAll()
-        throws IOException
-    {
-        super.removeAllWithEventLogging();
-    }
-
-    /**
-     * Add a cache element to the persistent store.
-     *
-     * Before the event logging layer, the subclasses implemented the do* 
methods. Now the do*
-     * methods call the *EventLogging method on the super. The 
*WithEventLogging methods call the
-     * abstract process* methods. The children implement the process methods.
-     *
-     * @param cacheElement
-     * @throws IOException
-     */
-    protected final void doUpdate( final ICacheElement<K, V> cacheElement )
-        throws IOException
-    {
-        super.updateWithEventLogging( cacheElement );
-    }
-
     /**
      * Check to see if the item is in purgatory. If so, return it. If not, 
check to see if we have
      * it on disk.
@@ -422,11 +325,11 @@ public abstract class AbstractDiskCache<K, V>
         // If the element was found in purgatory
         if ( pe != null )
         {
-            purgHits++;
+            int p = purgHits.incrementAndGet();
 
-            if ( purgHits % 100 == 0 )
+            if ( p % 100 == 0 )
             {
-                log.debug( "Purgatory hits = {0}", purgHits );
+                log.debug( "Purgatory hits = {0}", p );
             }
 
             // Since the element will go back to the memory cache, we could set
@@ -452,7 +355,7 @@ public abstract class AbstractDiskCache<K, V>
         // it from the cache.
         try
         {
-            return doGet( key );
+            return getWithEventLogging( key );
         }
         catch (final IOException e)
         {
@@ -536,23 +439,13 @@ public abstract class AbstractDiskCache<K, V>
         final Map<K, ICacheElement<K, V>> result = processGetMultiple( 
matchingKeys );
 
         // Get the keys from disk
-        final Map<K, ICacheElement<K, V>> diskMatches = doGetMatching( pattern 
);
+        final Map<K, ICacheElement<K, V>> diskMatches = 
getMatchingWithEventLogging( pattern );
 
         result.putAll( diskMatches );
 
         return result;
     }
 
-    /**
-     * Size cannot be determined without knowledge of the cache 
implementation, so subclasses will
-     * need to implement this method.
-     *
-     * @return the number of items.
-     * @see ICache#getSize
-     */
-    @Override
-    public abstract int getSize();
-
     /**
      * Returns semi-structured data.
      *
@@ -563,7 +456,7 @@ public abstract class AbstractDiskCache<K, V>
     {
         final IStats stats = new Stats("Abstract Disk Cache");
 
-        stats.addStatElement("Purgatory Hits", Integer.valueOf(purgHits));
+        stats.addStatElement("Purgatory Hits", purgHits);
         stats.addStatElement("Purgatory Size", 
Integer.valueOf(purgatory.size()));
 
         // get the stats from the event queue too
@@ -660,19 +553,21 @@ public abstract class AbstractDiskCache<K, V>
                 pe.setSpoolable( false );
 
                 // Remove from persistent store immediately
-                present = doRemove( key );
+                present = removeWithEventLogging( key );
             }
         }
         else
         {
             // Remove from persistent store immediately
-            present = doRemove( key );
+            present = removeWithEventLogging( key );
         }
 
         return present;
     }
 
     /**
+     * Remove all objects from the persistent store.
+     *
      * @throws IOException
      * @see org.apache.commons.jcs4.engine.behavior.ICache#removeAll
      */
@@ -686,7 +581,7 @@ public abstract class AbstractDiskCache<K, V>
             initPurgatory();
 
             // Remove all from persistent store immediately
-            doRemoveAll();
+            removeAllWithEventLogging();
         }
         else
         {
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDisk.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDisk.java
index 955d5bc5..4540cf9a 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDisk.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDisk.java
@@ -274,7 +274,6 @@ public class IndexedDisk implements AutoCloseable
     /**
      * Serializes the object and write it out to the given position.
      * <p>
-     * TODO: make this take a ded as well.
      * @param obj
      * @param pos
      * @throws IOException
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java
index 936f47a0..1336e83d 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java
@@ -44,7 +44,7 @@ import 
org.apache.commons.jcs4.engine.behavior.IElementSerializer;
 import org.apache.commons.jcs4.engine.control.group.GroupAttrName;
 import org.apache.commons.jcs4.engine.control.group.GroupId;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
-import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.apache.commons.jcs4.engine.stats.Stats;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
@@ -1221,7 +1221,8 @@ public class IndexedDiskCache<K, V> extends 
AbstractDiskCache<K, V>
     @Override
     public void processDispose()
     {
-        final ICacheEvent<String> cacheEvent = 
createICacheEvent(getCacheName(), "none", ICacheEventLogger.DISPOSE_EVENT);
+        final ICacheEvent<String> cacheEvent = 
createICacheEvent(getCacheName(), "none",
+                CacheEventType.DISPOSE_EVENT, this::getDiskLocation);
         try
         {
             final Thread t = new Thread(this::disposeInternal, 
"IndexedDiskCache-DisposalThread");
@@ -1387,7 +1388,8 @@ public class IndexedDiskCache<K, V> extends 
AbstractDiskCache<K, V>
     public void processRemoveAll()
     {
         final ICacheEvent<String> cacheEvent =
-                createICacheEvent(getCacheName(), "all", 
ICacheEventLogger.REMOVEALL_EVENT);
+                createICacheEvent(getCacheName(), "all", 
CacheEventType.REMOVEALL_EVENT,
+                        this::getDiskLocation);
         try
         {
             reset();
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java
index b4eee0c4..7f1cb6e6 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java
@@ -39,7 +39,7 @@ import 
org.apache.commons.jcs4.auxiliary.disk.jdbc.dsfactory.DataSourceFactory;
 import org.apache.commons.jcs4.engine.behavior.ICache;
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
-import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
@@ -206,8 +206,9 @@ public class JDBCDiskCache<K, V>
                     setAlive(false);
                 }
 
-                logApplicationEvent( getAuxiliaryCacheAttributes().getName(), 
"deleteExpired",
-                                     "Deleted expired elements.  URL: " + 
getDiskLocation() );
+                logApplicationEvent( getAuxiliaryCacheAttributes().getName(),
+                        CacheEventType.DELETEEXPIRED_EVENT,
+                        "Deleted expired elements.  URL: " + getDiskLocation() 
);
             }
             else
             {
@@ -216,7 +217,7 @@ public class JDBCDiskCache<K, V>
         }
         catch ( final SQLException e )
         {
-            logError( getAuxiliaryCacheAttributes().getName(), "deleteExpired",
+            logError( getAuxiliaryCacheAttributes().getName(), 
CacheEventType.DELETEEXPIRED_EVENT,
                     e.getMessage() + " URL: " + getDiskLocation() );
             log.error( "Problem removing expired elements from the table.", e 
);
             reset();
@@ -511,7 +512,8 @@ public class JDBCDiskCache<K, V>
     @Override
     public void processDispose()
     {
-        final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), 
null, ICacheEventLogger.DISPOSE_EVENT );
+        final ICacheEvent<K> cacheEvent = createICacheEvent( getCacheName(), 
null,
+                CacheEventType.DISPOSE_EVENT, this::getDiskLocation);
 
         try
         {
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java
index c83ad167..fd3ff536 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheFactory.java
@@ -257,7 +257,8 @@ public class LateralTCPCacheFactory
         {
             // One can be used for all regions
             final LateralTCPDiscoveryListener discoveryListener =
-                    getDiscoveryListener(lac, cacheMgr, 
lcnwf.getCacheEventLogger(),
+                    getDiscoveryListener(lac, cacheMgr,
+                    lcnwf.getCacheEventLogger().orElse(null),
                     lcnwf.getElementSerializer(), lcnwf.getKeyMatcher());
             discoveryListener.addNoWaitFacade( lac.getCacheName(), lcnwf );
 
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java
index e8f58788..d86e4b24 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java
@@ -79,8 +79,9 @@ public class LateralTCPCacheNoWait<K, V>
     {
         this.cache = cache;
         this.identityKey = cache.getCacheName();
-        setCacheEventLogger(cache.getCacheEventLogger());
+        setCacheEventLogger(cache.getCacheEventLogger().orElse(null));
         setElementSerializer(cache.getElementSerializer());
+        setKeyMatcher(cache.getKeyMatcher());
 
         log.debug( "Constructing LateralTCPCacheNoWait, LateralTCPCache = 
[{0}]", cache );
 
@@ -197,17 +198,6 @@ public class LateralTCPCacheNoWait<K, V>
         return cache.getCacheType();
     }
 
-    /**
-     * this won't be called since we don't do ICache logging here.
-     *
-     * @return String
-     */
-    @Override
-    public String getEventLoggingExtraInfo()
-    {
-        return "Lateral Cache No Wait";
-    }
-
     /**
      * The identifying key to this no wait
      *
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java
index 4de74cbe..7f00eac8 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java
@@ -94,7 +94,7 @@ public class LateralTCPCacheNoWaitFacade<K, V>
      * @param noWait
      * @return true if it wasn't already contained
      */
-    public synchronized boolean addNoWait( final LateralTCPCacheNoWait<K, V> 
noWait )
+    public boolean addNoWait( final LateralTCPCacheNoWait<K, V> noWait )
     {
         if ( noWait == null )
         {
@@ -201,17 +201,6 @@ public class LateralTCPCacheNoWaitFacade<K, V>
         return CacheType.LATERAL_CACHE;
     }
 
-    /**
-     * this won't be called since we don't do ICache logging here.
-     *
-     * @return String
-     */
-    @Override
-    public String getEventLoggingExtraInfo()
-    {
-        return "Lateral Cache No Wait";
-    }
-
     /**
      * Return the keys in this cache.
      *
@@ -381,7 +370,7 @@ public class LateralTCPCacheNoWaitFacade<K, V>
      * @param noWait
      * @return true if it was already in the array
      */
-    public synchronized boolean removeNoWait( final LateralTCPCacheNoWait<K, 
V> noWait )
+    public boolean removeNoWait( final LateralTCPCacheNoWait<K, V> noWait )
     {
         if (noWait == null)
         {
@@ -399,7 +388,7 @@ public class LateralTCPCacheNoWaitFacade<K, V>
      * @return true if it was already in the array
      * @since 3.1
      */
-    public synchronized boolean removeNoWait(final String tcpServer)
+    public boolean removeNoWait(final String tcpServer)
     {
         if (tcpServer == null)
         {
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
index be8fb1a3..df3a6c72 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
@@ -42,7 +42,7 @@ import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.behavior.ICacheElementSerialized;
 import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal;
 import org.apache.commons.jcs4.engine.behavior.IZombie;
-import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.apache.commons.jcs4.engine.stats.Stats;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
@@ -137,8 +137,8 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V>
             {
                 try
                 {
-                    handleException( e, "Problem propagating events from 
Zombie Queue to new Remote Service.",
-                                     "fixCache" );
+                    handleException(e, "Problem propagating events from Zombie 
Queue to new Remote Service.",
+                            CacheEventType.FIXCACHE_EVENT );
                 }
                 catch ( final IOException e1 )
                 {
@@ -359,10 +359,10 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V>
      *
      * @param ex
      * @param msg
-     * @param eventName
+     * @param eventType
      * @throws IOException
      */
-    protected abstract void handleException( Exception ex, String msg, String 
eventName )
+    protected abstract void handleException( Exception ex, String msg, 
CacheEventType eventType )
         throws IOException;
 
     /**
@@ -385,7 +385,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V>
         catch ( final IOException ex )
         {
             log.error( "Couldn't dispose", ex );
-            handleException( ex, "Failed to dispose [" + cacheName + "]", 
ICacheEventLogger.DISPOSE_EVENT );
+            handleException( ex, "Failed to dispose [" + cacheName + "]", 
CacheEventType.DISPOSE_EVENT );
         }
     }
 
@@ -431,7 +431,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V>
         }
         catch ( final IOException | ClassNotFoundException ex )
         {
-            handleException( ex, "Failed to get [" + key + "] from [" + 
cacheName + "]", ICacheEventLogger.GET_EVENT );
+            handleException( ex, "Failed to get [" + key + "] from [" + 
cacheName + "]", CacheEventType.GET_EVENT );
         }
         return retVal;
     }
@@ -481,7 +481,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V>
         catch ( final IOException | ClassNotFoundException ex )
         {
             handleException( ex, "Failed to getMatching [" + pattern + "] from 
[" + cacheName + "]",
-                             ICacheEventLogger.GET_EVENT );
+                    CacheEventType.GET_EVENT );
         }
         return results;
     }
@@ -507,7 +507,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V>
             }
             catch ( final IOException ex )
             {
-                handleException( ex, "Failed to remove " + key + " from " + 
cacheName, ICacheEventLogger.REMOVE_EVENT );
+                handleException( ex, "Failed to remove " + key + " from " + 
cacheName, CacheEventType.REMOVE_EVENT );
             }
             return true;
         }
@@ -532,7 +532,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V>
             }
             catch ( final IOException ex )
             {
-                handleException( ex, "Failed to remove all from " + cacheName, 
ICacheEventLogger.REMOVEALL_EVENT );
+                handleException( ex, "Failed to remove all from " + cacheName, 
CacheEventType.REMOVEALL_EVENT );
             }
         }
     }
@@ -565,7 +565,7 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V>
             {
                 // event queue will wait and retry
                 handleException( ex, "Failed to put [" + ce.key() + "] to " + 
ce.cacheName(),
-                                 ICacheEventLogger.UPDATE_EVENT );
+                        CacheEventType.UPDATE_EVENT );
             }
         }
         else
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
index 4ece672a..6691e101 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
@@ -136,17 +136,6 @@ public abstract class AbstractRemoteCacheNoWaitFacade<K, V>
         return CacheType.REMOTE_CACHE;
     }
 
-    /**
-     * This typically returns end point info.
-     *
-     * @return the name
-     */
-    @Override
-    public String getEventLoggingExtraInfo()
-    {
-        return "Remote Cache No Wait Facade";
-    }
-
     /**
      * Return the keys in this cache.
      *
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java
index 344d9599..8a2b8406 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java
@@ -26,6 +26,7 @@ import 
org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheListener;
 import org.apache.commons.jcs4.auxiliary.remote.server.behavior.RemoteType;
 import org.apache.commons.jcs4.engine.ZombieCacheServiceNonLocal;
 import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.apache.commons.jcs4.engine.stats.Stats;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
@@ -137,16 +138,16 @@ public class RemoteCache<K, V>
      *
      * @param ex
      * @param msg
-     * @param eventName
+     * @param eventType
      * @throws IOException
      */
     @Override
-    protected void handleException( final Exception ex, final String msg, 
final String eventName )
+    protected void handleException( final Exception ex, final String msg, 
final CacheEventType eventType )
         throws IOException
     {
         final String message = "Disabling remote cache due to error: " + msg;
 
-        logError( cacheName, "", message );
+        logError( cacheName, eventType, message );
         log.error( message, ex );
 
         // we should not switch if the existing is a zombie.
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheManager.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheManager.java
index f76169e9..c82b48f1 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheManager.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheManager.java
@@ -36,6 +36,7 @@ import 
org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal;
 import org.apache.commons.jcs4.engine.behavior.ICompositeCacheManager;
 import org.apache.commons.jcs4.engine.behavior.IElementSerializer;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.apache.commons.jcs4.engine.match.behavior.IKeyMatcher;
 import org.apache.commons.jcs4.log.Log;
 
@@ -194,7 +195,7 @@ public class RemoteCacheManager
             final String msg = "Remote connection to " + registry + " 
resumed.";
             if ( cacheEventLogger != null )
             {
-                cacheEventLogger.logApplicationEvent( "RemoteCacheManager", 
"fix", msg );
+                cacheEventLogger.logApplicationEvent( "RemoteCacheManager", 
CacheEventType.FIXCACHE_EVENT, msg );
             }
             log.info( msg );
         }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java
index fee9b067..839b69a4 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java
@@ -226,17 +226,6 @@ public class RemoteCacheNoWait<K, V>
         return CacheType.REMOTE_CACHE;
     }
 
-    /**
-     * this won't be called since we don't do ICache logging here.
-     *
-     * @return String
-     */
-    @Override
-    public String getEventLoggingExtraInfo()
-    {
-        return "Remote Cache No Wait";
-    }
-
     /**
      * Return the keys in this cache.
      *
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitFacade.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitFacade.java
index b6d737c0..2a567a26 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitFacade.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitFacade.java
@@ -31,6 +31,7 @@ import org.apache.commons.jcs4.engine.CacheStatus;
 import org.apache.commons.jcs4.engine.behavior.ICache;
 import org.apache.commons.jcs4.engine.behavior.IElementSerializer;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.apache.commons.jcs4.log.Log;
 
 /**
@@ -261,11 +262,8 @@ public class RemoteCacheNoWaitFacade<K, V>
                 runner.setDaemon( true );
                 runner.start();
 
-                if ( getCacheEventLogger() != null )
-                {
-                    getCacheEventLogger().logApplicationEvent( 
"RemoteCacheNoWaitFacade", "InitiatedFailover",
-                                                               rcnw + " was in 
error." );
-                }
+                logApplicationEvent("RemoteCacheNoWaitFacade", 
CacheEventType.INITIATEDFAILOVER_EVENT,
+                        rcnw + " was in error." );
             }
             else
             {
@@ -383,12 +381,8 @@ public class RemoteCacheNoWaitFacade<K, V>
                         + "failoverNoWait [" + failoverNoWait + "]";
                 log.info( message );
 
-                if (getCacheEventLogger() != null)
-                {
-                    getCacheEventLogger().logApplicationEvent(
-                            "RemoteCacheFailoverRunner", "RestoredPrimary",
-                            message );
-                }
+                logApplicationEvent("RemoteCacheFailoverRunner", 
CacheEventType.RESTOREDPRIMARY_EVENT,
+                            message);
                 return true;
             }
         }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCache.java
index b0874be8..4180bef2 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCache.java
@@ -25,6 +25,7 @@ import 
org.apache.commons.jcs4.auxiliary.remote.AbstractRemoteAuxiliaryCache;
 import org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheListener;
 import org.apache.commons.jcs4.engine.ZombieCacheServiceNonLocal;
 import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.apache.commons.jcs4.log.Log;
 
 /**
@@ -84,18 +85,18 @@ public class RemoteHttpCache<K, V>
      *
      * @param ex
      * @param msg
-     * @param eventName
+     * @param eventType
      * @throws IOException
      */
     @Override
-    protected void handleException( final Exception ex, final String msg, 
final String eventName )
+    protected void handleException( final Exception ex, final String msg, 
final CacheEventType eventType )
         throws IOException
     {
         // we should not switch if the existing is a zombie.
         if ( !( getRemoteCacheService() instanceof ZombieCacheServiceNonLocal))
         {
             final String message = "Disabling remote cache due to error: " + 
msg;
-            logError( cacheName, "", message );
+            logError( cacheName, eventType, message );
             log.error( message, ex );
 
             setRemoteCacheService( new ZombieCacheServiceNonLocal<>( 
getRemoteCacheAttributes().getZombieQueueMaxSize() ) );
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java
index 5b1e3886..c68598d0 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java
@@ -23,14 +23,16 @@ import java.io.IOException;
 import java.io.Serializable;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.commons.jcs4.auxiliary.AbstractCacheEventLogSupport;
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal;
 import org.apache.commons.jcs4.engine.behavior.ICompositeCacheManager;
 import org.apache.commons.jcs4.engine.control.CompositeCache;
-import org.apache.commons.jcs4.engine.logging.CacheEvent;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.apache.commons.jcs4.log.Log;
 
 /**
@@ -38,6 +40,7 @@ import org.apache.commons.jcs4.log.Log;
  * much of the RMI server to use this as well. I'm starting with the HTTP 
service.
  */
 public abstract class AbstractRemoteCacheService<K, V>
+    extends AbstractCacheEventLogSupport<K, V>
     implements ICacheServiceNonLocal<K, V>
 {
     /** The interval at which we will log updates. */
@@ -46,9 +49,6 @@ public abstract class AbstractRemoteCacheService<K, V>
     /** Log instance */
     private static final Log log = Log.getLog( 
AbstractRemoteCacheService.class );
 
-    /** An optional event logger */
-    private transient ICacheEventLogger cacheEventLogger;
-
     /** The central hub */
     private ICompositeCacheManager cacheManager;
 
@@ -56,7 +56,7 @@ public abstract class AbstractRemoteCacheService<K, V>
     private String eventLogSourceName = "AbstractRemoteCacheService";
 
     /** Number of puts into the cache. */
-    private int puts;
+    private AtomicInteger puts = new AtomicInteger();
 
     /**
      * Creates the super with the needed items.
@@ -67,7 +67,7 @@ public abstract class AbstractRemoteCacheService<K, V>
     public AbstractRemoteCacheService( final ICompositeCacheManager 
cacheManager, final ICacheEventLogger cacheEventLogger )
     {
         this.cacheManager = cacheManager;
-        this.cacheEventLogger = cacheEventLogger;
+        setCacheEventLogger(cacheEventLogger);
     }
 
     /**
@@ -75,18 +75,14 @@ public abstract class AbstractRemoteCacheService<K, V>
      *
      * @param item
      * @param requesterId
-     * @param eventName
+     * @param eventType
      * @return ICacheEvent
      */
-    protected ICacheEvent<ICacheElement<K, V>> createICacheEvent( final 
ICacheElement<K, V> item, final long requesterId, final String eventName )
+    protected ICacheEvent<ICacheElement<K, V>> createICacheEvent( final 
ICacheElement<K, V> item, final long requesterId, final CacheEventType 
eventType )
     {
-        if ( cacheEventLogger == null )
-        {
-            return new CacheEvent<>();
-        }
         final String ipAddress = getExtraInfoForRequesterId( requesterId );
-        return cacheEventLogger.createICacheEvent( getEventLogSourceName(), 
item.cacheName(), eventName, ipAddress,
-                                                   item );
+        return createICacheEvent( getEventLogSourceName(), item.cacheName(),
+                eventType, ipAddress, item );
     }
 
     /**
@@ -95,17 +91,14 @@ public abstract class AbstractRemoteCacheService<K, V>
      * @param cacheName
      * @param key
      * @param requesterId
-     * @param eventName
+     * @param eventType
      * @return ICacheEvent
      */
-    protected <T> ICacheEvent<T> createICacheEvent( final String cacheName, 
final T key, final long requesterId, final String eventName )
+    protected <T> ICacheEvent<T> createICacheEvent( final String cacheName, 
final T key, final long requesterId, final CacheEventType eventType )
     {
-        if ( cacheEventLogger == null )
-        {
-            return new CacheEvent<>();
-        }
         final String ipAddress = getExtraInfoForRequesterId( requesterId );
-        return cacheEventLogger.createICacheEvent( getEventLogSourceName(), 
cacheName, eventName, ipAddress, key );
+        return createICacheEvent( getEventLogSourceName(), cacheName,
+                eventType, ipAddress, key );
     }
 
     /**
@@ -131,7 +124,8 @@ public abstract class AbstractRemoteCacheService<K, V>
     public void dispose( final String cacheName, final long requesterId )
         throws IOException
     {
-        final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
"none", requesterId, ICacheEventLogger.DISPOSE_EVENT );
+        final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
"none", requesterId,
+                CacheEventType.DISPOSE_EVENT );
         try
         {
             processDispose( cacheName, requesterId );
@@ -176,7 +170,7 @@ public abstract class AbstractRemoteCacheService<K, V>
         throws IOException
     {
         ICacheElement<K, V> element = null;
-        final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, 
requesterId, ICacheEventLogger.GET_EVENT );
+        final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, 
requesterId, CacheEventType.GET_EVENT );
         try
         {
             element = processGet( cacheName, key, requesterId );
@@ -254,7 +248,7 @@ public abstract class AbstractRemoteCacheService<K, V>
         throws IOException
     {
         final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
pattern, requesterId,
-                                                    
ICacheEventLogger.GETMATCHING_EVENT );
+                                                    
CacheEventType.GETMATCHING_EVENT );
         try
         {
             return processGetMatching( cacheName, pattern, requesterId );
@@ -298,7 +292,7 @@ public abstract class AbstractRemoteCacheService<K, V>
         throws IOException
     {
         final ICacheEvent<Serializable> cacheEvent = createICacheEvent( 
cacheName, (Serializable) keys, requesterId,
-                                                    
ICacheEventLogger.GETMULTIPLE_EVENT );
+                                                    
CacheEventType.GETMULTIPLE_EVENT );
         try
         {
             return processGetMultiple( cacheName, keys, requesterId );
@@ -309,34 +303,6 @@ public abstract class AbstractRemoteCacheService<K, V>
         }
     }
 
-    /**
-     * Logs an event if an event logger is configured.
-     *
-     * @param source
-     * @param eventName
-     * @param optionalDetails
-     */
-    protected void logApplicationEvent( final String source, final String 
eventName, final String optionalDetails )
-    {
-        if ( cacheEventLogger != null )
-        {
-            cacheEventLogger.logApplicationEvent( source, eventName, 
optionalDetails );
-        }
-    }
-
-    /**
-     * Logs an event if an event logger is configured.
-     *
-     * @param cacheEvent
-     */
-    protected <T> void logICacheEvent( final ICacheEvent<T> cacheEvent )
-    {
-        if ( cacheEventLogger != null )
-        {
-            cacheEventLogger.logICacheEvent( cacheEvent );
-        }
-    }
-
     /**
      * Log some details.
      *
@@ -346,11 +312,10 @@ public abstract class AbstractRemoteCacheService<K, V>
     {
         if ( log.isInfoEnabled() )
         {
-            // not thread safe, but it doesn't have to be accurate
-            puts++;
-            if ( puts % logInterval == 0 )
+            int p = puts.incrementAndGet();
+            if ( p % logInterval == 0 )
             {
-                log.info( "puts = {0}", puts );
+                log.info( "puts = {0}", p );
             }
         }
 
@@ -477,7 +442,7 @@ public abstract class AbstractRemoteCacheService<K, V>
     public void remove( final String cacheName, final K key, final long 
requesterId )
         throws IOException
     {
-        final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, 
requesterId, ICacheEventLogger.REMOVE_EVENT );
+        final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, 
requesterId, CacheEventType.REMOVE_EVENT );
         try
         {
             processRemove( cacheName, key, requesterId );
@@ -514,7 +479,7 @@ public abstract class AbstractRemoteCacheService<K, V>
     public void removeAll( final String cacheName, final long requesterId )
         throws IOException
     {
-        final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
"all", requesterId, ICacheEventLogger.REMOVEALL_EVENT );
+        final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
"all", requesterId, CacheEventType.REMOVEALL_EVENT );
         try
         {
             processRemoveAll( cacheName, requesterId );
@@ -525,16 +490,6 @@ public abstract class AbstractRemoteCacheService<K, V>
         }
     }
 
-    /**
-     * Allows it to be injected.
-     *
-     * @param cacheEventLogger
-     */
-    public void setCacheEventLogger( final ICacheEventLogger cacheEventLogger )
-    {
-        this.cacheEventLogger = cacheEventLogger;
-    }
-
     /**
      * @param cacheManager the cacheManager to set
      */
@@ -573,7 +528,7 @@ public abstract class AbstractRemoteCacheService<K, V>
     public void update( final ICacheElement<K, V> item, final long requesterId 
)
         throws IOException
     {
-        final ICacheEvent<ICacheElement<K, V>> cacheEvent = createICacheEvent( 
item, requesterId, ICacheEventLogger.UPDATE_EVENT );
+        final ICacheEvent<ICacheElement<K, V>> cacheEvent = createICacheEvent( 
item, requesterId, CacheEventType.UPDATE_EVENT );
         try
         {
             logUpdateInfo( item );
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/RemoteHttpCacheService.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/RemoteHttpCacheService.java
index 639c62fb..ebb6fb2f 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/RemoteHttpCacheService.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/RemoteHttpCacheService.java
@@ -257,4 +257,13 @@ public class RemoteHttpCacheService<K, V>
     {
         //nothing.
     }
+
+    /**
+     * @return the RemoteHttpCacheServerAttributes
+     */
+    @Override
+    public RemoteHttpCacheServerAttributes getAuxiliaryCacheAttributes()
+    {
+        return remoteHttpCacheServerAttributes;
+    }
 }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java
index 317aec9c..0266afa7 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java
@@ -34,6 +34,7 @@ import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicLongArray;
 
 import org.apache.commons.jcs4.access.exception.CacheException;
 import org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheListener;
@@ -50,6 +51,7 @@ import 
org.apache.commons.jcs4.engine.control.CompositeCacheManager;
 import org.apache.commons.jcs4.engine.logging.CacheEvent;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.apache.commons.jcs4.engine.stats.behavior.ICacheStats;
 import org.apache.commons.jcs4.log.Log;
 import org.apache.commons.jcs4.utils.timing.ElapsedTimer;
@@ -133,7 +135,7 @@ public class RemoteCacheServer<K, V>
     private final ConcurrentMap<Long, String> idIPMap = new 
ConcurrentHashMap<>();
 
     /** Used to get the next listener id. */
-    private final int[] listenerId = new int[1];
+    private final AtomicLongArray listenerId = new AtomicLongArray(1);
 
     /** Configuration settings. */
     // package protected for access by unit test code
@@ -253,14 +255,16 @@ public class RemoteCacheServer<K, V>
                     // in case it needs synchronization
                     final String message = "Adding vm listener under new id = 
[" + listenerIdB + "], listenerAddress ["
                         + listenerAddress + "]";
-                    logApplicationEvent( "RemoteCacheServer", 
"addCacheListener", message );
+                    logApplicationEvent( "RemoteCacheServer",
+                            CacheEventType.ADDCACHELISTENER_EVENT, message );
                     log.info( message );
                 }
                 else
                 {
                     final String message = "Adding listener under existing id 
= [" + id + "], listenerAddress ["
                         + listenerAddress + "]";
-                    logApplicationEvent( "RemoteCacheServer", 
"addCacheListener", message );
+                    logApplicationEvent( "RemoteCacheServer",
+                            CacheEventType.ADDCACHELISTENER_EVENT, message );
                     log.info( message );
                     // should confirm the host is the same as we have on
                     // record, just in case a client has made a mistake.
@@ -280,8 +284,8 @@ public class RemoteCacheServer<K, V>
 
                 if ( cacheEventLogger != null )
                 {
-                    cacheEventLogger.logError( "RemoteCacheServer", 
"addCacheListener", message + " - "
-                        + ioe.getMessage() );
+                    cacheEventLogger.logError( "RemoteCacheServer",
+                            CacheEventType.ADDCACHELISTENER_EVENT, message + " 
- " + ioe.getMessage() );
                 }
             }
 
@@ -300,18 +304,18 @@ public class RemoteCacheServer<K, V>
      *
      * @param item
      * @param requesterId
-     * @param eventName
+     * @param eventType
      * @return ICacheEvent
      */
-    private ICacheEvent<ICacheElement<K, V>> createICacheEvent( final 
ICacheElement<K, V> item, final long requesterId, final String eventName )
+    private ICacheEvent<ICacheElement<K, V>> createICacheEvent( final 
ICacheElement<K, V> item, final long requesterId, final CacheEventType 
eventType)
     {
         if ( cacheEventLogger == null )
         {
             return new CacheEvent<>();
         }
         final String ipAddress = getExtraInfoForRequesterId( requesterId );
-        return cacheEventLogger
-            .createICacheEvent( "RemoteCacheServer", item.cacheName(), 
eventName, ipAddress, item );
+        return cacheEventLogger.createICacheEvent( "RemoteCacheServer", 
item.cacheName(),
+                eventType, ipAddress, item );
     }
 
     /**
@@ -320,17 +324,18 @@ public class RemoteCacheServer<K, V>
      * @param cacheName
      * @param key
      * @param requesterId
-     * @param eventName
+     * @param eventType
      * @return ICacheEvent
      */
-    private <T> ICacheEvent<T> createICacheEvent( final String cacheName, 
final T key, final long requesterId, final String eventName )
+    private <T> ICacheEvent<T> createICacheEvent( final String cacheName, 
final T key, final long requesterId, final CacheEventType eventType )
     {
         if ( cacheEventLogger == null )
         {
             return new CacheEvent<>();
         }
         final String ipAddress = getExtraInfoForRequesterId( requesterId );
-        return cacheEventLogger.createICacheEvent( "RemoteCacheServer", 
cacheName, eventName, ipAddress, key );
+        return cacheEventLogger.createICacheEvent( "RemoteCacheServer", 
cacheName, eventType,
+                ipAddress, key );
     }
 
     /**
@@ -356,7 +361,8 @@ public class RemoteCacheServer<K, V>
     public void dispose( final String cacheName, final long requesterId )
         throws IOException
     {
-        final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
"none", requesterId, ICacheEventLogger.DISPOSE_EVENT );
+        final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
"none",
+                requesterId, CacheEventType.DISPOSE_EVENT );
         try
         {
             processDispose( cacheName, requesterId );
@@ -401,7 +407,8 @@ public class RemoteCacheServer<K, V>
         throws IOException
     {
         ICacheElement<K, V> element = null;
-        final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, 
requesterId, ICacheEventLogger.GET_EVENT );
+        final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, 
requesterId,
+                CacheEventType.GET_EVENT );
         try
         {
             element = processGet( cacheName, key, requesterId );
@@ -570,8 +577,8 @@ public class RemoteCacheServer<K, V>
     public Map<K, ICacheElement<K, V>> getMatching( final String cacheName, 
final String pattern, final long requesterId )
         throws IOException
     {
-        final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
pattern, requesterId,
-                                                    
ICacheEventLogger.GETMATCHING_EVENT );
+        final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
pattern,
+                requesterId, CacheEventType.GETMATCHING_EVENT );
         try
         {
             return processGetMatching( cacheName, pattern, requesterId );
@@ -653,8 +660,8 @@ public class RemoteCacheServer<K, V>
     public Map<K, ICacheElement<K, V>> getMultiple( final String cacheName, 
final Set<K> keys, final long requesterId )
         throws IOException
     {
-        final ICacheEvent<Serializable> cacheEvent = createICacheEvent( 
cacheName, (Serializable) keys, requesterId,
-                                                    
ICacheEventLogger.GETMULTIPLE_EVENT );
+        final ICacheEvent<Serializable> cacheEvent = createICacheEvent( 
cacheName,
+                (Serializable) keys, requesterId, 
CacheEventType.GETMULTIPLE_EVENT );
         try
         {
             return processGetMultiple( cacheName, keys, requesterId );
@@ -786,14 +793,14 @@ public class RemoteCacheServer<K, V>
      * Logs an event if an event logger is configured.
      *
      * @param source
-     * @param eventName
+     * @param eventType
      * @param optionalDetails
      */
-    protected void logApplicationEvent( final String source, final String 
eventName, final String optionalDetails )
+    protected void logApplicationEvent( final String source, final 
CacheEventType eventType, final String optionalDetails )
     {
         if ( cacheEventLogger != null )
         {
-            cacheEventLogger.logApplicationEvent( source, eventName, 
optionalDetails );
+            cacheEventLogger.logApplicationEvent( source, eventType, 
optionalDetails );
         }
     }
 
@@ -836,28 +843,14 @@ public class RemoteCacheServer<K, V>
      */
     private long nextListenerId()
     {
-        long id = 0;
-        if ( listenerId[0] == Integer.MAX_VALUE )
+        if (listenerId.compareAndSet(0, Long.MAX_VALUE, 0))
         {
-            synchronized ( listenerId )
-            {
-                id = listenerId[0];
-                listenerId[0] = 0;
-                // TODO: record & check if the generated id is currently being
-                // used by a valid listener. Currently if the id wraps after
-                // Long.MAX_VALUE,
-                // we just assume it won't collide with an existing listener 
who
-                // is live.
-            }
+            return listenerId.get(0);
         }
         else
         {
-            synchronized ( listenerId )
-            {
-                id = ++listenerId[0];
-            }
+            return listenerId.incrementAndGet(0);
         }
-        return id;
     }
 
     /**
@@ -956,8 +949,8 @@ public class RemoteCacheServer<K, V>
 
             if ( cacheEventLogger != null )
             {
-                cacheEventLogger.logError( "RemoteCacheServer", 
ICacheEventLogger.GETMATCHING_EVENT, e.getMessage()
-                    + cacheName + " pattern: " + pattern );
+                cacheEventLogger.logError( "RemoteCacheServer", 
CacheEventType.GETMATCHING_EVENT,
+                        e.getMessage() + cacheName + " pattern: " + pattern );
             }
         }
 
@@ -1182,8 +1175,8 @@ public class RemoteCacheServer<K, V>
         {
             if ( cacheEventLogger != null )
             {
-                cacheEventLogger.logError( "RemoteCacheServer", 
ICacheEventLogger.UPDATE_EVENT, e.getMessage()
-                    + " REGION: " + item.cacheName() + " ITEM: " + item );
+                cacheEventLogger.logError( "RemoteCacheServer", 
CacheEventType.UPDATE_EVENT,
+                        e.getMessage() + " REGION: " + item.cacheName() + " 
ITEM: " + item );
             }
 
             log.error( "Trouble in Update. requesterId [{0}]", requesterId, e 
);
@@ -1258,7 +1251,8 @@ public class RemoteCacheServer<K, V>
     public void remove( final String cacheName, final K key, final long 
requesterId )
         throws IOException
     {
-        final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, 
requesterId, ICacheEventLogger.REMOVE_EVENT );
+        final ICacheEvent<K> cacheEvent = createICacheEvent( cacheName, key, 
requesterId,
+                CacheEventType.REMOVE_EVENT );
         try
         {
             processRemove( cacheName, key, requesterId );
@@ -1295,7 +1289,8 @@ public class RemoteCacheServer<K, V>
     public void removeAll( final String cacheName, final long requesterId )
         throws IOException
     {
-        final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
"all", requesterId, ICacheEventLogger.REMOVEALL_EVENT );
+        final ICacheEvent<String> cacheEvent = createICacheEvent( cacheName, 
"all", requesterId,
+                CacheEventType.REMOVEALL_EVENT );
         try
         {
             processRemoveAll( cacheName, requesterId );
@@ -1349,7 +1344,8 @@ public class RemoteCacheServer<K, V>
     public void removeCacheListener( final String cacheName, final long 
listenerId )
     {
         final String message = "Removing listener for cache region = [" + 
cacheName + "] and listenerId [" + listenerId + "]";
-        logApplicationEvent( "RemoteCacheServer", "removeCacheListener", 
message );
+        logApplicationEvent( "RemoteCacheServer", 
CacheEventType.REMOVECACHELISTENER_EVENT,
+                message );
         log.info( message );
 
         final boolean isClusterListener = isRequestFromCluster( listenerId );
@@ -1429,7 +1425,7 @@ public class RemoteCacheServer<K, V>
         {
             for (final String cacheName : cacheListenersMap.keySet())
             {
-                for (int i = 0; i <= listenerId[0]; i++)
+                for (long i = 0; i <= listenerId.get(0); i++)
                 {
                     removeCacheListener( cacheName, i );
                 }
@@ -1477,7 +1473,8 @@ public class RemoteCacheServer<K, V>
     public void update( final ICacheElement<K, V> item, final long requesterId 
)
         throws IOException
     {
-        final ICacheEvent<ICacheElement<K, V>> cacheEvent = createICacheEvent( 
item, requesterId, ICacheEventLogger.UPDATE_EVENT );
+        final ICacheEvent<ICacheElement<K, V>> cacheEvent = createICacheEvent( 
item,
+                requesterId, CacheEventType.UPDATE_EVENT );
         try
         {
             processUpdate( item, requesterId );
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java
index 65dd896d..e68b1269 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java
@@ -40,6 +40,7 @@ import org.apache.commons.jcs4.auxiliary.remote.RemoteUtils;
 import org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheConstants;
 import org.apache.commons.jcs4.engine.behavior.ICacheServiceAdmin;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.apache.commons.jcs4.log.Log;
 import org.apache.commons.jcs4.utils.config.OptionConverter;
 import org.apache.commons.jcs4.utils.config.PropertySetter;
@@ -167,7 +168,8 @@ public class RemoteCacheServerFactory
             final String message = "RMI registry looks fine.  Found [" + obj + 
"] in registry [" + namingURL + "]";
             if ( cacheEventLogger != null )
             {
-                cacheEventLogger.logApplicationEvent( 
"RegistryKeepAliveRunner", "Naming.lookup", message );
+                cacheEventLogger.logApplicationEvent( 
"RegistryKeepAliveRunner",
+                        CacheEventType.NAMINGLOOKUP_EVENT, message );
             }
             log.debug( message );
         }
@@ -179,7 +181,8 @@ public class RemoteCacheServerFactory
             log.error( message, ex );
             if ( cacheEventLogger != null )
             {
-                cacheEventLogger.logError( "RegistryKeepAliveRunner", 
"Naming.lookup", message + ":" + ex.getMessage() );
+                cacheEventLogger.logError( "RegistryKeepAliveRunner",
+                        CacheEventType.NAMINGLOOKUP_EVENT, message + ":" + 
ex.getMessage() );
             }
 
             registry = RemoteUtils.createRegistry(registryPort);
@@ -188,12 +191,14 @@ public class RemoteCacheServerFactory
             {
                 if (registry != null)
                 {
-                    cacheEventLogger.logApplicationEvent( 
"RegistryKeepAliveRunner", "createRegistry",
+                    cacheEventLogger.logApplicationEvent( 
"RegistryKeepAliveRunner",
+                            CacheEventType.CREATEREGISTRY_EVENT,
                             "Successfully created registry [" + serviceName + 
"]." );
                 }
                 else
                 {
-                    cacheEventLogger.logError( "RegistryKeepAliveRunner", 
"createRegistry",
+                    cacheEventLogger.logError( "RegistryKeepAliveRunner",
+                            CacheEventType.CREATEREGISTRY_EVENT,
                             "Could not start registry [" + serviceName + "]." 
);
                 }
             }
@@ -206,7 +211,8 @@ public class RemoteCacheServerFactory
             final String message = "Successfully rebound server to registry [" 
+ serviceName + "].";
             if ( cacheEventLogger != null )
             {
-                cacheEventLogger.logApplicationEvent( 
"RegistryKeepAliveRunner", "registerServer", message );
+                cacheEventLogger.logApplicationEvent( 
"RegistryKeepAliveRunner",
+                        CacheEventType.REGISTERSERVER_EVENT, message );
             }
             log.info( message );
         }
@@ -216,7 +222,8 @@ public class RemoteCacheServerFactory
             log.error( message, e );
             if ( cacheEventLogger != null )
             {
-                cacheEventLogger.logError( "RegistryKeepAliveRunner", 
"registerServer", message + ":"
+                cacheEventLogger.logError( "RegistryKeepAliveRunner",
+                        CacheEventType.REGISTERSERVER_EVENT, message + ":"
                     + e.getMessage() );
             }
         }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEvent.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEvent.java
index ae66ca12..63156df4 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEvent.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEvent.java
@@ -22,130 +22,53 @@ package org.apache.commons.jcs4.engine.logging;
 import java.util.Date;
 
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 
 /** It's returned from create and passed into log. */
-public class CacheEvent<K>
-    implements ICacheEvent<K>
-{
-    /** Don't change. */
-    private static final long serialVersionUID = -5913139566421714330L;
-
-    /** The time at which this object was created. */
-    private final long createTime = System.currentTimeMillis();
-
-    /** The auxiliary or other source of the event. */
-    private String source;
-
-    /** The cache region */
-    private String region;
-
-    /** The event name: update, get, remove, etc. */
-    private String eventName;
-
-    /** Disk location, ip, etc. */
-    private String optionalDetails;
-
-    /** The key that was put or retrieved. */
-    private K key;
-
-    /**
-     * The time at which this object was created.
-     *
-     * @return the createTime
-     */
-    public long getCreateTime()
-    {
-        return createTime;
-    }
-
-    /**
-     * @return the eventName
-     */
-    @Override
-       public String getEventName()
-    {
-        return eventName;
-    }
-
-    /**
-     * @return the key
-     */
-    @Override
-       public K getKey()
-    {
-        return key;
-    }
-
-    /**
-     * @return the optionalDetails
-     */
-    @Override
-       public String getOptionalDetails()
-    {
-        return optionalDetails;
-    }
+public record CacheEvent<K>(
+        /** The time at which this object was created. */
+        long createTime,
 
-    /**
-     * @return the region
-     */
-    @Override
-       public String getRegion()
-    {
-        return region;
-    }
+        /** The auxiliary or other source of the event. */
+        String source,
 
-    /**
-     * @return the source
-     */
-    @Override
-       public String getSource()
-    {
-        return source;
-    }
+        /** The cache region */
+        String region,
 
-    /**
-     * @param eventName the eventName to set
-     */
-    @Override
-       public void setEventName( final String eventName )
-    {
-        this.eventName = eventName;
-    }
+        /** The event type: update, get, remove, etc. */
+        CacheEventType eventType,
 
-    /**
-     * @param key the key to set
-     */
-    @Override
-       public void setKey( final K key )
-    {
-        this.key = key;
-    }
+        /** Disk location, ip, etc. */
+        String optionalDetails,
 
-    /**
-     * @param optionalDetails the optionalDetails to set
-     */
-    @Override
-       public void setOptionalDetails( final String optionalDetails )
-    {
-        this.optionalDetails = optionalDetails;
-    }
+        /** The key that was put or retrieved. */
+        K key
+) implements ICacheEvent<K>
+{
+    /** Don't change. */
+    private static final long serialVersionUID = -5913139566421714330L;
 
     /**
-     * @param region the region to set
+     * Default Constructor
      */
-    @Override
-       public void setRegion( final String region )
+    public CacheEvent()
     {
-        this.region = region;
+        this(System.currentTimeMillis(), null, null, null, null, null);
     }
 
     /**
-     * @param source the source to set
+     * Constructor
+     *
+     * @param source
+     * @param region
+     * @param eventType
+     * @param optionalDetails
+     * @param key
      */
-    @Override
-       public void setSource( final String source )
+    public CacheEvent(final String source, final String region, CacheEventType 
eventType,
+            String optionalDetails, K key)
     {
-        this.source = source;
+        this(System.currentTimeMillis(), source, region, eventType, 
optionalDetails, key);
     }
 
     /**
@@ -155,7 +78,8 @@ public class CacheEvent<K>
     public String toString()
     {
        final StringBuilder sb = new StringBuilder();
-       sb.append("CacheEvent: ").append(eventName).append(" Created: 
").append(new Date(createTime));
+       sb.append("CacheEvent: ").append(eventType)
+         .append(" Created: ").append(new Date(createTime));
        if (source != null)
        {
                sb.append(" Source: ").append(source);
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLogger.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLogger.java
index 2dde83f4..2140a1d3 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLogger.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLogger.java
@@ -38,46 +38,24 @@ public class CacheEventLoggerDebugLogger
 
     /**
      * @param source
-     * @param region
-     * @param eventName
+     * @param eventType
      * @param optionalDetails
-     * @param key
-     * @return ICacheEvent
      */
     @Override
-    public <T> ICacheEvent<T> createICacheEvent( final String source, final 
String region, final String eventName,
-            final String optionalDetails, final T key )
+    public void logApplicationEvent( final String source, final CacheEventType 
eventType, final String optionalDetails )
     {
-        final ICacheEvent<T> event = new CacheEvent<>();
-        event.setSource( source );
-        event.setRegion( region );
-        event.setEventName( eventName );
-        event.setOptionalDetails( optionalDetails );
-        event.setKey( key );
-
-        return event;
-    }
-
-    /**
-     * @param source
-     * @param eventName
-     * @param optionalDetails
-     */
-    @Override
-    public void logApplicationEvent( final String source, final String 
eventName, final String optionalDetails )
-    {
-        log.debug( "{0} | {1} | {2}", source, eventName, optionalDetails );
+        log.debug( "{0} | {1} | {2}", source, eventType, optionalDetails );
     }
 
     /**
      * @param source
-     * @param eventName
+     * @param eventType
      * @param errorMessage
      */
     @Override
-    public void logError( final String source, final String eventName, final 
String errorMessage )
+    public void logError( final String source, final CacheEventType eventType, 
final String errorMessage )
     {
-        log.debug( "{0} | {1} | {2}", source, eventName, errorMessage );
+        log.debug( "{0} | {1} | {2}", source, eventType, errorMessage );
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEvent.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEvent.java
index 2148f6b4..b958f6e4 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEvent.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEvent.java
@@ -21,6 +21,8 @@ package org.apache.commons.jcs4.engine.logging.behavior;
 
 import java.io.Serializable;
 
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
+
 /** Defines the common fields required by a cache event. */
 public interface ICacheEvent<K>
     extends Serializable
@@ -28,50 +30,25 @@ public interface ICacheEvent<K>
     /**
      * @return the eventName
      */
-    String getEventName();
+    CacheEventType eventType();
 
     /**
      * @return the key
      */
-    K getKey();
+    K key();
 
     /**
      * @return the optionalDetails
      */
-    String getOptionalDetails();
+    String optionalDetails();
 
     /**
      * @return the region
      */
-    String getRegion();
+    String region();
 
     /**
      * @return the source
      */
-    String getSource();
-
-    /**
-     * @param eventName the eventName to set
-     */
-    void setEventName( String eventName );
-
-    /**
-     * @param key the key to set
-     */
-    void setKey( K key );
-
-    /**
-     * @param optionalDetails the optionalDetails to set
-     */
-    void setOptionalDetails( String optionalDetails );
-
-    /**
-     * @param region the region to set
-     */
-    void setRegion( String region );
-
-    /**
-     * @param source the source to set
-     */
-    void setSource( String source );
+    String source();
 }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEventLogger.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEventLogger.java
index 303fe711..09731240 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEventLogger.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/logging/behavior/ICacheEventLogger.java
@@ -1,5 +1,7 @@
 package org.apache.commons.jcs4.engine.logging.behavior;
 
+import org.apache.commons.jcs4.engine.logging.CacheEvent;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -28,65 +30,105 @@ package org.apache.commons.jcs4.engine.logging.behavior;
  */
 public interface ICacheEventLogger
 {
-       // TODO: Use enum
-    /** ICache update */
-    String UPDATE_EVENT = "update";
+    public enum CacheEventType
+    {
+        /** ICache update */
+        UPDATE_EVENT("update"),
+
+        /** ICache get */
+        GET_EVENT("get"),
+
+        /** ICache getMultiple */
+        GETMULTIPLE_EVENT("getMultiple"),
+
+        /** ICache getMatching */
+        GETMATCHING_EVENT("getMatching"),
+
+        /** ICache remove */
+        REMOVE_EVENT("remove"),
+
+        /** ICache removeAll */
+        REMOVEALL_EVENT("removeAll"),
+
+        /** ICache dispose */
+        DISPOSE_EVENT("dispose"),
+
+        /** RemoteAuxiliaryCache fixCache */
+        FIXCACHE_EVENT("fixCache"),
+
+        /** JDBCDiskCache deleteExpired */
+        DELETEEXPIRED_EVENT("deleteExpired"),
+
+        /** RemoteCacheServer addCacheListener */
+        ADDCACHELISTENER_EVENT("addCacheListener"),
+
+        /** RemoteCacheServer removeCacheListener */
+        REMOVECACHELISTENER_EVENT("removeCacheListener"),
+
+        /** RemoteCacheNoWait InitiatedFailover */
+        INITIATEDFAILOVER_EVENT("InitiatedFailover"),
+
+        /** RemoteCacheNoWait RestoredPrimary */
+        RESTOREDPRIMARY_EVENT("RestoredPrimary"),
 
-    /** ICache get */
-    String GET_EVENT = "get";
+        /** RemoteCacheServerFactory Naming.lookup */
+        NAMINGLOOKUP_EVENT("Naming.lookup"),
 
-    /** ICache getMultiple */
-    String GETMULTIPLE_EVENT = "getMultiple";
+        /** RemoteCacheServerFactory createRegistry */
+        CREATEREGISTRY_EVENT("createRegistry"),
 
-    /** ICache getMatching */
-    String GETMATCHING_EVENT = "getMatching";
+        /** RemoteCacheServerFactory registerServer */
+        REGISTERSERVER_EVENT("registerServer"),
 
-    /** ICache remove */
-    String REMOVE_EVENT = "remove";
+        /** ICache enqueue. The time in the queue. */
+        ENQUEUE_EVENT("enqueue");
 
-    /** ICache removeAll */
-    String REMOVEALL_EVENT = "removeAll";
+        public final String label;
 
-    /** ICache dispose */
-    String DISPOSE_EVENT = "dispose";
+        private CacheEventType(String label)
+        {
+            this.label = label;
+        }
+    }
 
-    /** ICache enqueue. The time in the queue. */
-    //String ENQUEUE_EVENT = "enqueue";
     /**
      * Creates an event.
      *
-     * @param source   e.g. RemoteCacheServer
-     * @param region   the name of the region
-     * @param eventName   e.g. update, get, put, remove
-     * @param optionalDetails   any extra message
-     * @param key   the cache key
+     * @param source e.g. RemoteCacheServer
+     * @param region the name of the region
+     * @param eventType e.g. update, get, put, remove
+     * @param optionalDetails any extra message
+     * @param key the cache key
      * @return ICacheEvent
      */
-    <T> ICacheEvent<T> createICacheEvent( String source, String region,
-            String eventName, String optionalDetails, T key );
+    default <T> ICacheEvent<T> createICacheEvent( String source, String region,
+            CacheEventType eventType, String optionalDetails, T key )
+    {
+        return new CacheEvent<>(source, region, eventType, optionalDetails, 
key);
+    }
 
     /**
      * Logs an event. These are internal application events that do not 
correspond to ICache calls.
      *
-     * @param source   e.g. RemoteCacheServer
-     * @param eventName   e.g. update, get, put, remove
-     * @param optionalDetails   any extra message
+     * @param source e.g. RemoteCacheServer
+     * @param eventType e.g. update, get, put, remove
+     * @param optionalDetails any extra message
      */
-    void logApplicationEvent( String source, String eventName, String 
optionalDetails );
+    default void logApplicationEvent( String source, CacheEventType eventType, 
String optionalDetails ) {}
 
     /**
      * Logs an error.
      *
-     * @param source   e.g. RemoteCacheServer
-     * @param eventName   e.g. update, get, put, remove
-     * @param errorMessage   any error message
+     * @param source e.g. RemoteCacheServer
+     * @param eventType e.g. update, get, put, remove
+     * @param errorMessage any error message
      */
-    void logError( String source, String eventName, String errorMessage );
+    default void logError( String source, CacheEventType eventType, String 
errorMessage ) {}
 
     /**
      * Logs an event.
      *
      * @param event   the event created in createICacheEvent
      */
-    <T> void logICacheEvent( ICacheEvent<T> event );
+    default <T> void logICacheEvent( ICacheEvent<T> event ) {}
 }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/io/ObjectInputStreamClassLoaderAware.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/io/ObjectInputStreamClassLoaderAware.java
index 00bef68d..6a9f37f3 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/io/ObjectInputStreamClassLoaderAware.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/io/ObjectInputStreamClassLoaderAware.java
@@ -57,6 +57,7 @@ public class ObjectInputStreamClassLoaderAware extends 
ObjectInputStream
         return Class.forName(desc.getName(), false, classLoader);
     }
 
+    @SuppressWarnings("deprecation")
     @Override
     protected Class<?> resolveProxyClass(final String[] interfaces) throws 
IOException, ClassNotFoundException
     {
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/AuxiliaryCacheConfiguratorUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/AuxiliaryCacheConfiguratorUnitTest.java
index d9f90c24..5914476f 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/AuxiliaryCacheConfiguratorUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/AuxiliaryCacheConfiguratorUnitTest.java
@@ -28,7 +28,6 @@ import java.util.Properties;
 
 import org.apache.commons.jcs4.engine.behavior.IElementSerializer;
 import org.apache.commons.jcs4.engine.control.MockElementSerializer;
-import org.apache.commons.jcs4.engine.logging.MockCacheEventLogger;
 import org.apache.commons.jcs4.utils.serialization.StandardSerializer;
 import org.junit.jupiter.api.Test;
 
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java
index aaf9602d..42f188c9 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java
@@ -94,13 +94,6 @@ public class MockAuxiliaryCache<K, V>
         return cacheType;
     }
 
-    /** @return null */
-    @Override
-    public String getEventLoggingExtraInfo()
-    {
-        return null;
-    }
-
     /**
      * Return the keys in this cache.
      *
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockCacheEventLogger.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockCacheEventLogger.java
index ce56c3a8..75709f37 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockCacheEventLogger.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockCacheEventLogger.java
@@ -48,40 +48,43 @@ public class MockCacheEventLogger
     /** List of messages */
     public List<String> errorMessages = new ArrayList<>();
 
+    /** for configurator test */
+    private String testProperty;
+
     /**
      * @param source
      * @param region
-     * @param eventName
+     * @param eventType
      * @param optionalDetails
      * @param key
      * @return ICacheEvent
      */
     @Override
     public <T> ICacheEvent<T> createICacheEvent( final String source, final 
String region,
-            final String eventName, final String optionalDetails, final T key )
+            final CacheEventType eventType, final String optionalDetails, 
final T key )
     {
         startICacheEventCalls++;
-        return new CacheEvent<>();
+        return new CacheEvent<>(source, region, eventType, optionalDetails, 
key);
     }
 
     /**
      * @param source
-     * @param eventName
+     * @param eventType
      * @param optionalDetails
      */
     @Override
-    public void logApplicationEvent( final String source, final String 
eventName, final String optionalDetails )
+    public void logApplicationEvent( final String source, final CacheEventType 
eventType, final String optionalDetails )
     {
         applicationEventCalls++;
     }
 
     /**
      * @param source
-     * @param eventName
+     * @param eventType
      * @param errorMessage
      */
     @Override
-    public void logError( final String source, final String eventName, final 
String errorMessage )
+    public void logError( final String source, final CacheEventType eventType, 
final String errorMessage )
     {
         errorEventCalls++;
         errorMessages.add( errorMessage );
@@ -95,4 +98,20 @@ public class MockCacheEventLogger
     {
         endICacheEventCalls++;
     }
+
+    /**
+     * @return the testProperty
+     */
+    public String getTestProperty()
+    {
+        return testProperty;
+    }
+
+    /**
+     * @param testProperty the testProperty to set
+     */
+    public void setTestProperty(String testProperty)
+    {
+        this.testProperty = testProperty;
+    }
 }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListenerUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListenerUnitTest.java
index 7f779916..da1cb77a 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListenerUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPDiscoveryListenerUnitTest.java
@@ -25,11 +25,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.jcs4.auxiliary.MockCacheEventLogger;
 import org.apache.commons.jcs4.engine.ZombieCacheServiceNonLocal;
 import org.apache.commons.jcs4.engine.behavior.IElementSerializer;
 import org.apache.commons.jcs4.engine.control.CompositeCacheManager;
 import org.apache.commons.jcs4.engine.control.MockKeyMatcher;
-import org.apache.commons.jcs4.engine.logging.MockCacheEventLogger;
 import org.apache.commons.jcs4.engine.match.behavior.IKeyMatcher;
 import org.apache.commons.jcs4.utils.discovery.DiscoveredService;
 import org.apache.commons.jcs4.utils.serialization.StandardSerializer;
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java
index 5d2d7925..0f93e219 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java
@@ -125,17 +125,6 @@ public class MockRemoteCacheClient<K, V>
         return CacheType.REMOTE_CACHE;
     }
 
-    /**
-     * Nothing important
-     *
-     * @return null
-     */
-    @Override
-    public String getEventLoggingExtraInfo()
-    {
-        return null;
-    }
-
     /**
      * @return null
      */
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheConfiguratorUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheConfiguratorUnitTest.java
index 07db90d3..0a2e71a9 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheConfiguratorUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheConfiguratorUnitTest.java
@@ -29,7 +29,7 @@ import 
org.apache.commons.jcs4.auxiliary.AuxiliaryCacheConfigurator;
 import org.apache.commons.jcs4.auxiliary.MockAuxiliaryCache;
 import org.apache.commons.jcs4.auxiliary.MockAuxiliaryCacheAttributes;
 import org.apache.commons.jcs4.auxiliary.MockAuxiliaryCacheFactory;
-import org.apache.commons.jcs4.engine.logging.MockCacheEventLogger;
+import org.apache.commons.jcs4.auxiliary.MockCacheEventLogger;
 import org.junit.jupiter.api.Test;
 
 /** Tests for the configurator. */
@@ -71,8 +71,8 @@ class CompositeCacheConfiguratorUnitTest
         assertEquals(MockAuxiliaryCache.class, result.getClass(), "Should have 
MockAuxiliaryCache.");
         assertNotNull( manager.getRegisteredAuxiliaryFactory(auxName), "Should 
have a factory." );
         assertEquals(MockAuxiliaryCacheFactory.class, 
manager.getRegisteredAuxiliaryFactory(auxName).getClass(), "Should have 
MockAuxiliaryCacheFactory.");
-        assertNotNull( result.getCacheEventLogger(), "Should have an event 
logger." );
-        assertEquals(MockCacheEventLogger.class, 
result.getCacheEventLogger().getClass(), "Should have a MockCacheEventLogger.");
+        assertNotNull( result.getCacheEventLogger().get(), "Should have an 
event logger." );
+        assertEquals(MockCacheEventLogger.class, 
result.getCacheEventLogger().get().getClass(), "Should have a 
MockCacheEventLogger.");
         assertNotNull( result.getKeyMatcher(), "Should have a key matcher." );
         assertEquals(MockKeyMatcher.class, result.getKeyMatcher().getClass(), 
"Should have a MockKeyMatcher.");
     }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java
index 37f6eb6e..e0e1d285 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java
@@ -116,13 +116,6 @@ class CompositeCacheDiskUsageUnitTest
             return cacheType;
         }
 
-        /** @return null */
-        @Override
-        public String getEventLoggingExtraInfo()
-        {
-            return null;
-        }
-
         /**
          * @return null
          * @throws IOException
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLoggerUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLoggerUnitTest.java
index 9d832ce9..aa68f956 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLoggerUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/CacheEventLoggerDebugLoggerUnitTest.java
@@ -25,6 +25,7 @@ import java.io.StringWriter;
 
 import org.apache.commons.jcs4.TestLogConfigurationUtil;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
+import 
org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger.CacheEventType;
 import org.junit.jupiter.api.Test;
 
 /** Tests for the debug implementation */
@@ -39,7 +40,7 @@ class CacheEventLoggerDebugLoggerUnitTest
         final String logCategoryName = "testLogApplicationEvent_normal";
 
         final String source = "mySource";
-        final String eventName = "MyEventName";
+        final CacheEventType eventType = CacheEventType.ENQUEUE_EVENT;
         final String optionalDetails = "SomeExtraData";
 
         final StringWriter stringWriter = new StringWriter();
@@ -49,12 +50,12 @@ class CacheEventLoggerDebugLoggerUnitTest
         logger.setLogCategoryName( logCategoryName );
 
         // DO WORK
-        logger.logApplicationEvent( source, eventName, optionalDetails );
+        logger.logApplicationEvent( source, eventType, optionalDetails );
 
         // VERIFY
         final String result = stringWriter.toString();
         assertTrue( result.indexOf( source ) != -1, "An event with the source 
should have been logged:" + result );
-        assertTrue( result.indexOf( eventName ) != -1,
+        assertTrue( result.indexOf( eventType.toString() ) != -1,
                     "An event with the event name should have been logged:" + 
result );
         assertTrue( result.indexOf( optionalDetails ) != -1,
                     "An event with the optionalDetails should have been 
logged:" + result );
@@ -68,7 +69,7 @@ class CacheEventLoggerDebugLoggerUnitTest
         final String logCategoryName = "testLogApplicationEvent_normal";
 
         final String source = "mySource";
-        final String eventName = "MyEventName";
+        final CacheEventType eventType = CacheEventType.ENQUEUE_EVENT;
         final String errorMessage = "SomeExtraData";
 
         final StringWriter stringWriter = new StringWriter();
@@ -78,12 +79,12 @@ class CacheEventLoggerDebugLoggerUnitTest
         logger.setLogCategoryName( logCategoryName );
 
         // DO WORK
-        logger.logError( source, eventName, errorMessage );
+        logger.logError( source, eventType, errorMessage );
 
         // VERIFY
         final String result = stringWriter.toString();
         assertTrue( result.indexOf( source ) != -1, "An event with the source 
should have been logged:" + result );
-        assertTrue( result.indexOf( eventName ) != -1,
+        assertTrue( result.indexOf( eventType.toString() ) != -1,
                     "An event with the event name should have been logged:" + 
result );
         assertTrue( result.indexOf( errorMessage ) != -1,
                     "An event with the errorMessage should have been logged:" 
+ result );
@@ -98,7 +99,7 @@ class CacheEventLoggerDebugLoggerUnitTest
 
         final String source = "mySource";
         final String region = "my region";
-        final String eventName = "MyEventName";
+        final CacheEventType eventType = CacheEventType.ENQUEUE_EVENT;
         final String optionalDetails = "SomeExtraData";
         final String key = "my key";
 
@@ -108,7 +109,7 @@ class CacheEventLoggerDebugLoggerUnitTest
         final CacheEventLoggerDebugLogger logger = new 
CacheEventLoggerDebugLogger();
         logger.setLogCategoryName( logCategoryName );
 
-        final ICacheEvent<String> event = logger.createICacheEvent( source, 
region, eventName, optionalDetails, key );
+        final ICacheEvent<String> event = logger.createICacheEvent( source, 
region, eventType, optionalDetails, key );
 
         // DO WORK
         logger.logICacheEvent( event );
@@ -117,8 +118,8 @@ class CacheEventLoggerDebugLoggerUnitTest
         final String result = stringWriter.toString();
         assertTrue( result.indexOf( source ) != -1, "An event with the source 
should have been logged:" + result );
         assertTrue( result.indexOf( region ) != -1, "An event with the region 
should have been logged:" + result );
-        assertTrue( result.indexOf( eventName ) != -1,
-                    "An event with the event name should have been logged:" + 
result );
+        assertTrue( result.indexOf( eventType.toString() ) != -1,
+                    "An event with the event type should have been logged:" + 
result );
         assertTrue( result.indexOf( optionalDetails ) != -1,
                     "An event with the optionalDetails should have been 
logged:" + result );
         assertTrue( result.indexOf( key ) != -1, "An event with the key should 
have been logged:" + result );
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/MockCacheEventLogger.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/MockCacheEventLogger.java
deleted file mode 100644
index 33840a24..00000000
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/logging/MockCacheEventLogger.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.apache.commons.jcs4.engine.logging;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
-import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
-
-/**
- * For testing the configurator.
- */
-public class MockCacheEventLogger
-    implements ICacheEventLogger
-{
-    /** Test property */
-    private String testProperty;
-
-    /**
-     * @param source
-     * @param region
-     * @param eventName
-     * @param optionalDetails
-     * @param key
-     * @return ICacheEvent
-     */
-    @Override
-    public <T> ICacheEvent<T> createICacheEvent( final String source, final 
String region, final String eventName, final String optionalDetails,
-                                          final T key )
-    {
-        return new CacheEvent<>();
-    }
-
-    /**
-     * @return testProperty
-     */
-    public String getTestProperty()
-    {
-        return testProperty;
-    }
-
-    /**
-     * @param source
-     * @param eventName
-     * @param optionalDetails
-     */
-    @Override
-    public void logApplicationEvent( final String source, final String 
eventName, final String optionalDetails )
-    {
-        // TODO Auto-generated method stub
-    }
-
-    /**
-     * @param source
-     * @param eventName
-     * @param errorMessage
-     */
-    @Override
-    public void logError( final String source, final String eventName, final 
String errorMessage )
-    {
-        // TODO Auto-generated method stub
-    }
-
-    /**
-     * @param event
-     */
-    @Override
-    public <T> void logICacheEvent( final ICacheEvent<T> event )
-    {
-        // TODO Auto-generated method stub
-    }
-
-    /**
-     * @param testProperty
-     */
-    public void setTestProperty( final String testProperty )
-    {
-        this.testProperty = testProperty;
-    }
-}

Reply via email to