diff --git a/common-logging/pom.xml b/common-logging/pom.xml
index 1fef17a..a87d31a 100644
--- a/common-logging/pom.xml
+++ b/common-logging/pom.xml
@@ -67,6 +67,11 @@
             <artifactId>commons-lang3</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.powermock</groupId>
             <artifactId>powermock-api-mockito2</artifactId>
             <scope>test</scope>
diff --git a/common-logging/src/main/java/org/onap/policy/common/logging/eelf/EventTrackInfoHandler.java b/common-logging/src/main/java/org/onap/policy/common/logging/eelf/EventTrackInfoHandler.java
index 4b5c57a..ddcf7f8 100644
--- a/common-logging/src/main/java/org/onap/policy/common/logging/eelf/EventTrackInfoHandler.java
+++ b/common-logging/src/main/java/org/onap/policy/common/logging/eelf/EventTrackInfoHandler.java
@@ -23,8 +23,8 @@
 import java.time.Duration;
 import java.time.Instant;
 import java.util.ArrayList;
+import java.util.Map;
 import java.util.TimerTask;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
 /**
@@ -63,7 +63,7 @@
 
         ArrayList<String> expiredEvents = null;
 
-        for (ConcurrentHashMap.Entry<String, EventData> entry : eventInfo.entrySet()) {
+        for (Map.Entry<String, EventData> entry : eventInfo.entrySet()) {
             EventData event = entry.getValue();
             startTime = event.getStartTime();
             ns = Duration.between(startTime, Instant.now()).getSeconds();
diff --git a/common-logging/src/main/java/org/onap/policy/common/logging/eelf/PolicyLogger.java b/common-logging/src/main/java/org/onap/policy/common/logging/eelf/PolicyLogger.java
index f1b25d7..c32cf0b 100644
--- a/common-logging/src/main/java/org/onap/policy/common/logging/eelf/PolicyLogger.java
+++ b/common-logging/src/main/java/org/onap/policy/common/logging/eelf/PolicyLogger.java
@@ -57,7 +57,6 @@
 import java.util.Iterator;
 import java.util.Properties;
 import java.util.Timer;
-import java.util.TimerTask;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentMap;
 import java.util.function.Consumer;
@@ -86,7 +85,6 @@
     private static String hostAddress = null;
     private static String component = null;
 
-    private static TimerTask ttrcker = null;
     private static boolean isEventTrackerRunning = false;
     private static Timer timer = null;
 
@@ -1186,7 +1184,7 @@
     private static void startCleanUp() {
 
         if (!isEventTrackerRunning) {
-            ttrcker = new EventTrackInfoHandler();
+            EventTrackInfoHandler ttrcker = new EventTrackInfoHandler();
             timer = new Timer(true);
             timer.scheduleAtFixedRate(ttrcker, timerDelayTime, checkInterval);
             debugLogger.info("EventTrackInfoHandler begins! : " + new Date());
diff --git a/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/DisplayUtils.java b/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/DisplayUtils.java
index dc74044..d21af4c 100644
--- a/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/DisplayUtils.java
+++ b/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/DisplayUtils.java
@@ -31,11 +31,16 @@
         // do nothing
     }
 
+    /*
+     * As the comment above says, these purposely write to System.out rather than a
+     * logger, thus sonar is disabled.
+     */
+
     public static void displayMessage(Object message) {
-        System.out.println(message);
+        System.out.println(message);    // NOSONAR
     }
 
     public static void displayErrorMessage(Object msg) {
-        System.err.println(msg);
+        System.err.println(msg);        // NOSONAR
     }
 }
diff --git a/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/FlexLogger.java b/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/FlexLogger.java
index 030363d..f5e84ac 100644
--- a/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/FlexLogger.java
+++ b/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/FlexLogger.java
@@ -209,21 +209,13 @@
             className = new FlexLogger().getClassName();
         }
 
-        if (!eelfLoggerMap.containsKey(className)) {
-            logger = new EelfLogger(clazz, isNewTransaction);
-            eelfLoggerMap.put(className, logger);
-        } else {
-            logger = eelfLoggerMap.get(className);
-            if (logger == null) {
-                logger = new EelfLogger(clazz, isNewTransaction);
-                eelfLoggerMap.put(className, logger);
-            }
-            // installl already created but it is new transaction
-            if (isNewTransaction) {
-                String transId = PolicyLogger.postMdcInfoForEvent(null);
-                logger.setTransId(transId);
-            }
+        logger = eelfLoggerMap.computeIfAbsent(className, key -> new EelfLogger(clazz, isNewTransaction));
+
+        if (isNewTransaction) {
+            String transId = PolicyLogger.postMdcInfoForEvent(null);
+            logger.setTransId(transId);
         }
+
         displayMessage("eelfLoggerMap size : " + eelfLoggerMap.size() + " class name: " + className);
         return logger;
     }
diff --git a/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/Logger4J.java b/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/Logger4J.java
index 8802d17..fc0995b 100644
--- a/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/Logger4J.java
+++ b/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/Logger4J.java
@@ -496,17 +496,17 @@
 
     private void writeObject(ObjectOutputStream out) throws IOException {
         // write out 'methodName', 'className', 'transId' strings
-        out.writeObject(methodName);
-        out.writeObject(className);
-        out.writeObject(transId);
+        out.writeUTF(methodName);
+        out.writeUTF(className);
+        out.writeUTF(transId);
     }
 
     private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
 
         // read in 'methodName', 'className', 'transId' strings
