From 9f3c8d615b6b67981a5b27ddbc27b04614e5ec49 Mon Sep 17 00:00:00 2001 From: Benjamin Peter Date: Tue, 30 Jul 2024 15:17:08 +0200 Subject: [PATCH 1/6] Implement LocationAware requiresLocation method in FileLocationPatternConverter (#2781) --- ...nPatternConvertersRequireLocationTest.java | 51 +++++++++++++++++++ .../pattern/FileLocationPatternConverter.java | 8 ++- ...pattern_converter_location_requirement.xml | 8 +++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java create mode 100644 src/changelog/.2.x.x/2781_fix_file_location_pattern_converter_location_requirement.xml diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java new file mode 100644 index 00000000000..d1d3592821d --- /dev/null +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java @@ -0,0 +1,51 @@ +/* + * 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.pattern; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.apache.logging.log4j.core.impl.LocationAware; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +public class LocationPatternConvertersRequireLocationTest { + + /** + * Reproduces github issue #2781. + */ + @ParameterizedTest + @CsvSource({"%L", "%l", "%F", "%C", "%M"}) + void testThatLocationDependentPatternConvertersIndicateLocationRequirement(final String converterKey) + throws Exception { + final PatternFormatter formatter = createSinglePatternFormatterFromConverterKey(converterKey); + + final LocationAware locationAwareFormatter = assertInstanceOf(LocationAware.class, formatter.getConverter()); + assertTrue(locationAwareFormatter.requiresLocation()); + } + + private static PatternFormatter createSinglePatternFormatterFromConverterKey(final String converterKey) { + final PatternParser parser = new PatternParser(PatternConverter.CATEGORY); + final List formatters = parser.parse(converterKey); + assertEquals(1, formatters.size()); + final PatternFormatter formatter = formatters.get(0); + return formatter; + } +} diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/FileLocationPatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/FileLocationPatternConverter.java index b7315ea397a..42222dd2cfb 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/FileLocationPatternConverter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/FileLocationPatternConverter.java @@ -18,13 +18,14 @@ import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.impl.LocationAware; /** * Returns the event's line location information in a StringBuilder. */ @Plugin(name = "FileLocationPatternConverter", category = PatternConverter.CATEGORY) @ConverterKeys({"F", "file"}) -public final class FileLocationPatternConverter extends LogEventPatternConverter { +public final class FileLocationPatternConverter extends LogEventPatternConverter implements LocationAware { /** * Singleton. */ @@ -58,4 +59,9 @@ public void format(final LogEvent event, final StringBuilder output) { output.append(element.getFileName()); } } + + @Override + public boolean requiresLocation() { + return true; + } } diff --git a/src/changelog/.2.x.x/2781_fix_file_location_pattern_converter_location_requirement.xml b/src/changelog/.2.x.x/2781_fix_file_location_pattern_converter_location_requirement.xml new file mode 100644 index 00000000000..ef0672b8ef6 --- /dev/null +++ b/src/changelog/.2.x.x/2781_fix_file_location_pattern_converter_location_requirement.xml @@ -0,0 +1,8 @@ + + + + Fix handling of location requirement for pattern key `%F` / `%file`. + From 7d0dee12d83f0206b1c369ccaf446494c3136c2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Volkan=20Yaz=C4=B1c=C4=B1?= Date: Sun, 4 Aug 2024 16:39:33 +0200 Subject: [PATCH 2/6] Improve changelog --- ...fix_file_location_pattern_converter_location_requirement.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/changelog/.2.x.x/2781_fix_file_location_pattern_converter_location_requirement.xml b/src/changelog/.2.x.x/2781_fix_file_location_pattern_converter_location_requirement.xml index ef0672b8ef6..e51aa8a0e9b 100644 --- a/src/changelog/.2.x.x/2781_fix_file_location_pattern_converter_location_requirement.xml +++ b/src/changelog/.2.x.x/2781_fix_file_location_pattern_converter_location_requirement.xml @@ -4,5 +4,5 @@ xsi:schemaLocation="https://logging.apache.org/xml/ns https://logging.apache.org/xml/ns/log4j-changelog-0.xsd" type="fixed"> - Fix handling of location requirement for pattern key `%F` / `%file`. + Fix location requirement for the `%F` and `%file` keys in Pattern Layout From fa90bdd5e1a705e595a6ce9dccfd96b06e69b29a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Volkan=20Yaz=C4=B1c=C4=B1?= Date: Sun, 4 Aug 2024 16:41:18 +0200 Subject: [PATCH 3/6] Make tests package private --- .../pattern/LocationPatternConvertersRequireLocationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java index d1d3592821d..498ddfe2df2 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java @@ -26,7 +26,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; -public class LocationPatternConvertersRequireLocationTest { +class LocationPatternConvertersRequireLocationTest { /** * Reproduces github issue #2781. From a3f8ee45763ed5fc340df4e6e5a8e4a3dff27223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Volkan=20Yaz=C4=B1c=C4=B1?= Date: Sun, 4 Aug 2024 16:56:18 +0200 Subject: [PATCH 4/6] Bump package version for `bnd-baseline` --- .../org/apache/logging/log4j/core/pattern/package-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/package-info.java index dba7d0e5493..5e6af62542d 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/package-info.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/package-info.java @@ -18,7 +18,7 @@ * Provides classes implementing format specifiers in conversion patterns. */ @Export -@Version("2.21.1") +@Version("2.22.0") package org.apache.logging.log4j.core.pattern; import org.osgi.annotation.bundle.Export; From 9cd5af48284e4ab2851ea546889452d66e6eda57 Mon Sep 17 00:00:00 2001 From: Benjamin Peter Date: Sun, 4 Aug 2024 18:13:22 +0200 Subject: [PATCH 5/6] BP: Remove misplaced newline in LocationPatternConvertersRequireLocationTest --- .../pattern/LocationPatternConvertersRequireLocationTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java index 498ddfe2df2..64d8019661e 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/LocationPatternConvertersRequireLocationTest.java @@ -21,7 +21,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; - import org.apache.logging.log4j.core.impl.LocationAware; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; From 3efbfaa8cdd3e6e4324d29cc9912d43f218c394f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Volkan=20Yaz=C4=B1c=C4=B1?= Date: Tue, 6 Aug 2024 13:15:57 +0200 Subject: [PATCH 6/6] Fix BND version --- .../org/apache/logging/log4j/core/pattern/package-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/package-info.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/package-info.java index 5e6af62542d..5818a773fe9 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/package-info.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/package-info.java @@ -18,7 +18,7 @@ * Provides classes implementing format specifiers in conversion patterns. */ @Export -@Version("2.22.0") +@Version("2.24.0") package org.apache.logging.log4j.core.pattern; import org.osgi.annotation.bundle.Export;