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 <rpo...@apache.org> Authored: Thu Sep 22 11:01:26 2016 +0900 Committer: rpopma <rpo...@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; + } }