Repository: logging-log4j2 Updated Branches: refs/heads/master 864b7a83e -> 76aff5891
[LOG4J2-1935] Add with(String, primitive) methods to org.apache.logging.log4j.message.MapMessage. Build passes with 'mvn clean install' but I had to @Ignore HttpAppenderTest locally because it randomly fails. Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/76aff589 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/76aff589 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/76aff589 Branch: refs/heads/master Commit: 76aff58919dc5030367ea24c7c8ef42dca3b75cd Parents: 864b7a8 Author: Gary Gregory <[email protected]> Authored: Thu Jun 8 17:02:39 2017 -0700 Committer: Gary Gregory <[email protected]> Committed: Thu Jun 8 17:02:39 2017 -0700 ---------------------------------------------------------------------- .../logging/log4j/message/MapMessage.java | 269 +++++++++++++++++-- .../logging/log4j/message/StringMapMessage.java | 70 +++++ .../log4j/message/StructuredDataMessage.java | 123 ++++++--- .../logging/log4j/message/MapMessageTest.java | 12 +- .../appender/mom/activemq/JmsAppenderIT.java | 4 +- .../log4j/core/appender/mom/JmsManager.java | 13 +- .../core/appender/rewrite/MapRewritePolicy.java | 16 +- .../logging/log4j/core/filter/MapFilter.java | 6 +- .../log4j/core/layout/MessageLayout.java | 2 +- .../logging/log4j/core/lookup/MapLookup.java | 6 +- .../log4j/core/pattern/MapPatternConverter.java | 8 +- .../log4j/core/CollectionLoggingTest.java | 4 +- .../log4j/core/GcFreeLoggingTestUtil.java | 6 +- .../appender/rewrite/MapRewritePolicyTest.java | 24 +- .../appender/rewrite/RewriteAppenderTest.java | 5 +- .../log4j/core/filter/MapFilterTest.java | 8 +- .../log4j/core/lookup/MapLookupTest.java | 4 +- .../core/pattern/MapPatternConverterTest.java | 6 +- .../log4j/flume/appender/FlumeEvent.java | 10 +- .../appender/FlumePersistentAppenderTest.java | 2 +- .../logging/log4j/lookup/CustomMapMessage.java | 4 +- .../logging/log4j/lookup/MapMessageLookup.java | 6 +- src/changes/changes.xml | 3 + 23 files changed, 477 insertions(+), 134 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/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 0cbf0ff..5ca4971 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 @@ -40,10 +40,17 @@ import org.apache.logging.log4j.util.TriConsumer; * logged, because it is undefined whether the logged message string will contain the old values or the modified * values. * </p> + * <p> + * This class was pulled up from {@link StringMapMessage} to allow for Objects as values. + * </p> + * @param <M> Allow subclasses to use fluent APIs and override methods that return instances of subclasses. + * @param <V> The value type */ @PerformanceSensitive("allocation") @AsynchronouslyFormattable -public class MapMessage implements MultiformatMessage, StringBuilderFormattable { +public class MapMessage<M extends MapMessage<M, V>, V> implements MultiformatMessage, StringBuilderFormattable { + + private static final long serialVersionUID = -5031471831131487120L; /** * When set as the format specifier causes the Map to be formatted as XML. @@ -82,8 +89,6 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable } } - private static final long serialVersionUID = -5031471831131487120L; - private final IndexedStringMap data; /** @@ -94,10 +99,19 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable } /** + * Constructs a new instance. + * + * @param initialCapacity the initial capacity. + */ + public MapMessage(final int initialCapacity) { + data = new SortedArrayStringMap(initialCapacity); + } + + /** * Constructs a new instance based on an existing Map. * @param map The Map. */ - public MapMessage(final Map<String, String> map) { + public MapMessage(final Map<String, V> map) { this.data = new SortedArrayStringMap(map); } @@ -132,10 +146,12 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable * 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 + @SuppressWarnings("unchecked") + 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); } @@ -167,17 +183,6 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable } /** - * Adds an item to the data Map in fluent style. - * @param key The name of the data item. - * @param value The value of the data item. - * @return {@code this} - */ - public MapMessage with(final String key, final String value) { - put(key, value); - return this; - } - - /** * Adds an item to the data Map. * @param key The name of the data item. * @param value The value of the data item. @@ -190,10 +195,6 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable data.putValue(key, value); } - protected void validate(final String key, final String value) { - - } - /** * Adds all the elements from the specified Map. * @param map The Map to add. @@ -258,14 +259,14 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable * </p> * * @param action The action to be performed for each key-value pair in this collection - * @param <V> type of the value + * @param <CV> type of the consumer value * @throws java.util.ConcurrentModificationException some implementations may not support structural modifications * to this data structure while iterating over the contents with {@link #forEach(BiConsumer)} or * {@link #forEach(TriConsumer, Object)}. * @see ReadOnlyStringMap#forEach(BiConsumer) * @since 2.9 */ - public <V> void forEach(final BiConsumer<String, ? super V> action) { + public <CV> void forEach(final BiConsumer<String, ? super CV> action) { data.forEach(action); } @@ -286,7 +287,7 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable * @param action The action to be performed for each key-value pair in this collection * @param state the object to be passed as the third parameter to each invocation on the specified * triconsumer - * @param <V> type of the value + * @param <CV> type of the consumer value * @param <S> type of the third parameter * @throws java.util.ConcurrentModificationException some implementations may not support structural modifications * to this data structure while iterating over the contents with {@link #forEach(BiConsumer)} or @@ -294,7 +295,7 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable * @see ReadOnlyStringMap#forEach(TriConsumer, Object) * @since 2.9 */ - public <V, S> void forEach(final TriConsumer<String, ? super V, S> action, final S state) { + public <CV, S> void forEach(final TriConsumer<String, ? super CV, S> action, final S state) { data.forEach(action, state); } @@ -415,8 +416,9 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable * @param map The Map. * @return A new MapMessage */ - public MapMessage newInstance(final Map<String, String> map) { - return new MapMessage(map); + @SuppressWarnings("unchecked") + public M newInstance(final Map<String, V> map) { + return (M) new MapMessage<>(map); } @Override @@ -438,7 +440,7 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable return false; } - final MapMessage that = (MapMessage) o; + final MapMessage<?, ?> that = (MapMessage<?, ?>) o; return this.data.equals(that.data); } @@ -457,4 +459,213 @@ public class MapMessage implements MultiformatMessage, StringBuilderFormattable public Throwable getThrowable() { return null; } + /** + * @since 2.9 + */ + protected void validate(final String key, final boolean value) { + // do nothing + } + + /** + * @since 2.9 + */ + protected void validate(final String key, final byte value) { + // do nothing + } + + /** + * @since 2.9 + */ + protected void validate(final String key, final char value) { + // do nothing + } + + /** + * @since 2.9 + */ + protected void validate(final String key, final double value) { + // do nothing + } + + /** + * @since 2.9 + */ + protected void validate(final String key, final float value) { + // do nothing + } + + /** + * @since 2.9 + */ + protected void validate(final String key, final int value) { + // do nothing + } + + /** + * @since 2.9 + */ + protected void validate(final String key, final long value) { + // do nothing + } + + /** + * @since 2.9 + */ + protected void validate(final String key, final Object value) { + // do nothing + } + + /** + * @since 2.9 + */ + protected void validate(final String key, final short value) { + // do nothing + } + + /** + * @since 2.9 + */ + protected void validate(final String key, final String value) { + // do nothing + } + + /** + * Adds an item to the data Map. + * @param key The name of the data item. + * @param value The value of the data item. + * @return this object + * @since 2.9 + */ + @SuppressWarnings("unchecked") + public M with(final String key, final boolean value) { + validate(key, value); + data.putValue(key, value); + return (M) this; + } + + /** + * Adds an item to the data Map. + * @param key The name of the data item. + * @param value The value of the data item. + * @return this object + * @since 2.9 + */ + @SuppressWarnings("unchecked") + public M with(final String key, final byte value) { + validate(key, value); + data.putValue(key, value); + return (M) this; + } + + /** + * Adds an item to the data Map. + * @param key The name of the data item. + * @param value The value of the data item. + * @return this object + * @since 2.9 + */ + @SuppressWarnings("unchecked") + public M with(final String key, final char value) { + validate(key, value); + data.putValue(key, value); + return (M) this; + } + + + /** + * Adds an item to the data Map. + * @param key The name of the data item. + * @param value The value of the data item. + * @return this object + * @since 2.9 + */ + @SuppressWarnings("unchecked") + public M with(final String key, final double value) { + validate(key, value); + data.putValue(key, value); + return (M) this; + } + + /** + * Adds an item to the data Map. + * @param key The name of the data item. + * @param value The value of the data item. + * @return this object + * @since 2.9 + */ + @SuppressWarnings("unchecked") + public M with(final String key, final float value) { + validate(key, value); + data.putValue(key, value); + return (M) this; + } + + /** + * Adds an item to the data Map. + * @param key The name of the data item. + * @param value The value of the data item. + * @return this object + * @since 2.9 + */ + @SuppressWarnings("unchecked") + public M with(final String key, final int value) { + validate(key, value); + data.putValue(key, value); + return (M) this; + } + + /** + * Adds an item to the data Map. + * @param key The name of the data item. + * @param value The value of the data item. + * @return this object + * @since 2.9 + */ + @SuppressWarnings("unchecked") + public M with(final String key, final long value) { + validate(key, value); + data.putValue(key, value); + return (M) this; + } + + /** + * Adds an item to the data Map. + * @param key The name of the data item. + * @param value The value of the data item. + * @return this object + * @since 2.9 + */ + @SuppressWarnings("unchecked") + public M with(final String key, final Object value) { + validate(key, value); + data.putValue(key, value); + return (M) this; + } + + /** + * Adds an item to the data Map. + * @param key The name of the data item. + * @param value The value of the data item. + * @return this object + * @since 2.9 + */ + @SuppressWarnings("unchecked") + public M with(final String key, final short value) { + validate(key, value); + data.putValue(key, value); + return (M) this; + } + + /** + * Adds an item to the data Map in fluent style. + * @param key The name of the data item. + * @param value The value of the data item. + * @return {@code this} + */ + @SuppressWarnings("unchecked") + public M with(final String key, final String value) { + put(key, value); + return (M) this; + } + } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/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 new file mode 100644 index 0000000..9c3ee18 --- /dev/null +++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/StringMapMessage.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ + +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; + + /** + * Constructs a new instance. + */ + public StringMapMessage() { + super(); + } + + /** + * Constructs a new instance. + * + * @param initialCapacity + * the initial capacity. + */ + public StringMapMessage(final int initialCapacity) { + super(initialCapacity); + } + + /** + * Constructs a new instance based on an existing 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/76aff589/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.java ---------------------------------------------------------------------- diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.java index fcaee4d..d610cc4 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/StructuredDataMessage.java @@ -35,7 +35,7 @@ import org.apache.logging.log4j.util.StringBuilders; * @see <a href="https://tools.ietf.org/html/rfc5424">RFC 5424</a> */ @AsynchronouslyFormattable -public class StructuredDataMessage extends MapMessage implements StringBuilderFormattable { +public class StructuredDataMessage extends MapMessage<StructuredDataMessage, String> implements StringBuilderFormattable { private static final long serialVersionUID = 1703221292892071920L; private static final int MAX_LENGTH = 32; @@ -134,18 +134,6 @@ public class StructuredDataMessage extends MapMessage implements StringBuilderFo } /** - * Add an item to the data Map in fluent style. - * @param key The name of the data item. - * @param value The value of the data item. - * @return {@code this} - */ - @Override - public StructuredDataMessage with(final String key, final String value) { - put(key, value); - return this; - } - - /** * Returns the supported formats. * @return An array of the supported format names. */ @@ -216,25 +204,6 @@ public class StructuredDataMessage extends MapMessage implements StringBuilderFo this.message = msg; } - - @Override - protected void validate(final String key, final String value) { - validateKey(key); - } - - private void validateKey(final String key) { - if (key.length() > MAX_LENGTH) { - throw new IllegalArgumentException("Structured data keys are limited to 32 characters. key: " + key); - } - for (int i = 0; i < key.length(); i++) { - final char c = key.charAt(i); - if (c < '!' || c > '~' || c == '=' || c == ']' || c == '"') { - throw new IllegalArgumentException("Structured data keys must contain printable US ASCII characters" + - "and may not contain a space, =, ], or \""); - } - } - } - /** * Formats the structured data as described in RFC 5424. * @@ -371,7 +340,7 @@ public class StructuredDataMessage extends MapMessage implements StringBuilderFo @Override - public MapMessage newInstance(final Map<String, String> map) { + public StructuredDataMessage newInstance(final Map<String, String> map) { return new StructuredDataMessage(this, map); } @@ -410,4 +379,92 @@ public class StructuredDataMessage extends MapMessage implements StringBuilderFo result = HASHVAL * result + (message != null ? message.hashCode() : 0); return result; } + + @Override + protected void validate(String key, boolean value) { + validateKey(key); + } + + /** + * @since 2.9 + */ + @Override + protected void validate(String key, byte value) { + validateKey(key); + } + + /** + * @since 2.9 + */ + @Override + protected void validate(String key, char value) { + validateKey(key); + } + + /** + * @since 2.9 + */ + @Override + protected void validate(String key, double value) { + validateKey(key); + } + + /** + * @since 2.9 + */ + @Override + protected void validate(String key, float value) { + validateKey(key); + } + + /** + * @since 2.9 + */ + @Override + protected void validate(String key, int value) { + validateKey(key); + } + + /** + * @since 2.9 + */ + @Override + protected void validate(String key, long value) { + validateKey(key); + } + + /** + * @since 2.9 + */ + @Override + protected void validate(String key, Object value) { + validateKey(key); + } + + /** + * @since 2.9 + */ + @Override + protected void validate(String key, short value) { + validateKey(key); + } + + @Override + protected void validate(final String key, final String value) { + validateKey(key); + } + + private void validateKey(final String key) { + if (key.length() > MAX_LENGTH) { + throw new IllegalArgumentException("Structured data keys are limited to 32 characters. key: " + key); + } + for (int i = 0; i < key.length(); i++) { + final char c = key.charAt(i); + if (c < '!' || c > '~' || c == '=' || c == ']' || c == '"') { + throw new IllegalArgumentException("Structured data keys must contain printable US ASCII characters" + + "and may not contain a space, =, ], or \""); + } + } + } + } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/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 e7bef75..1e06914 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 @@ -28,7 +28,7 @@ public class MapMessageTest { @Test public void testMap() { final String testMsg = "Test message {}"; - final MapMessage msg = new MapMessage(); + final StringMapMessage msg = new StringMapMessage(); msg.put("message", testMsg); msg.put("project", "Log4j"); final String result = msg.getFormattedMessage(); @@ -39,7 +39,7 @@ public class MapMessageTest { @Test public void testBuilder() { final String testMsg = "Test message {}"; - final MapMessage msg = new MapMessage() + final StringMapMessage msg = new StringMapMessage() .with("message", testMsg) .with("project", "Log4j"); final String result = msg.getFormattedMessage(); @@ -50,7 +50,7 @@ public class MapMessageTest { @Test public void testXML() { final String testMsg = "Test message {}"; - final MapMessage msg = new MapMessage(); + final StringMapMessage msg = new StringMapMessage(); msg.put("message", testMsg); msg.put("project", "Log4j"); final String result = msg.getFormattedMessage(new String[]{"XML"}); @@ -63,7 +63,7 @@ public class MapMessageTest { @Test public void testJSON() { final String testMsg = "Test message {}"; - final MapMessage msg = new MapMessage(); + final StringMapMessage msg = new StringMapMessage(); msg.put("message", testMsg); msg.put("project", "Log4j"); final String result = msg.getFormattedMessage(new String[]{"JSON"}); @@ -74,7 +74,7 @@ public class MapMessageTest { @Test public void testJava() { final String testMsg = "Test message {}"; - final MapMessage msg = new MapMessage(); + final StringMapMessage msg = new StringMapMessage(); msg.put("message", testMsg); msg.put("project", "Log4j"); final String result = msg.getFormattedMessage(new String[]{"Java"}); @@ -84,7 +84,7 @@ public class MapMessageTest { @Test public void testMutableByDesign() { // LOG4J2-763 - final MapMessage msg = new MapMessage(); + final StringMapMessage msg = new StringMapMessage(); // modify parameter before calling msg.getFormattedMessage msg.put("key1", "value1"); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/mom/activemq/JmsAppenderIT.java ---------------------------------------------------------------------- diff --git a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/mom/activemq/JmsAppenderIT.java b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/mom/activemq/JmsAppenderIT.java index b0bf594..989701e 100644 --- a/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/mom/activemq/JmsAppenderIT.java +++ b/log4j-core-its/src/test/java/org/apache/logging/log4j/core/appender/mom/activemq/JmsAppenderIT.java @@ -44,7 +44,7 @@ import org.apache.logging.log4j.core.impl.Log4jLogEvent; import org.apache.logging.log4j.core.layout.MessageLayout; import org.apache.logging.log4j.core.layout.SerializedLayout; import org.apache.logging.log4j.core.net.JndiManager; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; import org.apache.logging.log4j.message.SimpleMessage; import org.junit.After; import org.junit.Assert; @@ -108,7 +108,7 @@ public class JmsAppenderIT { map.put("threadName", Thread.currentThread().getName()); final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName(loggerName) // .setLoggerFqcn(loggerName).setLevel(Level.INFO) // - .setMessage(new MapMessage(map)) // + .setMessage(new StringMapMessage(map)) // .setTimeMillis(System.currentTimeMillis()).build(); appender.append(event); } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java index cddf791..bedba18 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/mom/JmsManager.java @@ -132,20 +132,19 @@ public class JmsManager extends AbstractManager { public Message createMessage(final Serializable object) throws JMSException { if (object instanceof String) { return this.session.createTextMessage((String) object); - } - else if (object instanceof org.apache.logging.log4j.message.MapMessage) { - return map((org.apache.logging.log4j.message.MapMessage) object, this.session.createMapMessage()); + } else if (object instanceof org.apache.logging.log4j.message.MapMessage) { + return map((org.apache.logging.log4j.message.MapMessage<?, ?>) object, this.session.createMapMessage()); } return this.session.createObjectMessage(object); } - private MapMessage map(final org.apache.logging.log4j.message.MapMessage log4jMapMessage, final MapMessage jmsMapMessage) { + private MapMessage map(final org.apache.logging.log4j.message.MapMessage<?, ?> log4jMapMessage, final MapMessage jmsMapMessage) { // Map without calling rg.apache.logging.log4j.message.MapMessage#getData() which makes a copy of the map. - log4jMapMessage.forEach(new BiConsumer<String, String>() { + log4jMapMessage.forEach(new BiConsumer<String, Object>() { @Override - public void accept(final String key, final String value) { + public void accept(final String key, final Object value) { try { - jmsMapMessage.setString(key, value); + jmsMapMessage.setObject(key, value); } catch (JMSException e) { throw new IllegalArgumentException(String.format("%s mapping key '%s' to value '%s': %s", e.getClass(), key, value, e.getLocalizedMessage()), e); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/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 7735424..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 @@ -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; } @@ -64,21 +64,23 @@ public final class MapRewritePolicy implements RewritePolicy { return source; } - final Map<String, String> newMap = new HashMap<>(((MapMessage) 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 MapMessage message = ((MapMessage) 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/76aff589/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 c2ebc37..de17256 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 @@ -67,7 +67,7 @@ public class MapFilter extends AbstractFilter { public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg, final Throwable t) { if (msg instanceof MapMessage) { - return filter((MapMessage) msg) ? onMatch : onMismatch; + return filter((MapMessage<?, ?>) msg) ? onMatch : onMismatch; } return Result.NEUTRAL; } @@ -76,12 +76,12 @@ public class MapFilter extends AbstractFilter { public Result filter(final LogEvent event) { final Message msg = event.getMessage(); if (msg instanceof MapMessage) { - return filter((MapMessage) msg) ? onMatch : onMismatch; + return filter((MapMessage<?, ?>) msg) ? onMatch : onMismatch; } return Result.NEUTRAL; } - protected boolean filter(final MapMessage 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/76aff589/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MessageLayout.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MessageLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MessageLayout.java index 9adb8ee..58455ee 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MessageLayout.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/MessageLayout.java @@ -28,7 +28,7 @@ import org.apache.logging.log4j.message.Message; /** * Formats a {@link LogEvent} in its {@link Message} form. * <p> - * Useful in combination with a JMS Appender to map a Log4j {@link org.apache.logging.log4j.message.MapMessage} to a JMS + * Useful in combination with a JMS Appender to map a Log4j {@link org.apache.logging.log4j.message.StringMapMessage} to a JMS * {@link javax.jms.MapMessage}. * </p> */ http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MapLookup.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MapLookup.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MapLookup.java index c00645e..466decb 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MapLookup.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/MapLookup.java @@ -22,7 +22,7 @@ import java.util.Map; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; /** * A map-based lookup. @@ -118,7 +118,7 @@ public class MapLookup implements StrLookup { @Override public String lookup(final LogEvent event, final String key) { - final boolean isMapMessage = event != null && event.getMessage() instanceof MapMessage; + final boolean isMapMessage = event != null && event.getMessage() instanceof StringMapMessage; if (map == null && !isMapMessage) { return null; } @@ -129,7 +129,7 @@ public class MapLookup implements StrLookup { } } if (isMapMessage) { - return ((MapMessage) event.getMessage()).get(key); + return ((StringMapMessage) event.getMessage()).get(key); } return null; } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java index fd3c7b2..6f018bd 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java @@ -18,7 +18,7 @@ package org.apache.logging.log4j.core.pattern; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; import org.apache.logging.log4j.util.IndexedReadOnlyStringMap; /** @@ -60,9 +60,9 @@ public final class MapPatternConverter extends LogEventPatternConverter { */ @Override public void format(final LogEvent event, final StringBuilder toAppendTo) { - MapMessage msg; - if (event.getMessage() instanceof MapMessage) { - msg = (MapMessage) event.getMessage(); + StringMapMessage msg; + if (event.getMessage() instanceof StringMapMessage) { + msg = (StringMapMessage) event.getMessage(); } else { return; } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java index 505bf3f..d1ca640 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java @@ -24,7 +24,7 @@ import java.util.Map; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.junit.LoggerContextRule; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; import org.apache.logging.log4j.test.appender.ListAppender; import org.junit.Before; import org.junit.ClassRule; @@ -61,7 +61,7 @@ public class CollectionLoggingTest { final Map<String, String> map = new HashMap<>(); map.put("MyKey1", "MyValue1"); map.put("MyKey2", "MyValue2"); - logger.error(new MapMessage(map)); + logger.error(new StringMapMessage(map)); logger.error(map); // TODO: some assertions } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java index 7c4abd1..69ffe2c 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTestUtil.java @@ -32,7 +32,7 @@ import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.MarkerManager; import org.apache.logging.log4j.ThreadContext; import org.apache.logging.log4j.core.util.Constants; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; import org.apache.logging.log4j.util.Strings; import com.google.monitoring.runtime.instrumentation.AllocationRecorder; @@ -70,7 +70,7 @@ public class GcFreeLoggingTestUtil { logger.fatal(test, "This message is logged to the console"); logger.error("Sample error message"); logger.error("Test parameterized message {}", "param"); - logger.error(new MapMessage().with("eventId", "Login")); // initialize GelfLayout's messageStringBuilder + logger.error(new StringMapMessage().with("eventId", "Login")); // initialize GelfLayout's messageStringBuilder for (int i = 0; i < 256; i++) { logger.debug("ensure all ringbuffer slots have been used once"); // allocate MutableLogEvent.messageText } @@ -105,7 +105,7 @@ public class GcFreeLoggingTestUtil { } }; Thread.sleep(500); - final MapMessage mapMessage = new MapMessage().with("eventId", "Login"); + final StringMapMessage mapMessage = new StringMapMessage().with("eventId", "Login"); AllocationRecorder.addSampler(sampler); // now do some steady-state logging http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/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 e18cb00..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 @@ -25,7 +25,7 @@ import org.apache.logging.log4j.MarkerManager; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.impl.Log4jLogEvent; import org.apache.logging.log4j.core.util.KeyValuePair; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; import org.apache.logging.log4j.message.SimpleMessage; import org.apache.logging.log4j.message.StructuredDataMessage; import org.apache.logging.log4j.spi.MutableThreadContextStack; @@ -60,7 +60,7 @@ public class MapRewritePolicyTest { .setTimeMillis(2).build(); logEvent1 = ((Log4jLogEvent) logEvent0).asBuilder() // - .setMessage(new MapMessage(map)) // + .setMessage(new StringMapMessage(map)) // .setSource(new StackTraceElement("MapRewritePolicyTest", "setupClass", "MapRewritePolicyTest", 29)) // .build(); @@ -76,7 +76,7 @@ public class MapRewritePolicyTest { logEvent3 = ((Log4jLogEvent) logEvent0).asBuilder() // .setContextStack(stack) // .setLevel(Level.ALL) // - .setMessage(new MapMessage(map)) // + .setMessage(new StringMapMessage(map)) // .setTimeMillis(Long.MAX_VALUE) // .setSource(new StackTraceElement("MapRewritePolicyTest", "setupClass", "MapRewritePolicyTest", 31)) // .build(); @@ -92,15 +92,15 @@ public class MapRewritePolicyTest { rewritten = addPolicy.rewrite(logEvent1); compareLogEvents(logEvent1, rewritten); - checkAdded(((MapMessage)rewritten.getMessage()).getData()); + checkAdded(((StringMapMessage)rewritten.getMessage()).getData()); rewritten = addPolicy.rewrite(logEvent2); compareLogEvents(logEvent2, rewritten); - checkAdded(((MapMessage)rewritten.getMessage()).getData()); + checkAdded(((StructuredDataMessage)rewritten.getMessage()).getData()); rewritten = addPolicy.rewrite(logEvent3); compareLogEvents(logEvent3, rewritten); - checkAdded(((MapMessage)rewritten.getMessage()).getData()); + checkAdded(((StringMapMessage)rewritten.getMessage()).getData()); } @Test @@ -112,15 +112,15 @@ public class MapRewritePolicyTest { rewritten = updatePolicy.rewrite(logEvent1); compareLogEvents(logEvent1, rewritten); - checkUpdated(((MapMessage)rewritten.getMessage()).getData()); + checkUpdated(((StringMapMessage)rewritten.getMessage()).getData()); rewritten = updatePolicy.rewrite(logEvent2); compareLogEvents(logEvent2, rewritten); - checkUpdated(((MapMessage)rewritten.getMessage()).getData()); + checkUpdated(((StructuredDataMessage)rewritten.getMessage()).getData()); rewritten = updatePolicy.rewrite(logEvent3); compareLogEvents(logEvent3, rewritten); - checkUpdated(((MapMessage)rewritten.getMessage()).getData()); + checkUpdated(((StringMapMessage)rewritten.getMessage()).getData()); } @Test @@ -132,15 +132,15 @@ public class MapRewritePolicyTest { rewritten = addPolicy.rewrite(logEvent1); compareLogEvents(logEvent1, rewritten); - checkAdded(((MapMessage)rewritten.getMessage()).getData()); + checkAdded(((StringMapMessage)rewritten.getMessage()).getData()); rewritten = addPolicy.rewrite(logEvent2); compareLogEvents(logEvent2, rewritten); - checkAdded(((MapMessage)rewritten.getMessage()).getData()); + checkAdded(((StructuredDataMessage)rewritten.getMessage()).getData()); rewritten = addPolicy.rewrite(logEvent3); compareLogEvents(logEvent3, rewritten); - checkAdded(((MapMessage)rewritten.getMessage()).getData()); + checkAdded(((StringMapMessage)rewritten.getMessage()).getData()); } private void checkAdded(final Map<String, String> addedMap) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/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 1c9c9b1..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.MapMessage; 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 MapMessage); - final MapMessage message = (MapMessage) 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); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java index 61006cb..7310d38 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MapFilterTest.java @@ -27,7 +27,7 @@ import org.apache.logging.log4j.core.Filter; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.util.KeyValuePair; import org.apache.logging.log4j.junit.LoggerContextRule; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; import org.apache.logging.log4j.test.appender.ListAppender; import org.junit.ClassRule; import org.junit.Test; @@ -48,7 +48,7 @@ public class MapFilterTest { new KeyValuePair("ToAccount", "123456")}; MapFilter filter = MapFilter.createFilter(pairs, "and", null, null); filter.start(); - MapMessage msg = new MapMessage(); + StringMapMessage msg = new StringMapMessage(); msg.put("ToAccount", "123456"); msg.put("FromAccount", "211000"); msg.put("Amount", "1000.00"); @@ -58,7 +58,7 @@ public class MapFilterTest { assertSame(Filter.Result.DENY, filter.filter(null, Level.ERROR, null, msg, null)); filter = MapFilter.createFilter(pairs, "or", null, null); filter.start(); - msg = new MapMessage(); + msg = new StringMapMessage(); msg.put("ToAccount", "123456"); msg.put("FromAccount", "211000"); msg.put("Amount", "1000.00"); @@ -85,7 +85,7 @@ public class MapFilterTest { final Logger logger = LogManager.getLogger(MapFilterTest.class); final Map<String, String> eventMap = new HashMap<>(); eventMap.put("eventId", "Login"); - logger.debug(new MapMessage(eventMap)); + logger.debug(new StringMapMessage(eventMap)); final ListAppender app = context.getListAppender("LIST"); final List<String> msgs = app.getMessages(); assertNotNull("No messages", msgs); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MapLookupTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MapLookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MapLookupTest.java index 313b527..61d81ec 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MapLookupTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MapLookupTest.java @@ -22,7 +22,7 @@ import java.util.HashMap; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.impl.Log4jLogEvent; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; import org.junit.Test; /** @@ -73,7 +73,7 @@ public class MapLookupTest { map.put("A", "B"); final HashMap<String, String> eventMap = new HashMap<>(); eventMap.put("A1", "B1"); - final MapMessage message = new MapMessage(eventMap); + final StringMapMessage message = new StringMapMessage(eventMap); final LogEvent event = Log4jLogEvent.newBuilder() .setMessage(message) .build(); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MapPatternConverterTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MapPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MapPatternConverterTest.java index 23ebd36..811924a 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MapPatternConverterTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MapPatternConverterTest.java @@ -19,7 +19,7 @@ package org.apache.logging.log4j.core.pattern; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.impl.Log4jLogEvent; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; import org.junit.Test; import static org.junit.Assert.*; @@ -32,7 +32,7 @@ public class MapPatternConverterTest { @Test public void testConverter() { - final MapMessage msg = new MapMessage(); + final StringMapMessage msg = new StringMapMessage(); msg.put("subject", "I"); msg.put("verb", "love"); msg.put("object", "Log4j"); @@ -58,7 +58,7 @@ public class MapPatternConverterTest { @Test public void testConverterWithKey() { - final MapMessage msg = new MapMessage(); + final StringMapMessage msg = new StringMapMessage(); msg.put("subject", "I"); msg.put("verb", "love"); msg.put("object", "Log4j"); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java ---------------------------------------------------------------------- diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java index a1059df..01559f2 100644 --- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java +++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java @@ -29,7 +29,6 @@ import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LoggingException; import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.ThreadContext; -import org.apache.logging.log4j.util.ReadOnlyStringMap; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.impl.Log4jLogEvent; import org.apache.logging.log4j.core.impl.ThrowableProxy; @@ -39,6 +38,7 @@ import org.apache.logging.log4j.message.MapMessage; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.StructuredDataId; import org.apache.logging.log4j.message.StructuredDataMessage; +import org.apache.logging.log4j.util.ReadOnlyStringMap; import org.apache.logging.log4j.util.Strings; /** @@ -133,11 +133,13 @@ public class FlumeEvent extends SimpleEvent implements LogEvent { final Message message = event.getMessage(); if (message instanceof MapMessage) { // Add the guid to the Map so that it can be included in the Layout. - ((MapMessage) message).put(GUID, guid); + @SuppressWarnings("unchecked") + MapMessage<?, String> stringMapMessage = (MapMessage<?, String>) message; + stringMapMessage.put(GUID, guid); if (message instanceof StructuredDataMessage) { addStructuredData(eventPrefix, headers, (StructuredDataMessage) message); } - addMapData(eventPrefix, headers, (MapMessage) message); + addMapData(eventPrefix, headers, stringMapMessage); } else { headers.put(GUID, guid); } @@ -152,7 +154,7 @@ public class FlumeEvent extends SimpleEvent implements LogEvent { fields.put(prefix + EVENT_ID, id.getName()); } - protected void addMapData(final String prefix, final Map<String, String> fields, final MapMessage msg) { + protected void addMapData(final String prefix, final Map<String, String> fields, final MapMessage<?, String> msg) { final Map<String, String> data = msg.getData(); for (final Map.Entry<String, String> entry : data.entrySet()) { fields.put(prefix + entry.getKey(), entry.getValue()); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java ---------------------------------------------------------------------- diff --git a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java index 48397b5..4a8cfc9 100644 --- a/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java +++ b/log4j-flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumePersistentAppenderTest.java @@ -153,7 +153,7 @@ public class FlumePersistentAppenderTest { final Event event = primary.poll(); Assert.assertNotNull("Received " + i + " events. Event " + (i + 1) + " is null", event); final String value = event.getHeaders().get("counter"); - Assert.assertNotNull("Missing counter", value); + Assert.assertNotNull("Missing 'counter' in map " + event.getHeaders() + ", i = " + i, value); final int counter = Integer.parseInt(value); if (fields[counter]) { Assert.fail("Duplicate event"); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/CustomMapMessage.java ---------------------------------------------------------------------- diff --git a/log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/CustomMapMessage.java b/log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/CustomMapMessage.java index dabd91e..06f78f4 100644 --- a/log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/CustomMapMessage.java +++ b/log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/CustomMapMessage.java @@ -17,7 +17,7 @@ package org.apache.logging.log4j.lookup; import org.apache.logging.log4j.message.AsynchronouslyFormattable; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; import java.util.Map; @@ -25,7 +25,7 @@ import java.util.Map; * */ @AsynchronouslyFormattable -public class CustomMapMessage extends MapMessage { +public class CustomMapMessage extends StringMapMessage { private static final long serialVersionUID = 1L; private final String message; http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/MapMessageLookup.java ---------------------------------------------------------------------- diff --git a/log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/MapMessageLookup.java b/log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/MapMessageLookup.java index 0bcd0dd..1184382 100644 --- a/log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/MapMessageLookup.java +++ b/log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/MapMessageLookup.java @@ -23,7 +23,7 @@ import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.lookup.AbstractLookup; import org.apache.logging.log4j.core.lookup.StrLookup; -import org.apache.logging.log4j.message.MapMessage; +import org.apache.logging.log4j.message.StringMapMessage; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.status.StatusLogger; @@ -52,9 +52,9 @@ public class MapMessageLookup extends AbstractLookup { @Override public String lookup(final LogEvent event, final String key) { final Message msg = event.getMessage(); - if (msg instanceof MapMessage) { + if (msg instanceof StringMapMessage) { try { - final Map<String, String> properties = ((MapMessage) msg).getData(); + final Map<String, String> properties = ((StringMapMessage) msg).getData(); if (properties == null) { return ""; } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/76aff589/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index b2b6b16..846eb8c 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -40,6 +40,9 @@ <action issue="LOG4J2-1442" dev="mikes" type="add"> Generic HTTP appender. </action> + <action issue="LOG4J2-1935" dev="ggregory" type="add"> + Add with(String, primitive) methods to org.apache.logging.log4j.message.MapMessage. + </action> <action issue="LOG4J2-1930" dev="ggregory" type="add"> Add forEach() methods to org.apache.logging.log4j.message.MapMessage. </action>
