You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/11/11 16:41:22 UTC

[1/3] logging-log4j2 git commit: LOG4J2-1679 Add ThreadContextMap3 interface supporting method removeAll(Iterable)

Repository: logging-log4j2
Updated Branches:
  refs/heads/LOG4J2-1685 028ae4b45 -> 6123dc6fa


LOG4J2-1679 Add ThreadContextMap3 interface supporting method removeAll(Iterable<String>)


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/922e4829
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/922e4829
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/922e4829

Branch: refs/heads/LOG4J2-1685
Commit: 922e4829f28ca9279e4c8971d1c89d7ba71d40ca
Parents: abf29af
Author: Mikael St�ldal <mi...@magine.com>
Authored: Fri Nov 11 15:14:45 2016 +0100
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Fri Nov 11 15:14:45 2016 +0100

----------------------------------------------------------------------
 .../org/apache/logging/log4j/ThreadContext.java | 20 ++++++++++
 .../CopyOnWriteSortedArrayThreadContextMap.java | 13 +++++++
 .../log4j/spi/DefaultThreadContextMap.java      | 11 ++++++
 .../GarbageFreeSortedArrayThreadContextMap.java | 10 +++++
 .../log4j/spi/ObjectThreadContextMap.java       |  4 +-
 .../logging/log4j/spi/ThreadContextMap2.java    |  2 +
 .../logging/log4j/spi/ThreadContextMap3.java    | 39 ++++++++++++++++++++
 .../org/apache/logging/slf4j/MDCContextMap.java | 18 ++++++---
 src/changes/changes.xml                         |  3 ++
 9 files changed, 113 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/922e4829/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java b/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java
index 5242993..4af2674 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java
@@ -33,6 +33,7 @@ import org.apache.logging.log4j.spi.NoOpThreadContextMap;
 import org.apache.logging.log4j.spi.ReadOnlyThreadContextMap;
 import org.apache.logging.log4j.spi.ThreadContextMap;
 import org.apache.logging.log4j.spi.ThreadContextMap2;
+import org.apache.logging.log4j.spi.ThreadContextMap3;
 import org.apache.logging.log4j.spi.ThreadContextMapFactory;
 import org.apache.logging.log4j.spi.ThreadContextStack;
 import org.apache.logging.log4j.status.StatusLogger;
@@ -289,6 +290,25 @@ public final class ThreadContext {
     }
 
     /**
+     * Removes the context values identified by the <code>keys</code> parameter.
+     *
+     * @param keys The keys to remove.
+     *
+     * @since 2.8
+     */
+    public static void removeAll(final Iterable<String> keys) {
+        if (contextMap instanceof ThreadContextMap3) {
+            ((ThreadContextMap3) contextMap).removeAll(keys);
+        } else if (contextMap instanceof DefaultThreadContextMap) {
+            ((DefaultThreadContextMap) contextMap).removeAll(keys);
+        } else {
+            for (final String key : keys) {
+                contextMap.remove(key);
+            }
+        }
+    }
+
+    /**
      * Clears the context map.
      */
     public static void clearMap() {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/922e4829/log4j-api/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java
index 3b91dbb..7b70e55 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteSortedArrayThreadContextMap.java
@@ -156,6 +156,19 @@ class CopyOnWriteSortedArrayThreadContextMap implements ReadOnlyThreadContextMap
     }
 
     @Override
+    public void removeAll(Iterable<String> keys) {
+        final StringMap map = localMap.get();
+        if (map != null) {
+            final StringMap copy = createStringMap(map);
+            for (final String key : keys) {
+                copy.remove(key);
+            }
+            copy.freeze();
+            localMap.set(copy);
+        }
+    }
+
+    @Override
     public void clear() {
         localMap.remove();
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/922e4829/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
index 4a016be..fbf21d9 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/DefaultThreadContextMap.java
@@ -109,6 +109,17 @@ public class DefaultThreadContextMap implements ThreadContextMap, ReadOnlyString
         }
     }
 
+    public void removeAll(Iterable<String> keys) {
+        final Map<String, String> map = localMap.get();
+        if (map != null) {
+            final Map<String, String> copy = new HashMap<>(map);
+            for (final String key : keys) {
+                copy.remove(key);
+            }
+            localMap.set(Collections.unmodifiableMap(copy));
+        }
+    }
+
     @Override
     public void clear() {
         localMap.remove();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/922e4829/log4j-api/src/main/java/org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java
index 7113d9f..3eadb2c 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/GarbageFreeSortedArrayThreadContextMap.java
@@ -150,6 +150,16 @@ class GarbageFreeSortedArrayThreadContextMap implements ReadOnlyThreadContextMap
     }
 
     @Override