-        methodName = (String) (in.readObject());
-        className = (String) (in.readObject());
-        transId = (String) (in.readObject());
+        methodName = in.readUTF();
+        className = in.readUTF();
+        transId = in.readUTF();
 
         // look up associated logger
         log = Logger.getLogger(className);
diff --git a/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/PropertyUtil.java b/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/PropertyUtil.java
index 38759bc..41539f2 100644
--- a/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/PropertyUtil.java
+++ b/common-logging/src/main/java/org/onap/policy/common/logging/flexlogger/PropertyUtil.java
@@ -45,6 +45,10 @@
          * This may be overridden by junit tests.
          */
         private static Timer timer = new Timer("PropertyUtil-Timer", true);
+
+        private LazyHolder() {
+            super();
+        }
     }
 
     // this table maps canonical file into a 'ListenerRegistration' instance
@@ -60,17 +64,13 @@
      */
     public static Properties getProperties(File file) throws IOException {
         // create an InputStream (may throw a FileNotFoundException)
-        FileInputStream fis = new FileInputStream(file);
-        try {
+        try (FileInputStream fis = new FileInputStream(file)) {
             // create the properties instance
             Properties rval = new Properties();
 
             // load properties (may throw an IOException)
             rval.load(fis);
             return rval;
-        } finally {
-            // close input stream
-            fis.close();
         }
     }
 
diff --git a/common-logging/src/test/java/org/onap/policy/common/logging/eelf/PolicyLoggerTest.java b/common-logging/src/test/java/org/onap/policy/common/logging/eelf/PolicyLoggerTest.java
index 6af3632..db4eb78 100644
--- a/common-logging/src/test/java/org/onap/policy/common/logging/eelf/PolicyLoggerTest.java
+++ b/common-logging/src/test/java/org/onap/policy/common/logging/eelf/PolicyLoggerTest.java
@@ -30,6 +30,7 @@
 import static com.att.eelf.configuration.Configuration.MDC_SERVER_IP_ADDRESS;
 import static com.att.eelf.configuration.Configuration.MDC_SERVICE_INSTANCE_ID;
 import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME;
+import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -613,7 +614,7 @@
 
     @Test
     public void testInitNullProperties() {
-        PolicyLogger.init(null);
+        assertThatCode(() -> PolicyLogger.init(null)).doesNotThrowAnyException();
     }
 
     @Test
@@ -630,7 +631,7 @@
         properties.setProperty("stop.check.point", "0");
         properties.setProperty("logger.property", "LOG4J");
 
-        PolicyLogger.init(properties);
+        assertThatCode(() -> PolicyLogger.init(properties)).doesNotThrowAnyException();
     }
 
     @Test
diff --git a/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/FlexLoggerTest.java b/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/FlexLoggerTest.java
index a74dd94..ebc4b21 100644
--- a/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/FlexLoggerTest.java
+++ b/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/FlexLoggerTest.java
@@ -21,6 +21,7 @@
 
 package org.onap.policy.common.logging.flexlogger;
 
+import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertSame;
 
@@ -131,7 +132,9 @@
         changedKeys.add("error.level");
         changedKeys.add("audit.level");
         PropertiesCallBack propertiesCallBack = new PropertiesCallBack("name");
-        propertiesCallBack.propertiesChanged(PropertyUtil.getProperties("config/policyLogger.properties"), changedKeys);
+        assertThatCode(() -> propertiesCallBack
+                        .propertiesChanged(PropertyUtil.getProperties("config/policyLogger.properties"), changedKeys))
+                                        .doesNotThrowAnyException();
     }
 
 }
diff --git a/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/Logger4JTest.java b/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/Logger4JTest.java
index 99c343c..d174aaf 100644
--- a/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/Logger4JTest.java
+++ b/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/Logger4JTest.java
@@ -21,6 +21,7 @@
 
 package org.onap.policy.common.logging.flexlogger;
 
+import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
@@ -41,7 +42,7 @@
 
     @Test
     public void testLogger4JClassOfQ() {
-        new Logger4J(this.getClass());
+        assertThatCode(() -> new Logger4J(this.getClass())).doesNotThrowAnyException();
     }
 
     @Test
diff --git a/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/SystemOutLoggerTest.java b/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/SystemOutLoggerTest.java
index 92df029..6804fd0 100644
--- a/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/SystemOutLoggerTest.java
+++ b/common-logging/src/test/java/org/onap/policy/common/logging/flexlogger/SystemOutLoggerTest.java
@@ -21,6 +21,7 @@
 
 package org.onap.policy.common.logging.flexlogger;
 
+import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -41,7 +42,7 @@
 
     @Test
     public void testSystemOutLoggerClassOfQ() {
-        new SystemOutLogger(SystemOutLoggerTest.class);
+        assertThatCode(() -> new SystemOutLogger(SystemOutLoggerTest.class)).doesNotThrowAnyException();
     }
 
     @Test
