You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ck...@apache.org on 2019/05/22 03:44:21 UTC

[logging-log4j2] branch master updated: LOG4J2-2611: AsyncQueueFullPolicy configuration short values are case insensitive (#272)

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

ckozak pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/master by this push:
     new 700e540  LOG4J2-2611: AsyncQueueFullPolicy configuration short values are case insensitive (#272)
700e540 is described below

commit 700e5406b30ea56ac96f8eec636289826daddd5d
Author: Carter Kozak <ck...@ckozak.net>
AuthorDate: Tue May 21 23:44:16 2019 -0400

    LOG4J2-2611: AsyncQueueFullPolicy configuration short values are case insensitive (#272)
---
 .../log4j/core/async/AsyncQueueFullPolicyFactory.java | 19 +++++++++++++------
 .../apache/logging/log4j/core/async/EventRoute.java   |  2 ++
 .../core/async/AsyncQueueFullPolicyFactoryTest.java   | 14 +++++++++++++-
 src/changes/changes.xml                               |  3 +++
 4 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java
index 9dd4e85..a80c787 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactory.java
@@ -66,19 +66,26 @@ public class AsyncQueueFullPolicyFactory {
      */
     public static AsyncQueueFullPolicy create() {
         final String router = PropertiesUtil.getProperties().getStringProperty(PROPERTY_NAME_ASYNC_EVENT_ROUTER);
-        if (router == null || PROPERTY_VALUE_DEFAULT_ASYNC_EVENT_ROUTER.equals(router)
-                || DefaultAsyncQueueFullPolicy.class.getSimpleName().equals(router)
-                || DefaultAsyncQueueFullPolicy.class.getName().equals(router)) {
+        if (router == null || isRouterSelected(
+                router, DefaultAsyncQueueFullPolicy.class, PROPERTY_VALUE_DEFAULT_ASYNC_EVENT_ROUTER)) {
             return new DefaultAsyncQueueFullPolicy();
         }
-        if (PROPERTY_VALUE_DISCARDING_ASYNC_EVENT_ROUTER.equals(router)
-                || DiscardingAsyncQueueFullPolicy.class.getSimpleName().equals(router)
-                || DiscardingAsyncQueueFullPolicy.class.getName().equals(router)) {
+        if (isRouterSelected(
+                router, DiscardingAsyncQueueFullPolicy.class, PROPERTY_VALUE_DISCARDING_ASYNC_EVENT_ROUTER)) {
             return createDiscardingAsyncQueueFullPolicy();
         }
         return createCustomRouter(router);
     }
 
+    private static boolean isRouterSelected(
+            String propertyValue,
+            Class<? extends AsyncQueueFullPolicy> policy,
+            String shortPropertyValue) {
+        return propertyValue != null && (shortPropertyValue.equalsIgnoreCase(propertyValue)
+                || policy.getName().equals(propertyValue)
+                || policy.getSimpleName().equals(propertyValue));
+    }
+
     private static AsyncQueueFullPolicy createCustomRouter(final String router) {
         try {
             final Class<? extends AsyncQueueFullPolicy> cls = Loader.loadClass(router).asSubclass(AsyncQueueFullPolicy.class);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/EventRoute.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/EventRoute.java
index cdb5451..bc2f5c7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/EventRoute.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/EventRoute.java
@@ -53,6 +53,8 @@ public enum EventRoute {
     },
     /**
      * Logs the event synchronously: sends the event directly to the appender (in the current thread).
+     * WARNING: This may result in lines logged out of order as synchronous events may be persisted before
+     * earlier events, even from the same thread, which wait in the queue.
      */
     SYNCHRONOUS {
         @Override
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactoryTest.java
index 964bf12..6d8622f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactoryTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/AsyncQueueFullPolicyFactoryTest.java
@@ -19,10 +19,13 @@ package org.apache.logging.log4j.core.async;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.categories.AsyncLoggers;
 import org.apache.logging.log4j.util.PropertiesUtil;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import java.util.Locale;
+
 import static org.junit.Assert.*;
 
 /**
@@ -32,7 +35,8 @@ import static org.junit.Assert.*;
 public class AsyncQueueFullPolicyFactoryTest {
 
     @Before
-    public void setUp() throws Exception {
+    @After
+    public void resetProperties() throws Exception {
         System.clearProperty(AsyncQueueFullPolicyFactory.PROPERTY_NAME_ASYNC_EVENT_ROUTER);
         System.clearProperty(AsyncQueueFullPolicyFactory.PROPERTY_NAME_DISCARDING_THRESHOLD_LEVEL);
         PropertiesUtil.getProperties().reload();
@@ -68,6 +72,14 @@ public class AsyncQueueFullPolicyFactoryTest {
     }
 
     @Test
+    public void testCreateDiscardingRouterCaseInsensitive() {
+        System.setProperty(AsyncQueueFullPolicyFactory.PROPERTY_NAME_ASYNC_EVENT_ROUTER,
+                AsyncQueueFullPolicyFactory.PROPERTY_VALUE_DISCARDING_ASYNC_EVENT_ROUTER.toLowerCase(Locale.ENGLISH));
+        assertEquals(Level.INFO, ((DiscardingAsyncQueueFullPolicy) AsyncQueueFullPolicyFactory.create()).
+                getThresholdLevel());
+    }
+
+    @Test
     public void testCreateDiscardingRouterThresholdLevelCustomizable() throws Exception {
         System.setProperty(AsyncQueueFullPolicyFactory.PROPERTY_NAME_ASYNC_EVENT_ROUTER,
                 AsyncQueueFullPolicyFactory.PROPERTY_VALUE_DISCARDING_ASYNC_EVENT_ROUTER);
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index be87a8c..53c28d4 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -433,6 +433,9 @@
         MapPatternConverter is properly created from the '%K', '%map', and '%MAP' patterns.
         PatternConverter instanceOf methods with unknown parameter types no longer elide those with known parameters.
       </action>
+      <action issue="LOG4J2-2611" dev="ckozak" type="add">
+        AsyncQueueFullPolicy configuration short values "Default" and "Discard" are case insensitive to avoid confusion.
+      </action>
     </release>
     <release version="2.11.2" date="2018-MM-DD" description="GA Release 2.11.2">
       <action issue="LOG4J2-2500" dev="rgoers" type="fix">