Repository: logging-log4j2 Updated Branches: refs/heads/master e84c452f6 -> 171f9a328
LOG4J2-1677 Completes the work to make MapFilter garbage-free; call MapMessage::getDataValue to avoid calling MapMessage::getData (which allocates) Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/171f9a32 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/171f9a32 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/171f9a32 Branch: refs/heads/master Commit: 171f9a328508d432a9fac2a949312fcc5b974738 Parents: e84c452 Author: rpopma <rpo...@apache.org> Authored: Wed Nov 9 01:29:56 2016 +0900 Committer: rpopma <rpo...@apache.org> Committed: Wed Nov 9 01:29:56 2016 +0900 ---------------------------------------------------------------------- .../logging/log4j/core/filter/MapFilter.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/171f9a32/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 e760512..f856a2d 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 @@ -39,7 +39,6 @@ import org.apache.logging.log4j.util.BiConsumer; import org.apache.logging.log4j.util.PerformanceSensitive; import org.apache.logging.log4j.util.ReadOnlyStringMap; import org.apache.logging.log4j.util.SortedArrayStringMap; -import org.apache.logging.log4j.util.StringMap; /** * A Filter that operates on a Map. @@ -67,7 +66,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).getData()) ? onMatch : onMismatch; + return filter((MapMessage) msg) ? onMatch : onMismatch; } return Result.NEUTRAL; } @@ -76,11 +75,24 @@ public class MapFilter extends AbstractFilter { public Result filter(final LogEvent event) { final Message msg = event.getMessage(); if (msg instanceof MapMessage) { - return filter(((MapMessage) msg).getData()) ? onMatch : onMismatch; + return filter((MapMessage) msg) ? onMatch : onMismatch; } return Result.NEUTRAL; } + protected boolean filter(final MapMessage mapMessage) { + boolean match = false; + for (int i = 0; i < map.size(); i++) { + final String toMatch = mapMessage.getDataValue(map.getKeyAt(i)); + match = toMatch != null && ((List<String>) map.getValueAt(i)).contains(toMatch); + + if ((!isAnd && match) || (isAnd && !match)) { + break; + } + } + return match; + } + protected boolean filter(final Map<String, String> data) { boolean match = false; for (int i = 0; i < map.size(); i++) {