Reduces noise in the logs
diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
index 21bc0fc..c66d5c9 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
@@ -40,6 +40,7 @@
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.regex.Pattern;
 
 
@@ -53,6 +54,9 @@
 
     private static final Logger LOG = LogManager.getLogger(OgnlUtil.class);
 
+    // Flag used to reduce flooding logs with WARNs about using DevMode excluded packages
+    private final AtomicBoolean warnReported = new AtomicBoolean(false);
+
     private final ConcurrentMap<String, Object> expressions = new ConcurrentHashMap<>();
     private final ConcurrentMap<Class<?>, BeanInfo> beanInfoCache = new ConcurrentHashMap<>();
     private TypeConverter defaultConverter;
@@ -806,7 +810,10 @@
         memberAccess.setDisallowProxyMemberAccess(disallowProxyMemberAccess);
 
         if (devMode) {
-            LOG.warn("Working in devMode, using devMode excluded classes and packages!");
+            if (!warnReported.get()) {
+                warnReported.set(true);
+                LOG.warn("Working in devMode, using devMode excluded classes and packages!");
+            }
             memberAccess.setExcludedClasses(devModeExcludedClasses);
             memberAccess.setExcludedPackageNamePatterns(devModeExcludedPackageNamePatterns);
             memberAccess.setExcludedPackageNames(devModeExcludedPackageNames);