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/07/20 21:35:09 UTC

[06/16] logging-log4j2 git commit: Introduce default styles.

Introduce default styles.

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/b07bfe86
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/b07bfe86
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/b07bfe86

Branch: refs/heads/StyledXException
Commit: b07bfe86d0e4f1ccc92d18730f221db6ae1c7cd1
Parents: 0afb5b5
Author: ggregory <gg...@apache.org>
Authored: Tue Jul 12 21:48:10 2016 -0700
Committer: ggregory <gg...@apache.org>
Committed: Tue Jul 12 21:48:10 2016 -0700

----------------------------------------------------------------------
 .../log4j/core/pattern/JAnsiTextRenderer.java   | 52 ++++++++++++++++++--
 .../resources/log4j2-console-xex-ansi-kirk.xml  | 31 ++++++++++++
 2 files changed, 79 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b07bfe86/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiTextRenderer.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiTextRenderer.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiTextRenderer.java
index 4e09fc4..e1c4de1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiTextRenderer.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/JAnsiTextRenderer.java
@@ -75,9 +75,12 @@ import org.fusesource.jansi.AnsiRenderer.Code;
 public final class JAnsiTextRenderer implements TextRenderer {
 
     public static final Map<String, Code[]> DefaultExceptionStyleMap;
-    public static final Map<String, Code[]> DefaultMessageStyleMap;
+    static final Map<String, Code[]> DefaultMessageStyleMap;
+    private static final Map<String,Map<String, Code[]>> PrefedinedStyleMaps;
 
     static {
+        Map<String,Map<String, Code[]>> tempPreDefs  = new HashMap<>();
+        // Default: Spock
         {
             // TODO Should the keys be in an enum?
             Map<String, Code[]> temp = new HashMap<>();
@@ -95,22 +98,53 @@ public final class JAnsiTextRenderer implements TextRenderer {
             temp.put("StackTraceElement.FileName", new Code[] { Code.MAGENTA });
             temp.put("StackTraceElement.LineNumber", new Code[] { Code.MAGENTA });
             temp.put("StackTraceElement.Container", new Code[] { Code.MAGENTA });
-            temp.put("StackTraceElement.ContainerSeparator", new Code[] { Code.MAGENTA});
+            temp.put("StackTraceElement.ContainerSeparator", new Code[] { Code.WHITE});
             temp.put("StackTraceElement.UnknownSource", new Code[] { Code.MAGENTA });
             // ExtraClassInfo
-            temp.put("ExtraClassInfo.Inexact", new Code[] { Code.GREEN });
+            temp.put("ExtraClassInfo.Inexact", new Code[] { Code.CYAN });
             temp.put("ExtraClassInfo.Container", new Code[] { Code.GREEN, Code.INTENSITY_FAINT });
-            temp.put("ExtraClassInfo.ContainerSeparator", new Code[] { Code.GREEN, Code.INTENSITY_FAINT });
+            temp.put("ExtraClassInfo.ContainerSeparator", new Code[] { Code.WHITE });
             temp.put("ExtraClassInfo.Location", new Code[] { Code.GREEN });
             temp.put("ExtraClassInfo.Version", new Code[] { Code.GREEN });
             // Save
             DefaultExceptionStyleMap = Collections.unmodifiableMap(temp);
+            tempPreDefs.put("Spock", DefaultExceptionStyleMap);
+        }
+        // Kirk
+        {
+            // TODO Should the keys be in an enum?
+            Map<String, Code[]> temp = new HashMap<>();
+            temp.put("Prefix", new Code[] { Code.WHITE });
+            temp.put("Name", new Code[] { Code.RED });
+            temp.put("Message", new Code[] { Code.RED, Code.BOLD });
+            temp.put("At", new Code[] { Code.WHITE });
+            temp.put("CauseLabel", new Code[] { Code.WHITE });
+            temp.put("Text", new Code[] { Code.WHITE });
+            // StackTraceElement
+            temp.put("StackTraceElement.ClassName", new Code[] { Code.MAGENTA });
+            temp.put("StackTraceElement.ClassMethodSeparator", new Code[] { Code.MAGENTA });
+            temp.put("StackTraceElement.MethodName", new Code[] { Code.YELLOW });
+            temp.put("StackTraceElement.NativeMethod", new Code[] { Code.MAGENTA });
+            temp.put("StackTraceElement.FileName", new Code[] { Code.CYAN });
+            temp.put("StackTraceElement.LineNumber", new Code[] { Code.CYAN });
+            temp.put("StackTraceElement.Container", new Code[] { Code.MAGENTA });
+            temp.put("StackTraceElement.ContainerSeparator", new Code[] { Code.MAGENTA});
+            temp.put("StackTraceElement.UnknownSource", new Code[] { Code.MAGENTA });
+            // ExtraClassInfo
+            temp.put("ExtraClassInfo.Inexact", new Code[] { Code.BG_CYAN });
+            temp.put("ExtraClassInfo.Container", new Code[] { Code.BG_CYAN });
+            temp.put("ExtraClassInfo.ContainerSeparator", new Code[] { Code.BG_CYAN });
+            temp.put("ExtraClassInfo.Location", new Code[] { Code.BG_CYAN });
+            temp.put("ExtraClassInfo.Version", new Code[] { Code.BG_CYAN });
+            // Save
+            tempPreDefs.put("Kirk", Collections.unmodifiableMap(temp));
         }
         {
             Map<String, Code[]> temp = new HashMap<>();
             // TODO
             DefaultMessageStyleMap = Collections.unmodifiableMap(temp);
         }
+        PrefedinedStyleMaps = Collections.unmodifiableMap(tempPreDefs);
     }
 
     private final String beginToken;
@@ -150,6 +184,16 @@ public final class JAnsiTextRenderer implements TextRenderer {
                         case "EndToken":
                             tempEndToken = codeNames[0];
                             break;
+                        case "StyleMapName":
+                            final String predefinedMapName = codeNames[0];
+                            Map<String, Code[]> predefinedMap = PrefedinedStyleMaps.get(predefinedMapName);
+                            if (predefinedMap != null) {
+                                map.putAll(predefinedMap);
+                            } else {
+                                StatusLogger.getLogger().warn("Unknown predefined map name {}, pick one of {}",
+                                        predefinedMapName, null);
+                            }
+                            break;
                         default:
                             final Code[] codes = new Code[codeNames.length];
                             for (int i = 0; i < codes.length; i++) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b07bfe86/log4j-core/src/test/resources/log4j2-console-xex-ansi-kirk.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j2-console-xex-ansi-kirk.xml b/log4j-core/src/test/resources/log4j2-console-xex-ansi-kirk.xml
new file mode 100644
index 0000000..c944c8d
--- /dev/null
+++ b/log4j-core/src/test/resources/log4j2-console-xex-ansi-kirk.xml
@@ -0,0 +1,31 @@
+<?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">
+  <Appenders>
+    <Console name="Console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%d [%t] %-5level: %msg%n%xThrowable{full}{ansi(StyleMapName=Kirk)}" />
+    </Console>
+  </Appenders>
+  <Loggers>
+    <Logger name="org.foo" level="DEBUG" />
+    <Root level="TRACE">
+      <AppenderRef ref="Console" />
+    </Root>
+  </Loggers>
+</Configuration>