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 2017/11/11 21:48:08 UTC

[02/12] logging-log4j2 git commit: LOG4J2-2101: MapMessage correctly handles non-string map values

LOG4J2-2101: MapMessage correctly handles non-string map values

Previously formatting non-string values worked, however filtering,
which uess the "get" method would fail due to MapMessage attempting
to cast values to 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/f0123b1d
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/f0123b1d
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/f0123b1d

Branch: refs/heads/master
Commit: f0123b1ddf236c2d1c0b23f005d0cf4f8e9dd6c5
Parents: 23bcd25
Author: Carter Kozak <c4...@gmail.com>
Authored: Mon Nov 6 13:14:36 2017 -0500
Committer: Mikael Ståldal <mi...@staldal.nu>
Committed: Sat Nov 11 22:08:09 2017 +0100

----------------------------------------------------------------------
 .../logging/log4j/message/MapMessage.java       | 15 +++++---
 .../logging/log4j/message/MapMessageTest.java   | 37 ++++++++++++++++++++
 2 files changed, 48 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f0123b1d/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java
index e39774c..649772d 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java
@@ -200,7 +200,7 @@ public class MapMessage<M extends MapMessage<M, V>, V> implements MultiformatMes
      * @param map The Map to add.
      */
     public void putAll(final Map<String, String> map) {
-        for (final Map.Entry<String, ?> entry : map.entrySet()) {
+        for (final Map.Entry<String, String> entry : map.entrySet()) {
             data.putValue(entry.getKey(), entry.getValue());
         }
     }
@@ -211,7 +211,11 @@ public class MapMessage<M extends MapMessage<M, V>, V> implements MultiformatMes
      * @return The value of the element or null if the key is not present.
      */
     public String get(final String key) {
-        return data.getValue(key);
+        Object result = data.getValue(key);
+        if (result == null) {
+            return null;
+        }
+        return String.valueOf(result);
     }
 
     /**
@@ -220,7 +224,7 @@ public class MapMessage<M extends MapMessage<M, V>, V> implements MultiformatMes
      * @return The previous value of the element.
      */
     public String remove(final String key) {
-        final String result = data.getValue(key);
+        final String result = get(key);
         data.remove(key);
         return result;
     }
@@ -338,7 +342,10 @@ public class MapMessage<M extends MapMessage<M, V>, V> implements MultiformatMes
     public void asXml(final StringBuilder sb) {
         sb.append("<Map>\n");
         for (int i = 0; i < data.size(); i++) {
-            sb.append("  <Entry key=\"").append(data.getKeyAt(i)).append("\">").append((String)data.getValueAt(i))
+            sb.append("  <Entry key=\"")
+                    .append(data.getKeyAt(i))
+                    .append("\">")
+                    .append(data.<Object>getValueAt(i))
                     .append("</Entry>\n");
         }
         sb.append("</Map>");

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f0123b1d/log4j-api/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
index 1e06914..9aae448 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
@@ -18,6 +18,9 @@ package org.apache.logging.log4j.message;
 
 import org.junit.Test;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import static org.junit.Assert.*;
 
 /**
@@ -99,4 +102,38 @@ public class MapMessageTest {
         final String expected2 = "{key1=\"value1\", key2=\"value2\", key3=\"value3\"}";
         assertEquals(expected2, result2);
     }
+
+    @Test
+    public void testGetNonStringValue() {
+        final String key = "Key";
+        final MapMessage<?, Object> msg = new MapMessage<>()
+                .with(key, 1L);
+        assertEquals("1", msg.get(key));
+    }
+
+    @Test
+    public void testRemoveNonStringValue() {
+        final String key = "Key";
+        final MapMessage<?, Object> msg = new MapMessage<>()
+                .with(key, 1L);
+        assertEquals("1", msg.remove(key));
+    }
+
+    @Test
+    public void testJSONFormatNonStringValue() {
+        final MapMessage<?, Object> msg = new MapMessage<>()
+                .with("key", 1L);
+        final String result = msg.getFormattedMessage(new String[]{"JSON"});
+        final String expected = "{\"key\":\"1\"}";
+        assertEquals(expected, result);
+    }
+
+    @Test
+    public void testXMLFormatNonStringValue() {
+        final MapMessage<?, Object> msg = new MapMessage<>()
+                .with("key", 1L);
+        final String result = msg.getFormattedMessage(new String[]{"XML"});
+        final String expected = "<Map>\n  <Entry key=\"key\">1</Entry>\n</Map>";
+        assertEquals(expected, result);
+    }
 }