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());
}