+    public void removeAll(Iterable<String> keys) {
+        final StringMap map = localMap.get();
+        if (map != null) {
+            for (final String key : keys) {
+                map.remove(key);
+            }
+        }
+    }
+
+    @Override
     public void clear() {
         final StringMap map = localMap.get();
         if (map != null) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/922e4829/log4j-api/src/main/java/org/apache/logging/log4j/spi/ObjectThreadContextMap.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ObjectThreadContextMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ObjectThreadContextMap.java
index a3e3715..31d6dd0 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ObjectThreadContextMap.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ObjectThreadContextMap.java
@@ -20,10 +20,10 @@ package org.apache.logging.log4j.spi;
  * Extension service provider interface to allow putting Object values in the
  * {@link org.apache.logging.log4j.ThreadContext}.
  *
- * @see ThreadContextMap2
+ * @see ThreadContextMap3
  * @since 2.8
  */
-public interface ObjectThreadContextMap extends ThreadContextMap2 {
+public interface ObjectThreadContextMap extends ThreadContextMap3 {
 
     /**
      * Returns the Object value for the specified key, or {@code null} if the specified key does not exist in this

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/922e4829/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMap2.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMap2.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMap2.java
index 6c07b2e..e86f3c7 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMap2.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMap2.java
@@ -24,6 +24,8 @@ import org.apache.logging.log4j.util.StringMap;
  * Extension service provider interface to implement additional custom MDC behavior for
  * {@link org.apache.logging.log4j.ThreadContext}.
  *
+ * Consider implementing {@link ThreadContextMap3} instead.
+ *
  * @see ThreadContextMap
  * @since 2.7
  */

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/922e4829/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMap3.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMap3.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMap3.java
new file mode 100644
index 0000000..46ac85a
--- /dev/null
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ThreadContextMap3.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.spi;
+
+/**
+ * Extension service provider interface to implement additional custom MDC behavior for
+ * {@link org.apache.logging.log4j.ThreadContext}.
+ *
+ * @see ThreadContextMap
+ * @since 2.8
+ */
+public interface ThreadContextMap3 extends ThreadContextMap2 {
+
+    /**
+     * Removes all given context map keys from the current thread's context map.
+     *
+     * <p>If the current thread does not have a context map it is
+     * created as a side effect.</p>
+
+     * @param keys The keys.
+     * @since 2.8
+     */
+    void removeAll(final Iterable<String> keys);
+
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/922e4829/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
----------------------------------------------------------------------
diff --git a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
index f41fdb6..219323a 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
@@ -19,15 +19,15 @@ package org.apache.logging.slf4j;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.logging.log4j.util.StringMap;
-import org.apache.logging.log4j.spi.ThreadContextMap2;
+import org.apache.logging.log4j.spi.ThreadContextMap3;
 import org.apache.logging.log4j.util.SortedArrayStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.slf4j.MDC;
 
 /**
  * Bind the ThreadContextMap to the SLF4J MDC.
  */
-public class MDCContextMap implements ThreadContextMap2 {
+public class MDCContextMap implements ThreadContextMap3 {
 
     private static final StringMap EMPTY_CONTEXT_DATA = new SortedArrayStringMap(1);
     static {
@@ -41,9 +41,9 @@ public class MDCContextMap implements ThreadContextMap2 {
 
     @Override
     public void putAll(final Map<String, String> m) {
-    	for (final Entry<String, String> entry : m.entrySet()) {
+        for (final Entry<String, String> entry : m.entrySet()) {
             MDC.put(entry.getKey(), entry.getValue());
-		}
+        }
     }
 
     @Override
@@ -56,6 +56,14 @@ public class MDCContextMap implements ThreadContextMap2 {
         MDC.remove(key);
     }
 
+
+    @Override
+    public void removeAll(Iterable<String> keys) {
+        for (final String key : keys) {
+            MDC.remove(key);
+        }
+    }
+
     @Override
     public void clear() {
         MDC.clear();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/922e4829/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ec8d7f1..48c389d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
   </properties>
   <body>
     <release version="2.8" date="2016-MM-DD" description="GA Release 2.8">
+      <action issue="LOG4J2-1689" dev="mikes" type="fix">
+        Add ThreadContextMap3 interface supporting method removeAll(Iterable&lt;String&gt;).
+      </action>
       <action issue="LOG4J2-1679" dev="rpopma" type="fix">
         (GC) Avoid allocating temporary objects in StructuredDataFilter.
       </action>


[2/3] logging-log4j2 git commit: LOG4J2-1689 Adding unit test

Posted by mi...@apache.org.
LOG4J2-1689 Adding unit test


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/ca1510b7
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ca1510b7
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ca1510b7

Branch: refs/heads/LOG4J2-1685
Commit: ca1510b74e6e6e2674622e459309afe7856212cb
Parents: 922e482
Author: Mikael St�ldal <mi...@magine.com>
Authored: Fri Nov 11 15:51:10 2016 +0100
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Fri Nov 11 15:51:10 2016 +0100

----------------------------------------------------------------------
 .../org/apache/logging/log4j/ThreadContextTest.java | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ca1510b7/log4j-api/src/test/java/org/apache/logging/log4j/ThreadContextTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/ThreadContextTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/ThreadContextTest.java
index 07086af..e0731b3 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/ThreadContextTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/ThreadContextTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.logging.log4j;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -183,6 +184,21 @@ public class ThreadContextTest {
     }
 
     @Test
+    public void testRemoveAll() {
+        ThreadContext.clearMap();
+        ThreadContext.put("testKey1", "testValue1");
+        ThreadContext.put("testKey2", "testValue2");
+        assertEquals("testValue1", ThreadContext.get("testKey1"));
+        assertEquals("testValue2", ThreadContext.get("testKey2"));
+        assertFalse(ThreadContext.isEmpty());
+
+        ThreadContext.removeAll(Arrays.asList("testKey1", "testKey2"));
+        assertNull(ThreadContext.get("testKey1"));
+        assertNull(ThreadContext.get("testKey2"));
+        assertTrue(ThreadContext.isEmpty());
+    }
+
+    @Test
     public void testContainsKey() {
         ThreadContext.clearMap();
         assertFalse(ThreadContext.containsKey("testKey"));


[3/3] logging-log4j2 git commit: Merge branch 'master' into LOG4J2-1685

Posted by mi...@apache.org.
Merge branch 'master' into LOG4J2-1685

# Conflicts:
#	src/changes/changes.xml


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/6123dc6f
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/6123dc6f
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/6123dc6f

Branch: refs/heads/LOG4J2-1685
Commit: 6123dc6fad95b1f6e5a3eb48fd16d86adfffe366
Parents: 028ae4b ca1510b
Author: Mikael St�ldal <mi...@magine.com>
Authored: Fri Nov 11 17:40:55 2016 +0100
Committer: Mikael St�ldal <mi...@magine.com>
Committed: Fri Nov 11 17:40:55 2016 +0100

----------------------------------------------------------------------
 .../org/apache/logging/log4j/ThreadContext.java | 20 ++++++++++
 .../CopyOnWriteSortedArrayThreadContextMap.java | 13 +++++++
 .../log4j/spi/DefaultThreadContextMap.java      | 11 ++++++
 .../GarbageFreeSortedArrayThreadContextMap.java | 10 +++++
 .../log4j/spi/ObjectThreadContextMap.java       |  4 +-
 .../logging/log4j/spi/ThreadContextMap2.java    |  2 +
 .../logging/log4j/spi/ThreadContextMap3.java    | 39 ++++++++++++++++++++
 .../apache/logging/log4j/ThreadContextTest.java | 16 ++++++++
 .../org/apache/logging/slf4j/MDCContextMap.java | 18 ++++++---
 src/changes/changes.xml                         |  3 ++
 10 files changed, 129 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/6123dc6f/src/changes/changes.xml
----------------------------------------------------------------------
diff --cc src/changes/changes.xml
index bacf8f4,48c389d..ecc361f
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@@ -24,9 -24,9 +24,12 @@@
    </properties>
    <body>
      <release version="2.8" date="2016-MM-DD" description="GA Release 2.8">
 +      <action issue="LOG4J2-1685" dev="mikes" type="fix" due-to="Raman Gupta">
 +        Option 'disableAnsi' in PatternLayout to unconditionally disable ANSI escape codes.
 +      </action>
+       <action issue="LOG4J2-1689" dev="mikes" type="fix">
+         Add ThreadContextMap3 interface supporting method removeAll(Iterable&lt;String&gt;).
+       </action>
        <action issue="LOG4J2-1679" dev="rpopma" type="fix">
          (GC) Avoid allocating temporary objects in StructuredDataFilter.
        </action>