diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
index 9230f5b..acffd3e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java
@@ -84,6 +84,8 @@ public class AsyncLogger extends Logger {
     private static final StatusLogger LOGGER = StatusLogger.getLogger();
     private static final ThreadNameStrategy THREAD_NAME_STRATEGY = ThreadNameStrategy.create();
     private static final ThreadLocal<Info> threadlocalInfo = new ThreadLocal<>();
+    private static final boolean RINGBUFFER_DROP_ENABLED =
+            PropertiesUtil.getProperties().getBooleanProperty("AsyncLogger.RingBufferDropEnabled", false);
 
     static enum ThreadNameStrategy { // LOG4J2-467
         CACHED {
@@ -247,6 +249,13 @@ public class AsyncLogger extends Logger {
             config.loggerConfig.log(getName(), fqcn, marker, level, message, thrown);
             return;
         }
+
+        // drop event in case property is set and Ringbuffer reached its capacity
+        if (RINGBUFFER_DROP_ENABLED && temp.getRingBuffer().remainingCapacity() == 0) {
+            LOGGER.warn("Ringbuffer reached its capacity. Dropping the event.");
+            return;
+        }
+
         message.getFormattedMessage(); // LOG4J2-763: ask message to freeze parameters
         final boolean includeLocation = config.loggerConfig.isIncludeLocation();
         info.translator.setValues(this, getName(), marker, fqcn, level, message, //
