You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2023/01/20 06:54:45 UTC
[logging-log4j2] 03/05: [LOG4J2-3561] Support both whitespace and commas in %style
This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 3f36f9aa9dafc17bc0e04657fbcc87ff7e4f3f00
Author: Piotr P. Karwasz <pi...@karwasz.org>
AuthorDate: Thu Jul 28 09:22:27 2022 +0200
[LOG4J2-3561] Support both whitespace and commas in %style
The %style pattern is inconsistent with the %highlight pattern: the
first separates styles with commas, the second one with spaces. This
should
---
.../log4j/core/pattern/HighlightConverterTest.java | 47 ++++++++++------------
.../log4j/core/pattern/StyleConverterTest.java | 31 +++++++++++++-
.../logging/log4j/core/pattern/StyleConverter.java | 2 +-
.../apache/logging/log4j/core/util/Patterns.java | 5 +++
4 files changed, 58 insertions(+), 27 deletions(-)
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java
index 8a44c6096c..c98be60aa1 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/HighlightConverterTest.java
@@ -16,11 +16,16 @@
*/
package org.apache.logging.log4j.core.pattern;
+import java.util.stream.Stream;
+
import org.apache.logging.log4j.Level;
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.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
import static org.junit.jupiter.api.Assertions.*;
@@ -77,36 +82,28 @@ public class HighlightConverterTest {
assertEquals(AnsiEscape.createSequence(colorName), converter.getLevelStyle(Level.DEBUG));
}
- private void testLevelNames(final String colorName, final String expectedOutput) {
- final String[] options = {"%-5level: %msg", PatternParser.NO_CONSOLE_NO_ANSI + "=false, "
- + PatternParser.DISABLE_ANSI + "=false, " + "INFO=" + colorName};
+ static Stream<Arguments> colors() {
+ return Stream.of(
+ Arguments.of("bright red","\u001B[1;31m"),
+ Arguments.of("red bright", "\u001B[31;1m"),
+ Arguments.of("bright_red", "\u001B[91m"),
+ Arguments.of("#1cd42b", "\u001B[38;2;28;212;43m"),
+ Arguments.of("fg_bright_red bg_bright_blue bold", "\u001B[91;104;1m"),
+ Arguments.of("FG_#1cd42b BG_#000000", "\u001B[38;2;28;212;43;48;2;0;0;0m"));
+ }
+
+ @ParameterizedTest
+ @MethodSource("colors")
+ public void testColors(final String colorName, final String escape) {
+ final String[] options = { "%-5level: %msg", PatternParser.NO_CONSOLE_NO_ANSI + "=false, "
+ + PatternParser.DISABLE_ANSI + "=false, " + "INFO=" + colorName };
final HighlightConverter converter = HighlightConverter.newInstance(null, options);
assertNotNull(converter);
- final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
- new SimpleMessage("")).build();
+ final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).build();
final StringBuilder buffer = new StringBuilder();
converter.format(event, buffer);
- assertEquals(expectedOutput, buffer.toString());
- }
-
- @Test
- public void testLevelNamesBrightShort() {
- testLevelNames("bright_red", "\u001B[91mINFO : \u001B[m");
- }
-
- public void testLevelNamesHexShort() {
- testLevelNames("#1cd42b", "\u001B[38;2;28;212;43mINFO : \u001B[m");
- }
-
- @Test
- public void testLevelNamesBrightFull() {
- testLevelNames("fg_bright_red bg_bright_blue bold", "\u001B[91;104;1mINFO : \u001B[m");
- }
-
- @Test
- public void testLevelNamesHexFull() {
- testLevelNames("FG_#1cd42b BG_#000000", "\u001B[38;2;28;212;43;48;2;0;0;0mINFO : \u001B[m");
+ assertEquals(escape + "INFO : \u001B[m", buffer.toString());
}
@Test
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java
index fefd76f669..db9d5ea358 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/StyleConverterTest.java
@@ -18,17 +18,25 @@ package org.apache.logging.log4j.core.pattern;
import java.util.List;
+import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
import org.apache.logging.log4j.core.impl.Log4jProperties;
import org.apache.logging.log4j.core.test.appender.ListAppender;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
import org.apache.logging.log4j.core.test.junit.Named;
import org.apache.logging.log4j.util.Strings;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
import org.junitpioneer.jupiter.SetSystemProperty;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
@SetSystemProperty(key = Log4jProperties.JANSI_DISABLED, value = "false")
public class StyleConverterTest {
@@ -54,4 +62,25 @@ public class StyleConverterTest {
public void testNull() {
assertNull(StyleConverter.newInstance(null, null));
}
+
+ @ParameterizedTest
+ @MethodSource("org.apache.logging.log4j.core.pattern.HighlightConverterTest#colors")
+ public void testHighlightConverterCompatibility(final String color, final String escape) {
+ final StyleConverter converter = StyleConverter.newInstance(null, new String[] { "Hello!", color });
+ final StringBuilder sb = new StringBuilder();
+ final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).build();
+ converter.format(event, sb);
+ assertEquals(escape + "Hello!" + AnsiEscape.getDefaultStyle(), sb.toString());
+ }
+
+ @ParameterizedTest
+ @MethodSource("org.apache.logging.log4j.core.pattern.HighlightConverterTest#colors")
+ public void testLegacyCommaSeparator(final String color, final String escape) {
+ final StyleConverter converter = StyleConverter.newInstance(null,
+ new String[] { "Hello!", color.replaceAll("\\s+", ",") });
+ final StringBuilder sb = new StringBuilder();
+ final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).build();
+ converter.format(event, sb);
+ assertEquals(escape + "Hello!" + AnsiEscape.getDefaultStyle(), sb.toString());
+ }
}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyleConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyleConverter.java
index e102f7306a..bad779148e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyleConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyleConverter.java
@@ -95,7 +95,7 @@ public final class StyleConverter extends LogEventPatternConverter implements An
}
final PatternParser parser = PatternLayout.createPatternParser(config);
final List<PatternFormatter> formatters = parser.parse(options[0]);
- final String style = AnsiEscape.createSequence(options[1].split(Patterns.COMMA_SEPARATOR));
+ final String style = AnsiEscape.createSequence(options[1].split(Patterns.COMMA_SPACE_SEPARATOR));
final boolean disableAnsi = Arrays.toString(options).contains(PatternParser.DISABLE_ANSI + "=true");
final boolean noConsoleNoAnsi = Arrays.toString(options).contains(PatternParser.NO_CONSOLE_NO_ANSI + "=true");
final boolean hideAnsi = disableAnsi || (noConsoleNoAnsi && System.console() == null);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Patterns.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Patterns.java
index 5427197072..cd329f9307 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Patterns.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Patterns.java
@@ -28,6 +28,11 @@ public final class Patterns {
*/
public static final String COMMA_SEPARATOR = toWhitespaceSeparator(",");
+ /**
+ * A pattern string for lists separated by commas with optional whitespace or just whitespace.
+ */
+ public static final String COMMA_SPACE_SEPARATOR = toWhitespaceSeparator("[,\\s]");
+
/**
* The whitespace pattern string.
*/