From 6530e52a35af143faf33de941c08ea94f2babb98 Mon Sep 17 00:00:00 2001 From: aawad6 Date: Sat, 5 Aug 2023 01:30:39 +0300 Subject: [PATCH] Rewrite the WARN message and add additional assertion for testBadStyleOption --- .../log4j/core/pattern/HighlightConverterTest.java | 6 ++++-- .../logging/log4j/core/pattern/AnsiEscape.java | 2 +- .../log4j/core/pattern/HighlightConverter.java | 14 +++++++------- 3 files changed, 12 insertions(+), 10 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 5315db55910..f0f72664234 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 @@ -175,11 +175,12 @@ public void testNoAnsiNonEmpty(final ListStatusListener listener) { This test ensure that a keyvalue pair separated by = sign must be provided in order to configure the highlighting style */ @Test - public void testBadStyleOption() { + @UsingStatusListener + public void testBadStyleOption(final ListStatusListener listener) { String defaultWarnColor = "yellow"; String defaultInfoColor = "green"; final String[] options = {"%5level", PatternParser.NO_CONSOLE_NO_ANSI + "=false, " + PatternParser.DISABLE_ANSI - + "=false" + "LOGBACK"}; + + "=false, " + "LOGBACK"}; final HighlightConverter converter = HighlightConverter.newInstance(null, options); assertNotNull(converter); @@ -187,6 +188,7 @@ public void testBadStyleOption() { assertEquals(AnsiEscape.createSequence(defaultWarnColor), converter.getLevelStyle(Level.WARN)); // As the default highlighting INFO color is Green while the LOGBACK color is Blue assertEquals(AnsiEscape.createSequence(defaultInfoColor), converter.getLevelStyle(Level.INFO)); + assertThat(listener.findStatusData(Level.WARN)).hasSize(1); } private CharSequence toFormattedCharSeq(final HighlightConverter converter, final Level level) { diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java index 8de8e271089..4aee2a2c3d7 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AnsiEscape.java @@ -433,7 +433,7 @@ public static Map createMap(final String[] values, final String[ final boolean escape = Arrays.binarySearch(sortedIgnoreKeys, key) < 0; map.put(key, escape ? createSequence(value.split("\\s")) : value); } else { - LOGGER.warn("Usage of incorrect syntax for highlighting style: \"{}\". Provide style configuration as follows Key=Value", string); + LOGGER.warn("Syntax error, missing '=': Expected \"{KEY1=VALUE, KEY2=VALUE, ...}"); } } return map; diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java index 439d0bc2a43..494305d6964 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HighlightConverter.java @@ -27,7 +27,6 @@ import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.layout.PatternLayout; import org.apache.logging.log4j.util.PerformanceSensitive; -import org.apache.logging.log4j.util.Strings; import static org.apache.logging.log4j.util.Strings.toRootUpperCase; @@ -87,6 +86,10 @@ public final class HighlightConverter extends LogEventPatternConverter implement private static final String STYLE_KEY = "STYLE"; + private static final String DISABLE_ANSI_KEY = "DISABLEANSI"; + + private static final String NO_CONSOLE_NO_ANSI_KEY = "NOCONSOLENOANSI"; + private static final String STYLE_KEY_DEFAULT = "DEFAULT"; private static final String STYLE_KEY_LOGBACK = "LOGBACK"; @@ -146,11 +149,8 @@ private static Map createLevelStyleMap(final String[] options) { return DEFAULT_STYLES; } // Feels like a hack. Should String[] options change to a Map? - final String string = options[1] - .replaceAll(PatternParser.DISABLE_ANSI + "=(true|false)", Strings.EMPTY) - .replaceAll(PatternParser.NO_CONSOLE_NO_ANSI + "=(true|false)", Strings.EMPTY); - // - final Map styles = AnsiEscape.createMap(string, new String[] {STYLE_KEY}); + final Map styles = AnsiEscape.createMap(options[1], new String[]{STYLE_KEY, DISABLE_ANSI_KEY, + NO_CONSOLE_NO_ANSI_KEY}); final Map levelStyles = new HashMap<>(DEFAULT_STYLES); for (final Map.Entry entry : styles.entrySet()) { final String key = toRootUpperCase(entry.getKey()); @@ -163,7 +163,7 @@ private static Map createLevelStyleMap(final String[] options) { } else { levelStyles.putAll(enumMap); } - } else { + } else if (!DISABLE_ANSI_KEY.equalsIgnoreCase(key) && !NO_CONSOLE_NO_ANSI_KEY.equalsIgnoreCase(key)) { final Level level = Level.toLevel(key, null); if (level == null) { LOGGER.warn("Setting style for yet unknown level name {}", key);