From d3ebcfbd0d612dfc2fecd11ec199d3d2dbbf0d34 Mon Sep 17 00:00:00 2001 From: Rimal Date: Fri, 31 Aug 2018 01:30:51 +0530 Subject: [PATCH 1/4] LOG4J2-2427 log4j2 filter for logs with no markers --- .../log4j/core/filter/NoMarkerFilter.java | 151 ++++++++++++++++++ .../log4j/core/filter/NoMarkerFilterTest.java | 58 +++++++ 2 files changed, 209 insertions(+) create mode 100644 log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java create mode 100644 log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java new file mode 100644 index 00000000000..88d0f0f6fd4 --- /dev/null +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java @@ -0,0 +1,151 @@ +/* + * 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.core.filter; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.core.Filter; +import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.core.config.Node; +import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory; +import org.apache.logging.log4j.message.Message; +import org.apache.logging.log4j.util.PerformanceSensitive; + +/** + * This filter returns the onMatch result if the marker in the LogEvent is the same as or has the + * configured marker as a parent. + */ +@Plugin(name = "NoMarkerFilter", category = Node.CATEGORY, elementType = Filter.ELEMENT_TYPE, printObject = true) +@PerformanceSensitive("allocation") +public final class NoMarkerFilter extends AbstractFilter { + + private NoMarkerFilter(final Result onMatch, final Result onMismatch) { + super(onMatch, onMismatch); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object... params) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg, + final Throwable t) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg, + final Throwable t) { + return filter(marker); + } + + @Override + public Result filter(final LogEvent event) { + return filter(event.getMarker()); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4, final Object p5) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4, final Object p5, final Object p6) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4, final Object p5, final Object p6, + final Object p7) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4, final Object p5, final Object p6, + final Object p7, final Object p8) { + return filter(marker); + } + + @Override + public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, + final Object p0, final Object p1, final Object p2, final Object p3, + final Object p4, final Object p5, final Object p6, + final Object p7, final Object p8, final Object p9) { + return filter(marker); + } + + private Result filter(final Marker marker) { + return null == marker ? onMatch : onMismatch; + } + + + @PluginBuilderFactory + public static Builder newBuilder() { + return new Builder(); + } + + public static class Builder extends AbstractFilterBuilder implements org.apache.logging.log4j.core.util.Builder { + + @Override + public NoMarkerFilter build() { + return new NoMarkerFilter(this.getOnMatch(), this.getOnMismatch()); + } + } +} diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java new file mode 100644 index 00000000000..dee24a4e41b --- /dev/null +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java @@ -0,0 +1,58 @@ +/* + * 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.core.filter; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; +import org.apache.logging.log4j.core.Filter; +import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.impl.Log4jLogEvent; +import org.apache.logging.log4j.message.SimpleMessage; +import org.junit.Test; + +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + +public class NoMarkerFilterTest { + + @Test + public void testMarkers() { + final Marker sampleMarker = MarkerManager.getMarker("SampleMarker"); + NoMarkerFilter filter = NoMarkerFilter.newBuilder().build(); + filter.start(); + assertTrue(filter.isStarted()); + assertSame(Filter.Result.DENY, filter.filter(null, null, sampleMarker, (Object) null, (Throwable) null)); + assertSame(Filter.Result.NEUTRAL, filter.filter(null, null, null, (Object) null, (Throwable) null)); + filter.stop(); + LogEvent event = Log4jLogEvent.newBuilder() // +// .setMarker(grandChild) // + .setLevel(Level.DEBUG) // + .setMessage(new SimpleMessage("Hello, world!")).build(); + assertSame(Filter.Result.NEUTRAL, filter.filter(event)); + + filter.start(); + assertSame(Filter.Result.NEUTRAL, filter.filter(event)); + event = Log4jLogEvent.newBuilder() // + .setMarker(sampleMarker) // + .setLevel(Level.DEBUG) // + .setMessage(new SimpleMessage("Hello, world!")).build(); + assertSame(Filter.Result.DENY, filter.filter(event)); + filter.stop(); + } + +} From ad8ea7528834ef0eafe1266b215f3a31d68c3783 Mon Sep 17 00:00:00 2001 From: Rimal Date: Thu, 20 Sep 2018 17:24:26 +0530 Subject: [PATCH 2/4] removed commented code --- .../org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java index dee24a4e41b..f833858911a 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/NoMarkerFilterTest.java @@ -40,7 +40,6 @@ public void testMarkers() { assertSame(Filter.Result.NEUTRAL, filter.filter(null, null, null, (Object) null, (Throwable) null)); filter.stop(); LogEvent event = Log4jLogEvent.newBuilder() // -// .setMarker(grandChild) // .setLevel(Level.DEBUG) // .setMessage(new SimpleMessage("Hello, world!")).build(); assertSame(Filter.Result.NEUTRAL, filter.filter(event)); From a4649528c2770161a0d17a7ce3130b350d1ee0e8 Mon Sep 17 00:00:00 2001 From: Rimal Date: Mon, 17 Jun 2019 11:42:05 +0530 Subject: [PATCH 3/4] added documentation to the filters section --- .../log4j/core/filter/NoMarkerFilter.java | 3 +- src/site/asciidoc/manual/filters.adoc | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java index 88d0f0f6fd4..07c9787f532 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java @@ -28,8 +28,7 @@ import org.apache.logging.log4j.util.PerformanceSensitive; /** - * This filter returns the onMatch result if the marker in the LogEvent is the same as or has the - * configured marker as a parent. + * This filter returns the onMatch result if there is no marker in the LogEvent. */ @Plugin(name = "NoMarkerFilter", category = Node.CATEGORY, elementType = Filter.ELEMENT_TYPE, printObject = true) @PerformanceSensitive("allocation") diff --git a/src/site/asciidoc/manual/filters.adoc b/src/site/asciidoc/manual/filters.adoc index 4796c90c04a..4bdef827e81 100644 --- a/src/site/asciidoc/manual/filters.adoc +++ b/src/site/asciidoc/manual/filters.adoc @@ -397,6 +397,53 @@ appender if the Marker matches: ---- +[#NoMarkerFilter] +== NoMarkerFilter + +The NoMarkerFilter checks that there is no marker included in the LogEvent. A match occurs when there is no +marker in the Log Event. + +.No Marker Filter Parameters +[cols="1m,1,3"] +|=== +|Parameter Name |Type |Description + +|onMatch +|String +|Action to take when the filter matches. May be ACCEPT, +DENY or NEUTRAL. The default value is NEUTRAL. + +|onMismatch +|String +|Action to take when the filter does not match. May +be ACCEPT, DENY or NEUTRAL. The default value is DENY. +|=== + +A sample configuration that only allows the event to be written by the +appender if no marker is there: + +[source,xml] +---- + + + + + + + %d %p %c{1.} [%t] %m%n + + + + + + + + + + +---- + [#RegexFilter] == RegexFilter From 8c255d124128bd73ce1ede7fac3a5121d8b46c87 Mon Sep 17 00:00:00 2001 From: Rimal Date: Mon, 17 Jun 2019 12:33:42 +0530 Subject: [PATCH 4/4] master merged --- .../apache/logging/log4j/core/filter/NoMarkerFilter.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java index 07c9787f532..258a4bea817 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/NoMarkerFilter.java @@ -21,10 +21,10 @@ import org.apache.logging.log4j.core.Filter; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.Logger; -import org.apache.logging.log4j.core.config.Node; -import org.apache.logging.log4j.core.config.plugins.Plugin; -import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory; import org.apache.logging.log4j.message.Message; +import org.apache.logging.log4j.plugins.Node; +import org.apache.logging.log4j.plugins.Plugin; +import org.apache.logging.log4j.plugins.PluginBuilderFactory; import org.apache.logging.log4j.util.PerformanceSensitive; /**