Repository: logging-log4j2 Updated Branches: refs/heads/GenericMapMessageSimple 1801de077 -> 1a153edb9
Use MapMessage instead of StringMapMessage. Also use the more precise StructuredDataMessage in test assertions. Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/1a153edb Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/1a153edb Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/1a153edb Branch: refs/heads/GenericMapMessageSimple Commit: 1a153edb964b190f69981aec0a480f2533b1db6c Parents: 1801de0 Author: Gary Gregory <[email protected]> Authored: Mon Jun 5 09:28:21 2017 -0700 Committer: Gary Gregory <[email protected]> Committed: Mon Jun 5 09:28:21 2017 -0700 ---------------------------------------------------------------------- .../logging/log4j/message/MapMessage.java | 9 +++++---- .../logging/log4j/message/StringMapMessage.java | 19 +++++++++++++++++-- .../core/appender/rewrite/MapRewritePolicy.java | 20 +++++++++++--------- .../logging/log4j/core/filter/MapFilter.java | 12 ++++++------ .../appender/rewrite/MapRewritePolicyTest.java | 6 +++--- .../appender/rewrite/RewriteAppenderTest.java | 5 ++--- 6 files changed, 44 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1a153edb/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 612e5e3..621d8c2 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 @@ -146,10 +146,11 @@ public class MapMessage<M extends MapMessage<M, V>, V> implements MultiformatMes * Returns the message data as an unmodifiable Map. * @return the message data as an unmodifiable map. */ - public Map<String, String> getData() { - final TreeMap<String, String> result = new TreeMap<>(); // returned map must be sorted + public Map<String, V> getData() { + final TreeMap<String, V> result = new TreeMap<>(); // returned map must be sorted for (int i = 0; i < data.size(); i++) { - result.put(data.getKeyAt(i), (String) data.getValueAt(i)); + // The Eclipse compiler does not need the typecast to V, but the Oracle compiler sure does. + result.put(data.getKeyAt(i), (V) data.getValueAt(i)); } return Collections.unmodifiableMap(result); } @@ -415,7 +416,7 @@ public class MapMessage<M extends MapMessage<M, V>, V> implements MultiformatMes * @return A new MapMessage */ @SuppressWarnings("unchecked") - public M newInstance(final Map<String, String> map) { + public M newInstance(final Map<String, V> map) { return (M) new MapMessage<>(map); } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1a153edb/log4j-api/src/main/java/org/apache/logging/log4j/message/StringMapMessage.java ---------------------------------------------------------------------- diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/StringMapMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringMapMessage.java index 548a612..9c3ee18 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/message/StringMapMessage.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringMapMessage.java @@ -19,11 +19,15 @@ package org.apache.logging.log4j.message; import java.util.Map; +import org.apache.logging.log4j.util.PerformanceSensitive; + /** * A {@link StringMapMessage} typed to {@link String}-only values. This is like the MapMessage class before 2.9. * * @since 2.9 */ +@PerformanceSensitive("allocation") +@AsynchronouslyFormattable public class StringMapMessage extends MapMessage<StringMapMessage, String> { private static final long serialVersionUID = 1L; @@ -38,7 +42,8 @@ public class StringMapMessage extends MapMessage<StringMapMessage, String> { /** * Constructs a new instance. * - * @param initialCapacity the initial capacity. + * @param initialCapacity + * the initial capacity. */ public StringMapMessage(final int initialCapacity) { super(initialCapacity); @@ -46,10 +51,20 @@ public class StringMapMessage extends MapMessage<StringMapMessage, String> { /** * Constructs a new instance based on an existing Map. - * @param map The Map. + * + * @param map + * The Map. */ public StringMapMessage(final Map<String, String> map) { super(map); } + /** + * Constructs a new instance based on an existing Map. + * @param map The Map. + * @return A new StringMapMessage + */ + public StringMapMessage newInstance(final Map<String, String> map) { + return new StringMapMessage(map); + } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1a153edb/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java index 9c315fc..2084686 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java @@ -28,7 +28,7 @@ import org.apache.logging.log4j.core.config.plugins.PluginElement; import org.apache.logging.log4j.core.config.plugins.PluginFactory; import org.apache.logging.log4j.core.impl.Log4jLogEvent; import org.apache.logging.log4j.core.util.KeyValuePair; -import org.apache.logging.log4j.message.StringMapMessage; +import org.apache.logging.log4j.message.MapMessage; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.status.StatusLogger; @@ -42,11 +42,11 @@ public final class MapRewritePolicy implements RewritePolicy { */ protected static final Logger LOGGER = StatusLogger.getLogger(); - private final Map<String, String> map; + private final Map<String, Object> map; private final Mode mode; - private MapRewritePolicy(final Map<String, String> map, final Mode mode) { + private MapRewritePolicy(final Map<String, Object> map, final Mode mode) { this.map = map; this.mode = mode; } @@ -60,25 +60,27 @@ public final class MapRewritePolicy implements RewritePolicy { @Override public LogEvent rewrite(final LogEvent source) { final Message msg = source.getMessage(); - if (msg == null || !(msg instanceof StringMapMessage)) { + if (msg == null || !(msg instanceof MapMessage)) { return source; } - final Map<String, String> newMap = new HashMap<>(((StringMapMessage) msg).getData()); + @SuppressWarnings("unchecked") + MapMessage<?, Object> mapMsg = (MapMessage<?, Object>) msg; + final Map<String, Object> newMap = new HashMap<>(mapMsg.getData()); switch (mode) { case Add: { newMap.putAll(map); break; } default: { - for (final Map.Entry<String, String> entry : map.entrySet()) { + for (final Map.Entry<String, Object> entry : map.entrySet()) { if (newMap.containsKey(entry.getKey())) { newMap.put(entry.getKey(), entry.getValue()); } } } } - final StringMapMessage message = ((StringMapMessage) msg).newInstance(newMap); + final Message message = mapMsg.newInstance(newMap); final LogEvent result = new Log4jLogEvent.Builder(source).setMessage(message).build(); return result; } @@ -104,7 +106,7 @@ public final class MapRewritePolicy implements RewritePolicy { sb.append("mode=").append(mode); sb.append(" {"); boolean first = true; - for (final Map.Entry<String, String> entry : map.entrySet()) { + for (final Map.Entry<String, Object> entry : map.entrySet()) { if (!first) { sb.append(", "); } @@ -130,7 +132,7 @@ public final class MapRewritePolicy implements RewritePolicy { LOGGER.error("keys and values must be specified for the MapRewritePolicy"); return null; } - final Map<String, String> map = new HashMap<>(); + final Map<String, Object> map = new HashMap<>(); for (final KeyValuePair pair : pairs) { final String key = pair.getKey(); if (key == null) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1a153edb/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java index b91038a..c2ebc37 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java @@ -33,7 +33,7 @@ import org.apache.logging.log4j.core.config.plugins.PluginAttribute; import org.apache.logging.log4j.core.config.plugins.PluginElement; import org.apache.logging.log4j.core.config.plugins.PluginFactory; import org.apache.logging.log4j.core.util.KeyValuePair; -import org.apache.logging.log4j.message.StringMapMessage; +import org.apache.logging.log4j.message.MapMessage; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.util.BiConsumer; import org.apache.logging.log4j.util.IndexedReadOnlyStringMap; @@ -66,8 +66,8 @@ public class MapFilter extends AbstractFilter { @Override public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg, final Throwable t) { - if (msg instanceof StringMapMessage) { - return filter((StringMapMessage) msg) ? onMatch : onMismatch; + if (msg instanceof MapMessage) { + return filter((MapMessage) msg) ? onMatch : onMismatch; } return Result.NEUTRAL; } @@ -75,13 +75,13 @@ public class MapFilter extends AbstractFilter { @Override public Result filter(final LogEvent event) { final Message msg = event.getMessage(); - if (msg instanceof StringMapMessage) { - return filter((StringMapMessage) msg) ? onMatch : onMismatch; + if (msg instanceof MapMessage) { + return filter((MapMessage) msg) ? onMatch : onMismatch; } return Result.NEUTRAL; } - protected boolean filter(final StringMapMessage mapMessage) { + protected boolean filter(final MapMessage mapMessage) { boolean match = false; for (int i = 0; i < map.size(); i++) { final String toMatch = mapMessage.get(map.getKeyAt(i)); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1a153edb/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java index b834cff..caee345 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java @@ -96,7 +96,7 @@ public class MapRewritePolicyTest { rewritten = addPolicy.rewrite(logEvent2); compareLogEvents(logEvent2, rewritten); - checkAdded(((StringMapMessage)rewritten.getMessage()).getData()); + checkAdded(((StructuredDataMessage)rewritten.getMessage()).getData()); rewritten = addPolicy.rewrite(logEvent3); compareLogEvents(logEvent3, rewritten); @@ -116,7 +116,7 @@ public class MapRewritePolicyTest { rewritten = updatePolicy.rewrite(logEvent2); compareLogEvents(logEvent2, rewritten); - checkUpdated(((StringMapMessage)rewritten.getMessage()).getData()); + checkUpdated(((StructuredDataMessage)rewritten.getMessage()).getData()); rewritten = updatePolicy.rewrite(logEvent3); compareLogEvents(logEvent3, rewritten); @@ -136,7 +136,7 @@ public class MapRewritePolicyTest { rewritten = addPolicy.rewrite(logEvent2); compareLogEvents(logEvent2, rewritten); - checkAdded(((StringMapMessage)rewritten.getMessage()).getData()); + checkAdded(((StructuredDataMessage)rewritten.getMessage()).getData()); rewritten = addPolicy.rewrite(logEvent3); compareLogEvents(logEvent3, rewritten); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1a153edb/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java index 339855f..fb87ad9 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java @@ -29,7 +29,6 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.junit.LoggerContextRule; -import org.apache.logging.log4j.message.StringMapMessage; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.StructuredDataMessage; import org.apache.logging.log4j.test.appender.ListAppender; @@ -71,8 +70,8 @@ public class RewriteAppenderTest { assertTrue("Incorrect number of events. Expected 1, got " + list.size(), list.size() == 1); final LogEvent event = list.get(0); final Message m = event.getMessage(); - assertTrue("Message is not a MapMessage", m instanceof StringMapMessage); - final StringMapMessage message = (StringMapMessage) m; + assertTrue("Message is not a StringMapMessage: " + m.getClass(), m instanceof StructuredDataMessage); + final StructuredDataMessage message = (StructuredDataMessage) m; final Map<String, String> map = message.getData(); assertNotNull("No Map", map); assertTrue("Incorrect number of map entries, expected 3 got " + map.size(), map.size() == 3);
