You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2017/10/20 08:04:47 UTC

[1/2] karaf git commit: Fix minor typo

Repository: karaf
Updated Branches:
  refs/heads/KARAF-2401 [created] 5686ccf65


Fix minor typo


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/844bacfc
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/844bacfc
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/844bacfc

Branch: refs/heads/KARAF-2401
Commit: 844bacfc8af7e15eb99ff27c818471c6efca357f
Parents: fe5f0e9
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Oct 20 09:58:17 2017 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Oct 20 09:58:17 2017 +0200

----------------------------------------------------------------------
 manual/src/main/asciidoc/user-guide/log.adoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/844bacfc/manual/src/main/asciidoc/user-guide/log.adoc
----------------------------------------------------------------------
diff --git a/manual/src/main/asciidoc/user-guide/log.adoc b/manual/src/main/asciidoc/user-guide/log.adoc
index 9cfe952..381a9d2 100644
--- a/manual/src/main/asciidoc/user-guide/log.adoc
+++ b/manual/src/main/asciidoc/user-guide/log.adoc
@@ -185,7 +185,7 @@ Additionally, de-facto standard log4j(2) levels can be used:
 * `OFF`
 * `DEFAULT`
 
-And because `org.ops4j.pax.loggin` PID uses `karaf.log.console` property, it's in fact better to use log4j levels instead:
+And because `org.ops4j.pax.logging` PID uses `karaf.log.console` property, it's in fact better to use log4j levels instead:
 
 [source,options="nowrap"]
 ----


[2/2] karaf git commit: [KARAF-2401] Improve log coloring

Posted by gn...@apache.org.
[KARAF-2401] Improve log coloring


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/5686ccf6
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/5686ccf6
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/5686ccf6

Branch: refs/heads/KARAF-2401
Commit: 5686ccf651600790197b9ca4e5ce69e0930107f5
Parents: 844bacf
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Fri Oct 20 10:01:29 2017 +0200
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Fri Oct 20 10:01:29 2017 +0200

----------------------------------------------------------------------
 .../resources/etc/org.ops4j.pax.logging.cfg     |  12 +-
 .../standard/src/main/feature/feature.xml       |   8 +-
 .../src/test/filtered-resources/etc/feature.xml |   8 +-
 .../log/core/internal/layout/PatternParser.java | 154 ++++++++++++++++++-
 4 files changed, 174 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/5686ccf6/assemblies/features/base/src/main/resources/resources/etc/org.ops4j.pax.logging.cfg
----------------------------------------------------------------------
diff --git a/assemblies/features/base/src/main/resources/resources/etc/org.ops4j.pax.logging.cfg b/assemblies/features/base/src/main/resources/resources/etc/org.ops4j.pax.logging.cfg
index 0c9d54e..42d6c80 100644
--- a/assemblies/features/base/src/main/resources/resources/etc/org.ops4j.pax.logging.cfg
+++ b/assemblies/features/base/src/main/resources/resources/etc/org.ops4j.pax.logging.cfg
@@ -17,8 +17,18 @@
 #
 ################################################################################
 
+# Colors for log level rendering
+color.fatal = bright red
+color.error = bright red
+color.warn = bright yellow
+color.info = bright green
+color.debug = cyan
+color.trace = cyan
+
 # Common pattern layout for appenders
 log4j2.pattern = %d{ISO8601} | %-5p | %-16t | %-32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n
