You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2016/06/27 23:38:36 UTC
logging-log4j2 git commit: Second cut of rendering a message with
ANSI escape codes using JAnsi syntax, this time with _style names_.
Repository: logging-log4j2
Updated Branches:
refs/heads/StyledMessage 48c808aac -> 79e0012cf
Second cut of rendering a message with ANSI escape codes using JAnsi
syntax, this time with _style names_.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/79e0012c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/79e0012c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/79e0012c
Branch: refs/heads/StyledMessage
Commit: 79e0012cfc47d099c745a40bbb33c7d8022556f8
Parents: 48c808a
Author: Gary Gregory <gg...@apache.org>
Authored: Mon Jun 27 16:38:34 2016 -0700
Committer: Gary Gregory <gg...@apache.org>
Committed: Mon Jun 27 16:38:34 2016 -0700
----------------------------------------------------------------------
.../log4j/core/pattern/HtmlMessageRenderer.java | 4 ++
.../core/pattern/JAnsiMessageRenderer.java | 76 ++++++++++++++++----
.../core/pattern/MessagePatternConverter.java | 8 +--
.../core/pattern/StyledMessageRenderer.java | 26 -------
.../core/pattern/MessageJansiConverterTest.java | 2 +-
.../pattern/MessageStyledConverterTest.java | 62 ++++++++++++++++
.../src/test/resources/log4j-message-ansi.xml | 34 +++++++++
.../src/test/resources/log4j-message-jansi.xml | 34 ---------
.../src/test/resources/log4j-message-styled.xml | 34 +++++++++
9 files changed, 202 insertions(+), 78 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/79e0012c/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HtmlMessageRenderer.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HtmlMessageRenderer.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HtmlMessageRenderer.java
index d3e8026..b105a3c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HtmlMessageRenderer.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/HtmlMessageRenderer.java
@@ -18,6 +18,10 @@ package org.apache.logging.log4j.core.pattern;
public final class HtmlMessageRenderer implements MessageRenderer {
+ public HtmlMessageRenderer(String[] formats) {
+ // TODO Auto-generated constructor stub
+ }
+
@Override
public void render(StringBuilder source, StringBuilder target) {
// TODO Auto-generated method stub
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/79e0012c/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiMessageRenderer.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiMessageRenderer.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiMessageRenderer.java
index 01d390b..4bcd5bd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiMessageRenderer.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiMessageRenderer.java
@@ -16,8 +16,11 @@
*/
package org.apache.logging.log4j.core.pattern;
+import java.util.HashMap;
import java.util.Locale;
+import java.util.Map;
+import org.apache.logging.log4j.status.StatusLogger;
import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.AnsiRenderer;
import org.fusesource.jansi.AnsiRenderer.Code;
@@ -50,25 +53,66 @@ import org.fusesource.jansi.AnsiRenderer.Code;
public final class JAnsiMessageRenderer implements MessageRenderer {
private static final int BEGIN_TOKEN_LEN = AnsiRenderer.BEGIN_TOKEN.length();
- private static final int END_TOKEN_LEN = AnsiRenderer.END_TOKEN.length();
- private String render(final String text, final String... codes) {
- Ansi ansi = Ansi.ansi();
- for (final String name : codes) {
- final Code code = Code.valueOf(name.toUpperCase(Locale.ENGLISH));
+ private static final int END_TOKEN_LEN = AnsiRenderer.END_TOKEN.length();
+ private final Map<String, Code[]> styleMap;
- if (code.isColor()) {
- if (code.isBackground()) {
- ansi = ansi.bg(code.getColor());
+ public JAnsiMessageRenderer(final String[] formats) {
+ Map<String, Code[]> map;
+ if (formats.length > 1) {
+ final String allStylesStr = formats[1];
+ final String[] allStylesArr = splitOnCommas(allStylesStr);
+ map = new HashMap<>(allStylesArr.length);
+ for (final String styleStr : allStylesArr) {
+ final String[] styleArr = styleStr.split("\\s*=\\s*");
+ if (styleArr.length != 2) {
+ StatusLogger.getLogger().warn("{} style {} is expected to be of length 2, not {}",
+ getClass().getSimpleName(), styleStr, styleArr.length);
} else {
- ansi = ansi.fg(code.getColor());
+ final String[] codeNames = splitOnCommas(styleArr[1]);
+ final Code[] codes = new Code[codeNames.length];
+ for (int i = 0; i < codes.length; i++) {
+ codes[i] = toCode(codeNames[i]);
+ }
+ map.put(styleArr[0], codes);
}
- } else if (code.isAttribute()) {
- ansi = ansi.a(code.getAttribute());
}
+ } else {
+ map = new HashMap<>(0);
}
+ styleMap = map;
+ }
+ private void render(final Ansi ansi, final Code code) {
+ if (code.isColor()) {
+ if (code.isBackground()) {
+ ansi.bg(code.getColor());
+ } else {
+ ansi.fg(code.getColor());
+ }
+ } else if (code.isAttribute()) {
+ ansi.a(code.getAttribute());
+ }
+ }
+
+ private void render(final Ansi ansi, final Code... codes) {
+ for (final Code code : codes) {
+ render(ansi, code);
+ }
+ }
+
+ private String render(final String text, final String... names) {
+ final Ansi ansi = Ansi.ansi();
+ for (final String name : names) {
+ final Code[] codes = styleMap.get(name);
+ if (codes != null) {
+ render(ansi, codes);
+ } else {
+ render(ansi, toCode(name));
+ }
+ }
return ansi.a(text).reset().toString();
+
}
@Override
@@ -101,7 +145,7 @@ public final class JAnsiMessageRenderer implements MessageRenderer {
target.append(input);
return;
}
- final String replacement = render(items[1], items[0].split(AnsiRenderer.CODE_LIST_SEPARATOR));
+ final String replacement = render(items[1], splitOnCommas(items[0]));
target.append(replacement);
@@ -109,4 +153,12 @@ public final class JAnsiMessageRenderer implements MessageRenderer {
}
}
+ private String[] splitOnCommas(final String allStylesStr) {
+ return allStylesStr.split("\\s*,\\s*");
+ }
+
+ private Code toCode(final String name) {
+ return Code.valueOf(name.toUpperCase(Locale.ENGLISH));
+ }
+
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/79e0012c/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
index 70b6bec..9e6d5b3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
@@ -54,12 +54,10 @@ public final class MessagePatternConverter extends LogEventPatternConverter {
}
final String format = formats[0];
switch (format) {
- case "jansi":
- return new JAnsiMessageRenderer();
- case "styled":
- return new StyledMessageRenderer();
+ case "ansi":
+ return new JAnsiMessageRenderer(formats);
case "html":
- return new HtmlMessageRenderer();
+ return new HtmlMessageRenderer(formats);
}
return null;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/79e0012c/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyledMessageRenderer.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyledMessageRenderer.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyledMessageRenderer.java
deleted file mode 100644
index 137b77b..0000000
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/StyledMessageRenderer.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache license, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the license for the specific language governing permissions and
- * limitations under the license.
- */
-package org.apache.logging.log4j.core.pattern;
-
-public final class StyledMessageRenderer implements MessageRenderer {
-
- @Override
- public void render(StringBuilder source, StringBuilder target) {
- // TODO Auto-generated method stub
- }
-
-}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/79e0012c/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java
index 9227b2b..9f4366d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageJansiConverterTest.java
@@ -37,7 +37,7 @@ public class MessageJansiConverterTest {
+ Constants.LINE_SEPARATOR;
@Rule
- public LoggerContextRule init = new LoggerContextRule("log4j-message-jansi.xml");
+ public LoggerContextRule init = new LoggerContextRule("log4j-message-ansi.xml");
private Logger logger;
private ListAppender app;
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/79e0012c/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java
new file mode 100644
index 0000000..dd28e0d
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessageStyledConverterTest.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.core.pattern;
+
+import java.util.List;
+
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.util.Constants;
+import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.test.appender.ListAppender;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ *
+ */
+public class MessageStyledConverterTest {
+
+ private static final String EXPECTED = "\u001B[31mWarning!\u001B[m Pants on \u001B[31mfire!\u001B[m"
+ + Constants.LINE_SEPARATOR;
+
+ @Rule
+ public LoggerContextRule init = new LoggerContextRule("log4j-message-styled.xml");
+
+ private Logger logger;
+ private ListAppender app;
+
+ @Before
+ public void setUp() throws Exception {
+ this.logger = this.init.getLogger("LoggerTest");
+ this.app = this.init.getListAppender("List").clear();
+ }
+
+ @Test
+ public void testReplacement() {
+ // See org.fusesource.jansi.AnsiRenderer
+ logger.error("@|WarningStyle Warning!|@ Pants on @|WarningStyle fire!|@");
+
+ final List<String> msgs = app.getMessages();
+ assertNotNull(msgs);
+ assertEquals("Incorrect number of messages. Should be 1 is " + msgs.size(), 1, msgs.size());
+ assertTrue("Replacement failed - expected ending " + EXPECTED + ", actual " + msgs.get(0),
+ msgs.get(0).endsWith(EXPECTED));
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/79e0012c/log4j-core/src/test/resources/log4j-message-ansi.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j-message-ansi.xml b/log4j-core/src/test/resources/log4j-message-ansi.xml
new file mode 100644
index 0000000..685ee82
--- /dev/null
+++ b/log4j-core/src/test/resources/log4j-message-ansi.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<Configuration status="OFF" name="StyleTest">
+ <Appenders>
+ <List name="List">
+ <PatternLayout>
+ <Pattern>%message{ansi}%n</Pattern>
+ </PatternLayout>
+ </List>
+ </Appenders>
+
+ <Loggers>
+ <Root level="trace">
+ <AppenderRef ref="List"/>
+ </Root>
+ </Loggers>
+
+</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/79e0012c/log4j-core/src/test/resources/log4j-message-jansi.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j-message-jansi.xml b/log4j-core/src/test/resources/log4j-message-jansi.xml
deleted file mode 100644
index 4dc783f..0000000
--- a/log4j-core/src/test/resources/log4j-message-jansi.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<Configuration status="OFF" name="StyleTest">
- <Appenders>
- <List name="List">
- <PatternLayout>
- <Pattern>%message{jansi}%n</Pattern>
- </PatternLayout>
- </List>
- </Appenders>
-
- <Loggers>
- <Root level="trace">
- <AppenderRef ref="List"/>
- </Root>
- </Loggers>
-
-</Configuration>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/79e0012c/log4j-core/src/test/resources/log4j-message-styled.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j-message-styled.xml b/log4j-core/src/test/resources/log4j-message-styled.xml
new file mode 100644
index 0000000..e5881c3
--- /dev/null
+++ b/log4j-core/src/test/resources/log4j-message-styled.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<Configuration status="OFF" name="StyledTest">
+ <Appenders>
+ <List name="List">
+ <PatternLayout>
+ <Pattern>%message{ansi}{WarningStyle=red, DataStyle=blue}%n</Pattern>
+ </PatternLayout>
+ </List>
+ </Appenders>
+
+ <Loggers>
+ <Root level="trace">
+ <AppenderRef ref="List"/>
+ </Root>
+ </Loggers>
+
+</Configuration>
\ No newline at end of file