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<String>).
+ </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<String>).
+ </action>
<action issue="LOG4J2-1679" dev="rpopma" type="fix">
(GC) Avoid allocating temporary objects in StructuredDataFilter.
</action>