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">