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:47 UTC

[logging-log4j2] 05/05: Do not interpret "disableAnsi" and "noConsoleNoAnsi" as escapes

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 9f266e107c179cccb4c5e9bf6228c45435649c2d
Author: Piotr P. Karwasz <pi...@karwasz.org>
AuthorDate: Sat Jan 14 15:21:21 2023 +0100

    Do not interpret "disableAnsi" and "noConsoleNoAnsi" as escapes
    
    By explitly ignoring "disableAnsi=..." and "noConsoleNoAnsi=..." in
    `AnsiEscape`, this closes #1202.
---
 .../log4j/core/pattern/HighlightConverterTest.java     | 11 +++++++++--
 .../logging/log4j/core/pattern/StyleConverterTest.java | 18 ++++++++++++++++++
 .../apache/logging/log4j/core/pattern/AnsiEscape.java  |  4 ++++
 3 files changed, 31 insertions(+), 2 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 c98be60aa1..50192ccacc 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
@@ -22,11 +22,14 @@ 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.apache.logging.log4j.test.ListStatusListener;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
 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.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.*;
 
 /**
@@ -139,10 +142,12 @@ public class HighlightConverterTest {
     }
 
     @Test
-    public void testNoAnsiEmpty() {
+    @UsingStatusListener
+    public void testNoAnsiEmpty(ListStatusListener listener) {
         final String[] options = {"", PatternParser.DISABLE_ANSI + "=true"};
         final HighlightConverter converter = HighlightConverter.newInstance(null, options);
         assertNotNull(converter);
+        assertThat(listener.findStatusData(Level.WARN)).isEmpty();
 
         final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
                 new SimpleMessage("message in a bottle")).build();
@@ -152,10 +157,12 @@ public class HighlightConverterTest {
     }
 
     @Test
-    public void testNoAnsiNonEmpty() {
+    @UsingStatusListener
+    public void testNoAnsiNonEmpty(ListStatusListener listener) {
         final String[] options = {"%-5level: %msg", PatternParser.DISABLE_ANSI + "=true"};
         final HighlightConverter converter = HighlightConverter.newInstance(null, options);
         assertNotNull(converter);
+        assertThat(listener.findStatusData(Level.WARN)).isEmpty();
 
         final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.INFO).setLoggerName("a.b.c").setMessage(
                 new SimpleMessage("message in a bottle")).build();
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 db9d5ea358..5794091bcf 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
@@ -27,13 +27,17 @@ 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.test.ListStatusListener;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
 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.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.*;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -83,4 +87,18 @@ public class StyleConverterTest {
         converter.format(event, sb);
         assertEquals(escape + "Hello!" + AnsiEscape.getDefaultStyle(), sb.toString());
     }
+
+    @Test
+    @UsingStatusListener
+    public void testNoAnsiNoWarnings(ListStatusListener listener) {
+        StyleConverter converter = StyleConverter.newInstance(null, new String[] { "", "disableAnsi=true" });
+        assertThat(converter).isNotNull();
+        converter = StyleConverter.newInstance(null, new String[] { "", "noConsoleNoAnsi=true" });
+        assertThat(converter).isNotNull();
+        converter = StyleConverter.newInstance(null, new String[] { "", "INVALID_STYLE" });
+        assertThat(converter).isNotNull();
+        assertThat(listener.findStatusData(Level.WARN)).hasSize(1)
+                .extracting(data -> data.getMessage().getFormattedMessage())
+                .containsExactly("The style attribute INVALID_STYLE is incorrect.");
+    }
 }
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 c7f8cca9e5..5cdcfed6e5 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
@@ -451,6 +451,10 @@ public enum AnsiEscape {
         boolean first = true;
         for (final String name : names) {
             try {
+                // GitHub Issue #1202
+                if (name.startsWith(PatternParser.DISABLE_ANSI) || name.startsWith(PatternParser.NO_CONSOLE_NO_ANSI)) {
+                    continue;
+                }
                 if (!first) {
                     sb.append(AnsiEscape.SEPARATOR.getCode());
                 }