You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/09/22 02:04:28 UTC
[1/8] logging-log4j2 git commit: LOG4J2-1010 fix performance issue
where new context map object created for each call when empty
Repository: logging-log4j2
Updated Branches:
refs/heads/master 215d934af -> 16e7ef70c
LOG4J2-1010 fix performance issue where new context map object created for each call when empty
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4e4d133c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4e4d133c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4e4d133c
Branch: refs/heads/master
Commit: 4e4d133cac306a6f0c0b6b9923ecba9de18a2450
Parents: c8ee4b3
Author: rpopma <rp...@apache.org>
Authored: Thu Sep 22 10:51:18 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Sep 22 10:51:18 2016 +0900
----------------------------------------------------------------------
.../CopyOnWriteSortedArrayThreadContextMap.java | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4e4d133c/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 a8ced14..71afbef 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
@@ -36,6 +36,12 @@ class CopyOnWriteSortedArrayThreadContextMap implements ThreadContextMap, Thread
MutableContextDataSupplier {
/**
+ * Property name ({@value} ) for selecting {@code InheritableThreadLocal} (value "true") or plain
+ * {@code ThreadLocal} (value is not "true") in the implementation.
+ */
+ public static final String INHERITABLE_MAP = "isThreadContextMapInheritable";
+
+ /**
* The default initial capacity.
*/
protected static final int DEFAULT_INITIAL_CAPACITY = 16;
@@ -45,11 +51,10 @@ class CopyOnWriteSortedArrayThreadContextMap implements ThreadContextMap, Thread
*/
protected static final String PROPERTY_NAME_INITIAL_CAPACITY = "log4j2.ThreadContext.initial.capacity";
- /**
- * Property name ({@value} ) for selecting {@code InheritableThreadLocal} (value "true") or plain
- * {@code ThreadLocal} (value is not "true") in the implementation.
- */
- public static final String INHERITABLE_MAP = "isThreadContextMapInheritable";
+ private static final MutableContextData EMPTY_CONTEXT_DATA = new ArrayContextData();
+ static {
+ EMPTY_CONTEXT_DATA.freeze();
+ }
private final ThreadLocal<MutableContextData> localMap;
@@ -162,7 +167,7 @@ class CopyOnWriteSortedArrayThreadContextMap implements ThreadContextMap, Thread
@Override
public MutableContextData getMutableContextData() {
final MutableContextData map = localMap.get();
- return map == null ? createMutableContextData() : map;
+ return map == null ? EMPTY_CONTEXT_DATA : map;
}
@Override
[6/8] logging-log4j2 git commit: LOG4J2-1010 LOG4J2-1447 cleaner
context injection code now that ThreadContextMap2 is a
MutableContextDataSupplier
Posted by rp...@apache.org.
LOG4J2-1010 LOG4J2-1447 cleaner context injection code now that ThreadContextMap2 is a MutableContextDataSupplier
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/04619890
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/04619890
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/04619890
Branch: refs/heads/master
Commit: 046198901839a31b77436759ec354c183e54a25a
Parents: 09eb4f4
Author: rpopma <rp...@apache.org>
Authored: Thu Sep 22 11:02:54 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Sep 22 11:02:54 2016 +0900
----------------------------------------------------------------------
.../org/apache/logging/log4j/ThreadContextAccess.java | 13 +++++++++++++
.../log4j/core/impl/ContextDataInjectorFactory.java | 6 +++---
.../log4j/core/impl/ThreadContextDataInjector.java | 11 ++++-------
3 files changed, 20 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/04619890/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java b/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java
index 2e2a992..c5c33de 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java
@@ -18,6 +18,7 @@
package org.apache.logging.log4j;
import org.apache.logging.log4j.spi.ThreadContextMap;
+import org.apache.logging.log4j.spi.ThreadContextMap2;
/**
* <em>This class is intended for internal log4j2 usage and should not be used directly by applications.</em>
@@ -43,4 +44,16 @@ public final class ThreadContextAccess {
public static ThreadContextMap getThreadContextMap() {
return ThreadContext.getThreadContextMap();
}
+
+ /**
+ * Returns the internal data structure used to store thread context key-value pairs.
+ * <p><em>
+ * This method is intended for internal log4j2 usage.
+ * The returned data structure is not intended to be used directly by applications.
+ * </em></p>
+ * @return the internal data structure used to store thread context key-value pairs
+ */
+ public static ThreadContextMap2 getThreadContextMap2() {
+ return (ThreadContextMap2) ThreadContext.getThreadContextMap();
+ }
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/04619890/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
index 31e1013..eb1e0ce 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
@@ -21,8 +21,8 @@ import org.apache.logging.log4j.core.ContextDataInjector;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.spi.ContextData;
import org.apache.logging.log4j.spi.CopyOnWrite;
-import org.apache.logging.log4j.spi.MutableContextDataSupplier;
import org.apache.logging.log4j.spi.ThreadContextMap;
+import org.apache.logging.log4j.spi.ThreadContextMap2;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.LoaderUtil;
import org.apache.logging.log4j.util.PropertiesUtil;
@@ -79,10 +79,10 @@ public class ContextDataInjectorFactory {
private static ContextDataInjector createDefaultInjector() {
final ThreadContextMap threadContextMap = ThreadContextAccess.getThreadContextMap();
- if (threadContextMap instanceof CopyOnWrite && threadContextMap instanceof MutableContextDataSupplier) {
+ if (threadContextMap instanceof CopyOnWrite && threadContextMap instanceof ThreadContextMap2) {
return new ThreadContextDataInjector.ForCopyOnWriteMutableThreadContextMap();
}
- if (threadContextMap instanceof MutableContextDataSupplier) {
+ if (threadContextMap instanceof ThreadContextMap2) {
return new ThreadContextDataInjector.ForGarbageFreeMutableThreadContextMap();
}
return new ThreadContextDataInjector.ForDefaultThreadContextMap();
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/04619890/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
index e57a807..8c72f70 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
@@ -25,7 +25,6 @@ import org.apache.logging.log4j.core.ContextDataInjector;
import org.apache.logging.log4j.core.config.Property;
import org.apache.logging.log4j.spi.ContextData;
import org.apache.logging.log4j.spi.MutableContextData;
-import org.apache.logging.log4j.spi.MutableContextDataSupplier;
import org.apache.logging.log4j.spi.ThreadContextMap;
/**
@@ -119,15 +118,14 @@ public class ThreadContextDataInjector {
// modified.
copyProperties(props, reusable);
- final ContextData immutableCopy = ((MutableContextDataSupplier) ThreadContextAccess.getThreadContextMap())
- .getMutableContextData();
+ final ContextData immutableCopy = ThreadContextAccess.getThreadContextMap2().getMutableContextData();
reusable.putAll(immutableCopy);
return reusable;
}
@Override
public ContextData rawContextData() {
- return ((MutableContextDataSupplier) ThreadContextAccess.getThreadContextMap()).getMutableContextData();
+ return ThreadContextAccess.getThreadContextMap2().getMutableContextData();
}
}
@@ -153,8 +151,7 @@ public class ThreadContextDataInjector {
public MutableContextData injectContextData(final List<Property> props, final MutableContextData reusable) {
// If there are no configuration properties we want to just return the ThreadContext's MutableContextData:
// it is a copy-on-write data structure so we are sure ThreadContext changes will not affect our copy.
- final MutableContextData immutableCopy =
- ((MutableContextDataSupplier) ThreadContextAccess.getThreadContextMap()).getMutableContextData();
+ final MutableContextData immutableCopy = ThreadContextAccess.getThreadContextMap2().getMutableContextData();
if (props == null || props.isEmpty()) {
return immutableCopy;
}
@@ -167,7 +164,7 @@ public class ThreadContextDataInjector {
@Override
public ContextData rawContextData() {
- return ((MutableContextDataSupplier) ThreadContextAccess.getThreadContextMap()).getMutableContextData();
+ return ThreadContextAccess.getThreadContextMap2().getMutableContextData();
}
}
[2/8] logging-log4j2 git commit: LOG4J2-1447 clarified in javadoc
that returned object may be read-only
Posted by rp...@apache.org.
LOG4J2-1447 clarified in javadoc that returned object may be read-only
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/ca9d5e09
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ca9d5e09
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ca9d5e09
Branch: refs/heads/master
Commit: ca9d5e09a3a5f4bf5a969b2225934e5e58dac134
Parents: 4e4d133
Author: rpopma <rp...@apache.org>
Authored: Thu Sep 22 10:52:48 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Sep 22 10:52:48 2016 +0900
----------------------------------------------------------------------
.../apache/logging/log4j/spi/MutableContextDataSupplier.java | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ca9d5e09/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableContextDataSupplier.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableContextDataSupplier.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableContextDataSupplier.java
index 7afdeaa..3f242ed 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableContextDataSupplier.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/MutableContextDataSupplier.java
@@ -18,13 +18,19 @@ package org.apache.logging.log4j.spi;
/**
* Interface for objects that know how to provide a {@code MutableContextData} object.
+ * <p>
+ * This interface offers no guarantee that the returned context data is actually mutable; it may have been
+ * {@linkplain MutableContextData#freeze() frozen}, making the data structure read-only.
+ * </p>
*
* @since 2.7
*/
public interface MutableContextDataSupplier {
/**
- * Retuns the {@code MutableContextData}.
+ * Returns the {@code MutableContextData}. Note that the returned context data may not be mutable; it may have been
+ * {@linkplain MutableContextData#freeze() frozen}, making the data structure read-only.
+ *
* @return the {@code MutableContextData}
*/
MutableContextData getMutableContextData();
[3/8] logging-log4j2 git commit: LOG4J2-1447 declare public fields
before protected fields
Posted by rp...@apache.org.
LOG4J2-1447 declare public fields before protected fields
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/fc682480
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/fc682480
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/fc682480
Branch: refs/heads/master
Commit: fc68248087699222fcb601160159040c8312b671
Parents: ca9d5e0
Author: rpopma <rp...@apache.org>
Authored: Thu Sep 22 10:57:28 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Sep 22 10:57:28 2016 +0900
----------------------------------------------------------------------
.../spi/GarbageFreeSortedArrayThreadContextMap.java | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/fc682480/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 face4c7..4709004 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
@@ -36,6 +36,12 @@ class GarbageFreeSortedArrayThreadContextMap implements ThreadContextMap, Thread
MutableContextDataSupplier {
/**
+ * Property name ({@value} ) for selecting {@code InheritableThreadLocal} (value "true") or plain
+ * {@code ThreadLocal} (value is not "true") in the implementation.
+ */
+ public static final String INHERITABLE_MAP = "isThreadContextMapInheritable";
+
+ /**
* The default initial capacity.
*/
protected static final int DEFAULT_INITIAL_CAPACITY = 16;
@@ -45,12 +51,6 @@ class GarbageFreeSortedArrayThreadContextMap implements ThreadContextMap, Thread
*/
protected static final String PROPERTY_NAME_INITIAL_CAPACITY = "log4j2.ThreadContext.initial.capacity";
- /**
- * Property name ({@value} ) for selecting {@code InheritableThreadLocal} (value "true") or plain
- * {@code ThreadLocal} (value is not "true") in the implementation.
- */
- public static final String INHERITABLE_MAP = "isThreadContextMapInheritable";
-
protected final ThreadLocal<MutableContextData> localMap;
public GarbageFreeSortedArrayThreadContextMap() {
[8/8] logging-log4j2 git commit: Merge remote-tracking branch
'origin/master'
Posted by rp...@apache.org.
Merge remote-tracking branch 'origin/master'
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/16e7ef70
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/16e7ef70
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/16e7ef70
Branch: refs/heads/master
Commit: 16e7ef70ca44e0f403951fa9491ff3506139ee62
Parents: 3ed968e 215d934
Author: rpopma <rp...@apache.org>
Authored: Thu Sep 22 11:04:18 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Sep 22 11:04:18 2016 +0900
----------------------------------------------------------------------
log4j-core/pom.xml | 6 +
.../core/net/server/AbstractSocketServer.java | 93 +++++++++-
.../log4j/core/net/server/TcpSocketServer.java | 180 ++++++++++++-------
.../log4j/core/net/server/UdpSocketServer.java | 83 ++++-----
.../log4j/core/util/InetAddressConverter.java | 19 ++
log4j-core/src/test/resources/log4j-console.xml | 29 +++
pom.xml | 5 +
src/changes/changes.xml | 3 +
src/site/xdoc/runtime-dependencies.xml | 12 +-
9 files changed, 317 insertions(+), 113 deletions(-)
----------------------------------------------------------------------
[5/8] logging-log4j2 git commit: LOG4J2-1447 change the contract of
ThreadContextMap2 to include the role of MutableContextDataSupplier
Posted by rp...@apache.org.
LOG4J2-1447 change the contract of ThreadContextMap2 to include the role of MutableContextDataSupplier
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/09eb4f44
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/09eb4f44
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/09eb4f44
Branch: refs/heads/master
Commit: 09eb4f4483600bc2f9d29052bb8589dc10b8d858
Parents: e1b86f5
Author: rpopma <rp...@apache.org>
Authored: Thu Sep 22 11:01:26 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Sep 22 11:01:26 2016 +0900
----------------------------------------------------------------------
.../org/apache/logging/slf4j/MDCContextMap.java | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/09eb4f44/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 5202ca7..0593e3c 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,7 +19,9 @@ package org.apache.logging.slf4j;
import java.util.Map;
import java.util.Map.Entry;
+import org.apache.logging.log4j.spi.MutableContextData;
import org.apache.logging.log4j.spi.ThreadContextMap2;
+import org.apache.logging.log4j.util.ArrayContextData;
import org.slf4j.MDC;
/**
@@ -27,6 +29,11 @@ import org.slf4j.MDC;
*/
public class MDCContextMap implements ThreadContextMap2 {
+ private static final MutableContextData EMPTY_CONTEXT_DATA = new ArrayContextData();
+ static {
+ EMPTY_CONTEXT_DATA.freeze();
+ }
+
@Override
public void put(final String key, final String value) {
MDC.put(key, value);
@@ -75,4 +82,17 @@ public class MDCContextMap implements ThreadContextMap2 {
public boolean isEmpty() {
return MDC.getCopyOfContextMap().isEmpty();
}
+
+ @Override
+ public MutableContextData getMutableContextData() {
+ final Map<String, String> copy = getCopy();
+ if (copy.isEmpty()) {
+ return EMPTY_CONTEXT_DATA;
+ }
+ final MutableContextData result = new ArrayContextData();
+ for (Entry<String, String> entry : copy.entrySet()) {
+ result.putValue(entry.getKey(), entry.getValue());
+ }
+ return result;
+ }
}
[4/8] logging-log4j2 git commit: LOG4J2-1447 change the contract of
ThreadContextMap2 to include the role of MutableContextDataSupplier
Posted by rp...@apache.org.
LOG4J2-1447 change the contract of ThreadContextMap2 to include the role of MutableContextDataSupplier
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e1b86f51
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e1b86f51
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e1b86f51
Branch: refs/heads/master
Commit: e1b86f515e6f97866fa2e6ff8a3ba054c315a934
Parents: fc68248
Author: rpopma <rp...@apache.org>
Authored: Thu Sep 22 11:01:04 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Sep 22 11:01:04 2016 +0900
----------------------------------------------------------------------
.../src/main/java/org/apache/logging/log4j/ThreadContext.java | 3 +++
.../org/apache/logging/log4j/spi/DefaultThreadContextMap.java | 3 +--
.../main/java/org/apache/logging/log4j/spi/ThreadContextMap2.java | 2 +-
3 files changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e1b86f51/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 4636469..f282397 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
@@ -27,6 +27,7 @@ import java.util.Map;
import java.util.NoSuchElementException;
import org.apache.logging.log4j.message.ParameterizedMessage;
+import org.apache.logging.log4j.spi.DefaultThreadContextMap;
import org.apache.logging.log4j.spi.DefaultThreadContextStack;
import org.apache.logging.log4j.spi.NoOpThreadContextMap;
import org.apache.logging.log4j.spi.ThreadContextMap;
@@ -249,6 +250,8 @@ public final class ThreadContext {
public static void putAll(final Map<String, String> m) {
if (contextMap instanceof ThreadContextMap2) {
((ThreadContextMap2) contextMap).putAll(m);
+ } else if (contextMap instanceof DefaultThreadContextMap) {
+ ((DefaultThreadContextMap) contextMap).putAll(m);
} else {
for (final Map.Entry<String, String> entry: m.entrySet()) {
contextMap.put(entry.getKey(), entry.getValue());
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e1b86f51/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 1c01c0b..143c2e1 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
@@ -30,7 +30,7 @@ import org.apache.logging.log4j.util.TriConsumer;
* expected that the Map will be passed to many more log events than the number of keys it contains the performance
* should be much better than if the Map was copied for each event.
*/
-public class DefaultThreadContextMap implements ThreadContextMap2, ContextData {
+public class DefaultThreadContextMap implements ThreadContextMap, ContextData {
/**
* Property name ({@value} ) for selecting {@code InheritableThreadLocal} (value "true") or plain
@@ -80,7 +80,6 @@ public class DefaultThreadContextMap implements ThreadContextMap2, ContextData {
localMap.set(Collections.unmodifiableMap(map));
}
- @Override
public void putAll(final Map<String, String> m) {
if (!useMap) {
return;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e1b86f51/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 4def1b3..6f831c3 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
@@ -25,7 +25,7 @@ import java.util.Map;
* @see ThreadContextMap
* @since 2.7
*/
-public interface ThreadContextMap2 extends ThreadContextMap {
+public interface ThreadContextMap2 extends ThreadContextMap, MutableContextDataSupplier {
/**
* Puts all given context map entries into the current thread's
[7/8] logging-log4j2 git commit: LOG4J2-1010 enhance benchmark to
test with empty map
Posted by rp...@apache.org.
LOG4J2-1010 enhance benchmark to test with empty map
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/3ed968ed
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/3ed968ed
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/3ed968ed
Branch: refs/heads/master
Commit: 3ed968ed33a2d869af0bb31c60d023620934757f
Parents: 0461989
Author: rpopma <rp...@apache.org>
Authored: Thu Sep 22 11:04:01 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Sep 22 11:04:01 2016 +0900
----------------------------------------------------------------------
.../logging/log4j/perf/jmh/MDCFilterBenchmark.java | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3ed968ed/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/MDCFilterBenchmark.java
----------------------------------------------------------------------
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/MDCFilterBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/MDCFilterBenchmark.java
index 9b5c5cf..d3974a1 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/MDCFilterBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/MDCFilterBenchmark.java
@@ -21,6 +21,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;
import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.Param;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
@@ -45,12 +46,19 @@ public class MDCFilterBenchmark {
Logger log4jLogger;
org.slf4j.Logger slf4jLogger;
+ @Param({"0", "4"})
+ public int size;
+
+ static int staticSize;
+
@State(Scope.Thread)
public static class ThreadContextState {
// Thread scope: initialize MDC/ThreadContext here to ensure each thread has some value set
public ThreadContextState() {
- ThreadContext.put("user", "Apache");
- MDC.put("user", "Apache");
+ for (int i = 0; i < staticSize; i++) {
+ ThreadContext.put("user" + i, "Apache");
+ MDC.put("user" + i, "Apache");
+ }
}
public String message() {
@@ -65,6 +73,8 @@ public class MDCFilterBenchmark {
log4jLogger = LogManager.getLogger(MDCFilterBenchmark.class);
slf4jLogger = LoggerFactory.getLogger(MDCFilterBenchmark.class);
+
+ staticSize = size;
}
@TearDown