From 272bf784cb66120cd81367dbf5ba2f096b9fd525 Mon Sep 17 00:00:00 2001 From: LuckysHorizon Date: Sun, 19 Jul 2026 20:15:38 +0530 Subject: [PATCH 1/2] PropertiesConfigurationBuilder: accept case-insensitive filter attributes (onMatch/onMismatch) and add failing test for mis-cased property Addresses apache#2791 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../MarkerFilterPropertiesCaseTest.java | 19 +++++++++++++++++++ ...properties-markerfilter-miscase.properties | 16 ++++++++++++++++ .../PropertiesConfigurationBuilder.java | 15 +++++++++++++-- 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/MarkerFilterPropertiesCaseTest.java create mode 100644 log4j-core-test/src/test/resources/log4j2-properties-markerfilter-miscase.properties diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/MarkerFilterPropertiesCaseTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/MarkerFilterPropertiesCaseTest.java new file mode 100644 index 00000000000..7caf966a0e6 --- /dev/null +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/MarkerFilterPropertiesCaseTest.java @@ -0,0 +1,19 @@ +package org.apache.logging.log4j.core.config.properties; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.apache.logging.log4j.core.Configuration; +import org.apache.logging.log4j.core.LifeCycle; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; +import org.junit.jupiter.api.Test; + +class MarkerFilterPropertiesCaseTest { + + @Test + @LoggerContextSource("log4j2-properties-markerfilter-miscase.properties") + void testMarkerFilterPropertyCase(final Configuration config) { + assertNotNull(config); + assertEquals(LifeCycle.State.STARTED, config.getState(), "Configuration did not start"); + } +} diff --git a/log4j-core-test/src/test/resources/log4j2-properties-markerfilter-miscase.properties b/log4j-core-test/src/test/resources/log4j2-properties-markerfilter-miscase.properties new file mode 100644 index 00000000000..c2233101e94 --- /dev/null +++ b/log4j-core-test/src/test/resources/log4j2-properties-markerfilter-miscase.properties @@ -0,0 +1,16 @@ +status = ERROR +dest = err + +appender.Stdout.type = Console +appender.Stdout.name = StdOut +appender.Stdout.target = SYSTEM_OUT +appender.Stdout.layout.type = PatternLayout +appender.Stdout.layout.pattern = %d [%t] %-5level: %msg%n%throwable + +appender.Stdout.filter.marker.type = MarkerFilter +appender.Stdout.filter.marker.onMatch = DENY +appender.Stdout.filter.marker.onMisMatch = NEUTRAL +appender.Stdout.filter.marker.marker = FLOW + +rootLogger.appenderRef.console.ref = StdOut +rootLogger.level = ERROR diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java index 4903e8bcb50..330f10d254d 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationBuilder.java @@ -257,8 +257,8 @@ private FilterComponentBuilder createFilter(final String key, final Properties p if (Strings.isEmpty(type)) { throw new ConfigurationException("No type attribute provided for Filter " + key); } - final String onMatch = (String) properties.remove(AbstractFilterBuilder.ATTR_ON_MATCH); - final String onMismatch = (String) properties.remove(AbstractFilterBuilder.ATTR_ON_MISMATCH); + final String onMatch = removeIgnoreCase(properties, AbstractFilterBuilder.ATTR_ON_MATCH); + final String onMismatch = removeIgnoreCase(properties, AbstractFilterBuilder.ATTR_ON_MISMATCH); final FilterComponentBuilder filterBuilder = builder.newFilter(type, onMatch, onMismatch); return processRemainingProperties(filterBuilder, properties); } @@ -418,4 +418,15 @@ public PropertiesConfigurationBuilder setLoggerContext(final LoggerContext logge public LoggerContext getLoggerContext() { return loggerContext; } + + private static String removeIgnoreCase(final Properties properties, final String key) { + for (final String k : properties.stringPropertyNames()) { + if (k.equalsIgnoreCase(key)) { + final String value = properties.getProperty(k); + properties.remove(k); + return value; + } + } + return null; + } } From 5eb191cd985ec5bd98519aa93e03da67008b4210 Mon Sep 17 00:00:00 2001 From: LuckysHorizon Date: Sun, 19 Jul 2026 20:25:27 +0530 Subject: [PATCH 2/2] Fix test import: use org.apache.logging.log4j.core.config.Configuration --- .../core/config/properties/MarkerFilterPropertiesCaseTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/MarkerFilterPropertiesCaseTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/MarkerFilterPropertiesCaseTest.java index 7caf966a0e6..e55f4feb6df 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/MarkerFilterPropertiesCaseTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/MarkerFilterPropertiesCaseTest.java @@ -3,7 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import org.apache.logging.log4j.core.Configuration; +import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.LifeCycle; import org.apache.logging.log4j.core.test.junit.LoggerContextSource; import org.junit.jupiter.api.Test;