Author: gnodet
Date: Mon Sep 27 14:41:34 2010
New Revision: 1001761

URL: http://svn.apache.org/viewvc?rev=1001761&view=rev
Log:
[KARAF-224] Improve log:display command to display colored log events

Modified:
    karaf/trunk/shell/log/pom.xml
    
karaf/trunk/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayLog.java
    karaf/trunk/shell/log/src/main/resources/OSGI-INF/blueprint/shell-log.xml

Modified: karaf/trunk/shell/log/pom.xml
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/log/pom.xml?rev=1001761&r1=1001760&r2=1001761&view=diff
==============================================================================
--- karaf/trunk/shell/log/pom.xml (original)
+++ karaf/trunk/shell/log/pom.xml Mon Sep 27 14:41:34 2010
@@ -62,11 +62,9 @@
             <groupId>org.ops4j.pax.logging</groupId>
             <artifactId>pax-logging-service</artifactId>
         </dependency>
-                
         <dependency>
             <groupId>org.ops4j.pax.logging</groupId>
             <artifactId>pax-logging-api</artifactId>
-            <scope>test</scope>
         </dependency>
 
     </dependencies>

Modified: 
karaf/trunk/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayLog.java
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayLog.java?rev=1001761&r1=1001760&r2=1001761&view=diff
==============================================================================
--- 
karaf/trunk/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayLog.java 
(original)
+++ 
karaf/trunk/shell/log/src/main/java/org/apache/karaf/shell/log/DisplayLog.java 
Mon Sep 27 14:41:34 2010
@@ -35,8 +35,28 @@ public class DisplayLog extends OsgiComm
     @Option(name = "-p", aliases = {}, description="Pattern for formatting the 
output", required = false, multiValued = false)
     protected String overridenPattern;
 
+    @Option(name = "--no-color", description="Disable syntax coloring of log 
events", required = false, multiValued = false)
+    protected boolean noColor;
+
     protected String pattern;
     protected LruList events;
+    protected String fatalColor;
+    protected String errorColor;
+    protected String warnColor;
+    protected String infoColor;
+    protected String debugColor;
+    protected String traceColor;
+
+    private static final String FATAL = "fatal";
+    private static final String ERROR = "error";
+    private static final String WARN = "warn";
+    private static final String INFO = "info";
+    private static final String DEBUG = "debug";
+    private static final String TRACE = "trace";
+
+    private static final char FIRST_ESC_CHAR = 27;
+       private static final char SECOND_ESC_CHAR = '[';
+    private static final char COMMAND_CHAR = 'm';
 
     public LruList getEvents() {
         return events;
@@ -54,26 +74,111 @@ public class DisplayLog extends OsgiComm
         this.pattern = pattern;
     }
 
+    public String getFatalColor() {
+        return fatalColor;
+    }
+
+    public void setFatalColor(String fatalColor) {
+        this.fatalColor = fatalColor;
+    }
+
+    public String getErrorColor() {
+        return errorColor;
+    }
+
+    public void setErrorColor(String errorColor) {
+        this.errorColor = errorColor;
+    }
+
+    public String getWarnColor() {
+        return warnColor;
+    }
+
+    public void setWarnColor(String warnColor) {
+        this.warnColor = warnColor;
+    }
+
+    public String getInfoColor() {
+        return infoColor;
+    }
+
+    public void setInfoColor(String infoColor) {
+        this.infoColor = infoColor;
+    }
+
+    public String getDebugColor() {
+        return debugColor;
+    }
+
+    public void setDebugColor(String debugColor) {
+        this.debugColor = debugColor;
+    }
+
+    public String getTraceColor() {
+        return traceColor;
+    }
+
+    public void setTraceColor(String traceColor) {
+        this.traceColor = traceColor;
+    }
+
     protected Object doExecute() throws Exception {
         PatternConverter cnv = new PatternParser(overridenPattern != null ? 
overridenPattern : pattern).parse();
 
         Iterable<PaxLoggingEvent> le = events.getElements(entries == 0 ? 
Integer.MAX_VALUE : entries);
         StringBuffer sb = new StringBuffer();
         for (PaxLoggingEvent event : le) {
+            String color = getColor(event);
             sb.setLength(0);
+            if (color != null) {
+                sb.append(FIRST_ESC_CHAR);
+                sb.append(SECOND_ESC_CHAR);
+                sb.append(color);
+                sb.append(COMMAND_CHAR);
+            }
             for (PatternConverter pc = cnv; pc != null; pc = pc.next) {
                 pc.format(sb, event);
             }
-            System.out.print(sb.toString());
             if (event.getThrowableStrRep() != null) {
                 for (String r : event.getThrowableStrRep()) {
-                    System.out.println(r);
+                    sb.append(r).append('\n');
                 }
             }
+            if (color != null) {
+                sb.append(FIRST_ESC_CHAR);
+                sb.append(SECOND_ESC_CHAR);
+                sb.append("0");
+                sb.append(COMMAND_CHAR);
+            }
+            System.out.print(sb.toString());
         }
         System.out.println();
         
         return null;
     }
 
+    private String getColor(PaxLoggingEvent event) {
+        String color = null;
+        if (!noColor) {
+            String lvl = event.getLevel().toString().toLowerCase();
+            if (FATAL.equals(lvl)) {
+                color = fatalColor;
+            } else if (ERROR.equals(lvl)) {
+                color = errorColor;
+            } else if (WARN.equals(lvl)) {
+                color = warnColor;
+            } else if (INFO.equals(lvl)) {
+                color = infoColor;
+            } else if (DEBUG.equals(lvl)) {
+                color = debugColor;
+            } else if (TRACE.equals(lvl)) {
+                color = traceColor;
+            }
+            if (color != null && color.length() == 0) {
+                color = null;
+            }
+        }
+        return color;
+    }
+
 }

Modified: 
karaf/trunk/shell/log/src/main/resources/OSGI-INF/blueprint/shell-log.xml
URL: 
http://svn.apache.org/viewvc/karaf/trunk/shell/log/src/main/resources/OSGI-INF/blueprint/shell-log.xml?rev=1001761&r1=1001760&r2=1001761&view=diff
==============================================================================
--- karaf/trunk/shell/log/src/main/resources/OSGI-INF/blueprint/shell-log.xml 
(original)
+++ karaf/trunk/shell/log/src/main/resources/OSGI-INF/blueprint/shell-log.xml 
Mon Sep 27 14:41:34 2010
@@ -26,6 +26,12 @@
         <cm:default-properties>
             <cm:property name="size" value="500"/>
             <cm:property name="pattern" value="%d{ABSOLUTE} | %-5.5p | 
%-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n"/>
+            <cm:property name="fatalColor" value="31"/>
+            <cm:property name="errorColor" value="31"/>
+            <cm:property name="warnColor" value="35"/>
+            <cm:property name="infoColor" value="36"/>
+            <cm:property name="debugColor" value="39"/>
+            <cm:property name="traceColor" value="39"/>
         </cm:default-properties>
     </cm:property-placeholder>
 
@@ -34,6 +40,12 @@
             <action class="org.apache.karaf.shell.log.DisplayLog">
                 <property name="events" ref="events"/>
                 <property name="pattern" value="${pattern}"/>
+                <property name="fatalColor" value="${fatalColor}"/>
+                <property name="errorColor" value="${errorColor}"/>
+                <property name="warnColor" value="${warnColor}"/>
+                <property name="infoColor" value="${infoColor}"/>
+                <property name="debugColor" value="${debugColor}"/>
+                <property name="traceColor" value="${traceColor}"/>
             </action>
         </command>
         <command name="log/display-exception">
@@ -65,7 +77,7 @@
 
     <service ref="vmLogAppender" 
interface="org.ops4j.pax.logging.spi.PaxAppender">
         <service-properties>
-            <entry key="org.ops4j.pax.logging.appender.name" 
value="VmLogAppender"/>
+                <entry key="org.ops4j.pax.logging.appender.name" 
value="VmLogAppender"/>
         </service-properties>
     </service>
 


Reply via email to