diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
index 39d447d..7acd601 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
@@ -98,10 +98,7 @@ public final class StatusLogger extends AbstractLogger {
         listenersLock.writeLock().lock();
         try {
             listeners.add(listener);
-            final Level lvl = listener.getStatusLevel();
-            if (listenersLevel < lvl.intLevel()) {
-                listenersLevel = lvl.intLevel();
-            }
+            updatedListeners();
         } finally {
             listenersLock.writeLock().unlock();
         }
@@ -116,14 +113,7 @@ public final class StatusLogger extends AbstractLogger {
         listenersLock.writeLock().lock();
         try {
             listeners.remove(listener);
-            int lowest = Level.toLevel(DEFAULT_STATUS_LEVEL, Level.WARN).intLevel();
-            for (final StatusListener l : listeners) {
-                final int level = l.getStatusLevel().intLevel();
-                if (lowest < level) {
-                    lowest = level;
-                }
-            }
-            listenersLevel = lowest;
+            updatedListeners();
         } finally {
             listenersLock.writeLock().unlock();
         }
@@ -276,6 +266,27 @@ public final class StatusLogger extends AbstractLogger {
     }
 
     /**
+     * Get the maximum level of all registered listeners
+     *
+     * @return maxLevel
+     */
+    private int getMaxIntLevel() {
+        int maxLevel = Level.toLevel(DEFAULT_STATUS_LEVEL, Level.WARN).intLevel();
+        for (StatusListener listener : listeners) {
+            int lvl = listener.getStatusLevel().intLevel();
+            maxLevel = Math.max(maxLevel, lvl);
+        }
+        return maxLevel;
+    }
+
+    /**
+     * Call this method whenever the listener configuration has changed
+     */
+    public void updatedListeners() {
+        this.listenersLevel = getMaxIntLevel();
+    }
+
+    /**
      * Queue for status events.
      * @param <E> Object type to be stored in the queue.
      */
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/StatusConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/StatusConfiguration.java
index 4d2ee51..9416a26 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/StatusConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/status/StatusConfiguration.java
@@ -202,6 +202,9 @@ public class StatusConfiguration {
                 configured = true;
             }
         }
+        if (configured) {
+            this.logger.updatedListeners();
+        }
         return configured;
     }
 
