From 7f9a354dd66b0c807803215f1fc3d02d8af191e0 Mon Sep 17 00:00:00 2001 From: e512271 Date: Wed, 16 Jul 2025 08:54:32 +0200 Subject: [PATCH] Adds filePattern parameter to ConfigureLoggerLevel Sometimes logback configurations are not named logback.xml. Added an optional parameter to make the recipe usable in these cases as well. Resolves #234 --- .../logging/logback/ConfigureLoggerLevel.java | 15 ++++++- .../logback/ConfigureLoggerLevelTest.java | 45 ++++++++++++++++++- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/openrewrite/java/logging/logback/ConfigureLoggerLevel.java b/src/main/java/org/openrewrite/java/logging/logback/ConfigureLoggerLevel.java index 4c707845..35514a0d 100644 --- a/src/main/java/org/openrewrite/java/logging/logback/ConfigureLoggerLevel.java +++ b/src/main/java/org/openrewrite/java/logging/logback/ConfigureLoggerLevel.java @@ -17,6 +17,7 @@ import lombok.EqualsAndHashCode; import lombok.Value; +import org.jspecify.annotations.Nullable; import org.openrewrite.*; import org.openrewrite.internal.ListUtils; import org.openrewrite.xml.XPathMatcher; @@ -30,6 +31,8 @@ @Value public class ConfigureLoggerLevel extends Recipe { + public static final String DEFAULT_FILE = "**/logback.xml"; + @Override public String getDisplayName() { return "Configure logback logger level"; @@ -52,6 +55,16 @@ public String getDescription() { example = "off") LogLevel logLevel; + @Option(displayName = "File pattern", + description = "A glob expression that can be used to constrain which directories or source files should be searched. " + + "Multiple patterns may be specified, separated by a semicolon `;`. " + + "If multiple patterns are supplied any of the patterns matching will be interpreted as a match. " + + "When not set, '**/logback.xml' is used.", + required = false, + example = "**/logback-spring.xml") + @Nullable + String filePattern; + public enum LogLevel { trace, debug, @@ -63,7 +76,7 @@ public enum LogLevel { @Override public TreeVisitor getVisitor() { - return Preconditions.check(new FindSourceFiles("**/logback.xml"), new XmlIsoVisitor() { + return Preconditions.check(new FindSourceFiles(filePattern == null ? DEFAULT_FILE : filePattern), new XmlIsoVisitor() { @Override public Xml.Document visitDocument(Xml.Document document, ExecutionContext ctx) { diff --git a/src/test/java/org/openrewrite/java/logging/logback/ConfigureLoggerLevelTest.java b/src/test/java/org/openrewrite/java/logging/logback/ConfigureLoggerLevelTest.java index 8278c57b..d12cfc61 100644 --- a/src/test/java/org/openrewrite/java/logging/logback/ConfigureLoggerLevelTest.java +++ b/src/test/java/org/openrewrite/java/logging/logback/ConfigureLoggerLevelTest.java @@ -27,7 +27,7 @@ class ConfigureLoggerLevelTest implements RewriteTest { @Test void editExistingLogger() { rewriteRun( - spec -> spec.recipe(new ConfigureLoggerLevel("org.springframework", ConfigureLoggerLevel.LogLevel.off)), + spec -> spec.recipe(new ConfigureLoggerLevel("org.springframework", ConfigureLoggerLevel.LogLevel.off, null)), xml(//language=xml """ @@ -67,7 +67,7 @@ void editExistingLogger() { @Test void addNewLogger() { rewriteRun( - spec -> spec.recipe(new ConfigureLoggerLevel("com.example.MyClass", ConfigureLoggerLevel.LogLevel.off)), + spec -> spec.recipe(new ConfigureLoggerLevel("com.example.MyClass", ConfigureLoggerLevel.LogLevel.off, null)), xml(//language=xml """ @@ -104,4 +104,45 @@ void addNewLogger() { spec -> spec.path("logback.xml")) ); } + + @Test + void logbackSpring() { + rewriteRun( + spec -> spec.recipe(new ConfigureLoggerLevel("com.example.MyClass", ConfigureLoggerLevel.LogLevel.off, "**/logback-spring.xml")), + xml(//language=xml + """ + + + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + """, + //language=xml + """ + + + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + + + """, + spec -> spec.path("logback-spring.xml")) + ); + } }