+log4j2.out.pattern = \u001b[90m%d{HH:mm:ss\.SSS}\u001b[0m %highlight{%-5level}{FATAL=${color.fatal}, ERROR=${color.error}, WARN=${color.warn}, INFO=${color.info}, DEBUG=${color.debug}, TRACE=${color.trace}} \u001b[90m[%t]\u001b[0m %msg%n%throwable
+
 
 # Root logger
 log4j2.rootLogger.level = INFO
@@ -49,7 +59,7 @@ log4j2.logger.audit.appenderRef.AuditRollingFile.ref = AuditRollingFile
 log4j2.appender.console.type = Console
 log4j2.appender.console.name = Console
 log4j2.appender.console.layout.type = PatternLayout
-log4j2.appender.console.layout.pattern = ${log4j2.pattern}
+log4j2.appender.console.layout.pattern = ${log4j2.out.pattern}
 
 # Rolling file appender
 log4j2.appender.rolling.type = RollingRandomAccessFile

http://git-wip-us.apache.org/repos/asf/karaf/blob/5686ccf6/assemblies/features/standard/src/main/feature/feature.xml
----------------------------------------------------------------------
diff --git a/assemblies/features/standard/src/main/feature/feature.xml b/assemblies/features/standard/src/main/feature/feature.xml
index d785e80..49a2d2b 100644
--- a/assemblies/features/standard/src/main/feature/feature.xml
+++ b/assemblies/features/standard/src/main/feature/feature.xml
@@ -520,7 +520,13 @@
             # The pattern used to format the log statement when using log:display. This pattern is according
             # to the log4j layout. You can override this parameter at runtime using log:display with -p.
             #
-            pattern = "%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n"
+            color.fatal = "bright red"
+            color.error = "bright red"
+            color.warn = "bright yellow"
+            color.info = "bright green"
+            color.debug = "cyan"
+            color.trace = "cyan"
+            pattern = "\u001b[90m%d{HH:mm:ss.SSS}\u001b[0m %h{%p}{FATAL=${color.fatal}, ERROR=${color.error}, WARN=${color.warn}, INFO=${color.info}, DEBUG=${color.debug}, TRACE=${color.trace}} \u001b[90m[%t]\u001b[0m %m%n"
         </config>
         <bundle start-level="30">mvn:org.apache.karaf.log/org.apache.karaf.log.core/${project.version}</bundle>
     </feature>

http://git-wip-us.apache.org/repos/asf/karaf/blob/5686ccf6/itests/src/test/filtered-resources/etc/feature.xml
----------------------------------------------------------------------
diff --git a/itests/src/test/filtered-resources/etc/feature.xml b/itests/src/test/filtered-resources/etc/feature.xml
index 487d4ea..803507c 100644
--- a/itests/src/test/filtered-resources/etc/feature.xml
+++ b/itests/src/test/filtered-resources/etc/feature.xml
@@ -520,7 +520,13 @@
             # The pattern used to format the log statement when using log:display. This pattern is according
             # to the log4j layout. You can override this parameter at runtime using log:display with -p.
             #
-            pattern = "%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n"
+            color.fatal = "bright red"
+            color.error = "bright red"
+            color.warn = "bright yellow"
+            color.info = "bright green"
+            color.debug = "cyan"
+            color.trace = "cyan"
+            pattern = "\u001b[90m%d{HH:mm:ss.SSS}\u001b[0m %h{%p}{FATAL=${color.fatal}, ERROR=${color.error}, WARN=${color.warn}, INFO=${color.info}, DEBUG=${color.debug}, TRACE=${color.trace}} \u001b[90m[%t]\u001b[0m %m%n"
         </config>
         <bundle start-level="30" start="true">mvn:org.apache.karaf.log/org.apache.karaf.log.core/${project.version}</bundle>
     </feature>

http://git-wip-us.apache.org/repos/asf/karaf/blob/5686ccf6/log/src/main/java/org/apache/karaf/log/core/internal/layout/PatternParser.java
----------------------------------------------------------------------
diff --git a/log/src/main/java/org/apache/karaf/log/core/internal/layout/PatternParser.java b/log/src/main/java/org/apache/karaf/log/core/internal/layout/PatternParser.java
index 5232b07..4c67b1d 100644
--- a/log/src/main/java/org/apache/karaf/log/core/internal/layout/PatternParser.java
+++ b/log/src/main/java/org/apache/karaf/log/core/internal/layout/PatternParser.java
@@ -21,8 +21,11 @@ import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 
+import org.ops4j.pax.logging.PaxLogger;
 import org.ops4j.pax.logging.spi.PaxLocationInfo;
 import org.ops4j.pax.logging.spi.PaxLoggingEvent;
 
@@ -89,11 +92,21 @@ public class PatternParser {
   protected
   String extractOption() {
     if((i < patternLength) && (pattern.charAt(i) == '{')) {
-      int end = pattern.indexOf('}', i);
-      if (end > i) {
-	String r = pattern.substring(i + 1, end);
-	i = end+1;
-	return r;
+      int end = i;
+      int nb = 1;
+      while (++end < patternLength) {
+        switch (pattern.charAt(end)) {
+          case '{':
+            nb++;
+            break;
+          case '}':
+            if (--nb == 0) {
+              String r = pattern.substring(i + 1, end);
+              i = end + 1;
+              return r;
+            }
+            break;
+        }
       }
     }
     return null;
@@ -277,6 +290,12 @@ public class PatternParser {
       //formattingInfo.dump();
       currentLiteral.setLength(0);
       break;
+    case 'h':
+      String pat = extractOption();
+      String style = extractOption();
+      pc = new HighlightPatternConverter(formattingInfo, pat, style);
+      currentLiteral.setLength(0);
+      break;
     /*case 'l':
       pc = new LocationPatternConverter(formattingInfo,
 					FULL_LOCATION_CONVERTER);
@@ -441,6 +460,131 @@ public class PatternParser {
     }
   }
 
+  private static class HighlightPatternConverter extends PatternConverter {
+    static Map<String, String> SEQUENCES;
+    static {
+      SEQUENCES = new HashMap<>();
+      SEQUENCES.put("csi", "\u001b[");
+      SEQUENCES.put("suffix", "m");
+      SEQUENCES.put("separator", ";");
+      SEQUENCES.put("normal", "0");
+      SEQUENCES.put("bold", "1");
+      SEQUENCES.put("bright", "1");
+      SEQUENCES.put("dim", "2");
+      SEQUENCES.put("underline", "3");
+      SEQUENCES.put("blink", "5");
+      SEQUENCES.put("reverse", "7");
+      SEQUENCES.put("hidden", "8");
+      SEQUENCES.put("black", "30");
+      SEQUENCES.put("fg_black", "30");
+      SEQUENCES.put("red", "31");
+      SEQUENCES.put("fg_red", "31");
+      SEQUENCES.put("green", "32");
+      SEQUENCES.put("fg_green", "32");
+      SEQUENCES.put("yellow", "33");
+      SEQUENCES.put("fg_yellow", "33");
+      SEQUENCES.put("blue", "34");
+      SEQUENCES.put("fg_blue", "34");
+      SEQUENCES.put("magenta", "35");
+      SEQUENCES.put("fg_magenta", "35");
+      SEQUENCES.put("cyan", "36");
+      SEQUENCES.put("fg_cyan", "36");
+      SEQUENCES.put("white", "37");
+      SEQUENCES.put("fg_white", "37");
+      SEQUENCES.put("default", "39");
+      SEQUENCES.put("fg_default", "39");
+      SEQUENCES.put("bg_black", "40");
+      SEQUENCES.put("bg_red", "41");
+      SEQUENCES.put("bg_green", "42");
+      SEQUENCES.put("bg_yellow", "43");
+      SEQUENCES.put("bg_blue", "44");
+      SEQUENCES.put("bg_magenta", "45");
+      SEQUENCES.put("bg_cyan", "46");
+      SEQUENCES.put("bg_white", "47");
+      SEQUENCES.put("bg_default", "49");
+    }
+    private PatternConverter pattern;
+    private Map<String, String> style;
+
+    HighlightPatternConverter(FormattingInfo formattingInfo, String pattern, String style) {
+      super(formattingInfo);
+      this.pattern = new PatternParser(pattern).parse();
+      Map<String, String> unparsed = new HashMap<>();
+      unparsed.put("trace", "cyan");
+      unparsed.put("debug", "cyan");
+      unparsed.put("info", "bright green");
+      unparsed.put("warn", "bright yellow");
+      unparsed.put("error", "bright red");
+      unparsed.put("fatal", "bright red");
+      if (style != null) {
+        style = style.toLowerCase(Locale.ENGLISH);
+        if (style.indexOf(',') < 0 && style.indexOf('=') < 0) {
+          unparsed.put("trace", style.trim());
+          unparsed.put("debug", style.trim());
+          unparsed.put("info", style.trim());
+          unparsed.put("warn", style.trim());
+          unparsed.put("error", style.trim());
+          unparsed.put("fatal", style.trim());
+        } else {
+          String[] keys = style.split("\\s*,\\s*");
+          for (String key : keys) {
+            String[] val = key.split("\\s*=\\s*");
+            if (val.length > 1) {
+              unparsed.put(val[0].trim(), val[1].trim());
+            }
+          }
+        }
+      }
+      this.style = new HashMap<>();
+      for (Map.Entry<String, String> e : unparsed.entrySet()) {
+        this.style.put(e.getKey(), createSequence(e.getValue().split("\\s")));
+      }
+    }
+
+    private String createSequence(String... names) {
+      StringBuilder sb = new StringBuilder(SEQUENCES.get("csi"));
+      boolean first = true;
+      for (String name : names) {
+        name = name.trim();
+        if (!first) {
+          sb.append(SEQUENCES.get("separator"));
+        }
+        first = false;
+        sb.append(SEQUENCES.getOrDefault(name, name));
+      }
+      sb.append(SEQUENCES.get("suffix"));
+      return sb.toString();
+    }
+
+    public
+    String convert(PaxLoggingEvent event) {
+      String s;
+      switch (event.getLevel().toInt()) {
+        case PaxLogger.LEVEL_TRACE:
+          s = "trace";
+          break;
+        case PaxLogger.LEVEL_DEBUG:
+          s = "debug";
+          break;
+        case PaxLogger.LEVEL_INFO:
+          s = "info";
+          break;
+        case PaxLogger.LEVEL_WARNING:
+          s = "warn";
+          break;
+        default:
+          s = "error";
+          break;
+      }
+      String str = style.get(s);
+      if (str != null) {
+        return str + pattern.convert(event) + SEQUENCES.get("csi") + SEQUENCES.get("suffix");
+      } else {
+        return pattern.convert(event);
+      }
+    }
+  }
+
   private class LocationPatternConverter extends PatternConverter {
     int type;