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 f03ee54797e..b04d3582362 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 @@ -71,7 +71,8 @@ public void clear() { @Override public boolean containsKey(final String key) { - return MDC.getCopyOfContextMap().containsKey(key); + Map map = MDC.getCopyOfContextMap(); + return map != null && map.containsKey(key); } @Override @@ -88,7 +89,8 @@ public Map getImmutableMapOrNull() { @Override public boolean isEmpty() { - return MDC.getCopyOfContextMap().isEmpty(); + Map map = MDC.getCopyOfContextMap(); + return map == null || map.isEmpty(); } @Override diff --git a/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java b/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java index e994d192c92..9cf7deb78d0 100644 --- a/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java +++ b/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java @@ -32,6 +32,7 @@ import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; +import org.slf4j.MDC; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; @@ -165,5 +166,43 @@ public void mdc() { assertThat(list.strList, hasSize(2)); assertTrue("Incorrect year", list.strList.get(0).startsWith("2010")); } -} + @Test + public void mdcNullBackedIsEmpty() { + assertNull("Setup wrong", MDC.getCopyOfContextMap()); + assertTrue(ThreadContext.isEmpty()); + } + + @Test + public void mdcNullBackedContainsKey() { + assertNull("Setup wrong", MDC.getCopyOfContextMap()); + assertFalse(ThreadContext.containsKey("something")); + } + + @Test + public void mdcNullBackedContainsNullKey() { + assertNull("Setup wrong", MDC.getCopyOfContextMap()); + assertFalse(ThreadContext.containsKey(null)); + } + + @Test + public void mdcContainsNullKey() { + try { + ThreadContext.put("some", "thing"); + assertNotNull("Setup wrong", MDC.getCopyOfContextMap()); + assertFalse(ThreadContext.containsKey(null)); + } finally { + ThreadContext.clearMap(); + } + } + + @Test + public void mdcCannotContainNullKey() { + try { + ThreadContext.put(null, "something"); + fail("should throw"); + } catch (IllegalArgumentException | NullPointerException e) { + // expected + } + } +}