You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2017/07/21 13:11:09 UTC

[1/2] karaf git commit: [KARAF-5267] Redesigned log:tail to not start threads

Repository: karaf
Updated Branches:
  refs/heads/master f35f5b526 -> 16acdbc37


[KARAF-5267] Redesigned log:tail to not start threads


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

Branch: refs/heads/master
Commit: f1ce8fa4087d834e67527a4ea05ff68a2fdfc7da
Parents: f35f5b5
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Jul 21 12:02:16 2017 +0200
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Jul 21 12:02:16 2017 +0200

----------------------------------------------------------------------
 .../apache/karaf/log/command/DisplayLog.java    |  14 ++-
 .../org/apache/karaf/log/command/LogTail.java   | 117 ++++++-------------
 2 files changed, 42 insertions(+), 89 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/f1ce8fa4/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
----------------------------------------------------------------------
diff --git a/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java b/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
index 0d73c1d..82aec16 100644
--- a/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
+++ b/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
@@ -66,18 +66,20 @@ public class DisplayLog implements Action {
 
     @Override
     public Object execute() throws Exception {
-
-        int minLevel = getMinLevel(level);
-
-
         final PrintStream out = System.out;
+        int minLevel = getMinLevel(level);
+        display(out, minLevel);
+        out.println();
+        return null;
+    }
 
+    protected void display(final PrintStream out, int minLevel) {
+        
         Iterable<PaxLoggingEvent> le = logService.getEvents(entries == 0 ? Integer.MAX_VALUE : entries);
         for (PaxLoggingEvent event : le) {
             printEvent(out, event, minLevel);
         }
-        out.println();
-        return null;
+        out.flush();
     }
 
     protected static int getMinLevel(String levelSt) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/f1ce8fa4/log/src/main/java/org/apache/karaf/log/command/LogTail.java
----------------------------------------------------------------------
diff --git a/log/src/main/java/org/apache/karaf/log/command/LogTail.java b/log/src/main/java/org/apache/karaf/log/command/LogTail.java
index dc48e00..8cd70f8 100644
--- a/log/src/main/java/org/apache/karaf/log/command/LogTail.java
+++ b/log/src/main/java/org/apache/karaf/log/command/LogTail.java
@@ -16,12 +16,7 @@
  */
 package org.apache.karaf.log.command;
 
-import java.io.IOException;
 import java.io.PrintStream;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
 
 import org.apache.karaf.log.core.LogService;
 import org.apache.karaf.shell.api.action.Command;
@@ -29,7 +24,9 @@ import org.apache.karaf.shell.api.action.lifecycle.Reference;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.apache.karaf.shell.api.console.Session;
 import org.ops4j.pax.logging.spi.PaxAppender;
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
 
 @Command(scope = "log", name = "tail", description = "Continuously display log entries. Use ctrl-c to quit this command")
 @Service
@@ -39,92 +36,46 @@ public class LogTail extends DisplayLog {
     Session session;
 
     @Reference
-    LogService logService;
-
-    private ExecutorService executorService = Executors.newFixedThreadPool(2);
+    BundleContext context;
 
     @Override
     public Object execute() throws Exception {
-        PrintEventThread printThread = new PrintEventThread();
-        ReadKeyBoardThread readKeyboardThread = new ReadKeyBoardThread(Thread.currentThread());
-        executorService.execute(printThread);
-        executorService.execute(readKeyboardThread);
-        while (!Thread.currentThread().isInterrupted()) {
-            try {
-                Thread.sleep(200);
-            } catch (java.lang.InterruptedException e) {
-                break;
-            }
-        }
-        printThread.abort();
-        readKeyboardThread.abort();
-        executorService.shutdownNow();  
-        return null;      
-    }
-   
-    class ReadKeyBoardThread implements Runnable {
-        private Thread sessionThread;
-        boolean readKeyboard = true;
-        public ReadKeyBoardThread(Thread thread) {
-            this.sessionThread = thread;
-        }
-
-        public void abort() {
-            readKeyboard = false;            
-        }
-
-        public void run() {
-            while (readKeyboard) {
-                try {
-                    int c = session.getKeyboard().read();
-                    if (c < 0) {
-                        sessionThread.interrupt();
-                        break;
-                    }
-                } catch (IOException e) {
-                    break;
-                }
-                
+        int minLevel = getMinLevel(level);
+        PrintStream out = session.getConsole();
+        display(out, minLevel);
+        PaxAppender appender = event -> printEvent(out, event, minLevel);
+        ServiceTracker<LogService, LogService> tracker = new ServiceTracker<LogService, LogService>(context, LogService.class, null) {
+            
+            @Override
+            public LogService addingService(ServiceReference<LogService> reference) {
+                LogService service = super.addingService(reference);
+                service.addAppender(appender);
+                return service;
             }
-        }
-    } 
-    
-    class PrintEventThread implements Runnable {
-
-        PrintStream out = System.out;
-        boolean doDisplay = true;
 
-        public void run() {
-            int minLevel = getMinLevel(level);
-            Iterable<PaxLoggingEvent> le = logService.getEvents(entries == 0 ? Integer.MAX_VALUE : entries);
-            for (PaxLoggingEvent event : le) {
-                printEvent(out, event, minLevel);
-            }
-            out.flush();
-            // Tail
-            final BlockingQueue<PaxLoggingEvent> queue = new LinkedBlockingQueue<>();
-            PaxAppender appender = queue::add;
-            try {
-                logService.addAppender(appender);
-                while (doDisplay) {
-                    printEvent(out, queue.take(), minLevel);
-                    if (queue.isEmpty()) {
-                        out.flush();
-                    }
+            @Override
+            public void removedService(ServiceReference<LogService> reference, LogService service) {
+                service.removeAppender(appender);
+                synchronized (LogTail.this) {
+                    LogTail.this.notifyAll();
                 }
-            } catch (InterruptedException e) {
-                // Ignore
-            } finally {
-                logService.removeAppender(appender);
+            };
+        };
+        tracker.open();
+        
+        try {
+            synchronized (this) {
+                wait();
             }
-            out.println();
-            
-        }
-
-        public void abort() {
-            doDisplay = false;
+            out.println("Stopping tail as log.core bundle was stopped.");
+        } catch (InterruptedException e) {
+            // Ignore as it will happen if the user breaks the tail using Ctrl-C
+        } finally {
+            tracker.close();
         }
+        out.println();
 
+        return null;
     }
 
 }


[2/2] karaf git commit: [KARAF-5267] Documentation and move flush to correct position

Posted by cs...@apache.org.
[KARAF-5267] Documentation and move flush to correct position


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

Branch: refs/heads/master
Commit: 16acdbc37cd8c54ef4ca2122eaa3fdaa506114da
Parents: f1ce8fa
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Jul 21 12:09:41 2017 +0200
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Jul 21 12:09:41 2017 +0200

----------------------------------------------------------------------
 log/src/main/java/org/apache/karaf/log/command/DisplayLog.java | 2 --
 log/src/main/java/org/apache/karaf/log/command/LogTail.java    | 2 ++
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/16acdbc3/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
----------------------------------------------------------------------
diff --git a/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java b/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
index 82aec16..076b8ec 100644
--- a/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
+++ b/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
@@ -74,12 +74,10 @@ public class DisplayLog implements Action {
     }
 
     protected void display(final PrintStream out, int minLevel) {
-        
         Iterable<PaxLoggingEvent> le = logService.getEvents(entries == 0 ? Integer.MAX_VALUE : entries);
         for (PaxLoggingEvent event : le) {
             printEvent(out, event, minLevel);
         }
-        out.flush();
     }
 
     protected static int getMinLevel(String levelSt) {

http://git-wip-us.apache.org/repos/asf/karaf/blob/16acdbc3/log/src/main/java/org/apache/karaf/log/command/LogTail.java
----------------------------------------------------------------------
diff --git a/log/src/main/java/org/apache/karaf/log/command/LogTail.java b/log/src/main/java/org/apache/karaf/log/command/LogTail.java
index 8cd70f8..00d5a2b 100644
--- a/log/src/main/java/org/apache/karaf/log/command/LogTail.java
+++ b/log/src/main/java/org/apache/karaf/log/command/LogTail.java
@@ -41,8 +41,10 @@ public class LogTail extends DisplayLog {
     @Override
     public Object execute() throws Exception {
         int minLevel = getMinLevel(level);
+        // Do not use System.out as it may write to the wrong console depending on the thread that calls our log handler
         PrintStream out = session.getConsole();
         display(out, minLevel);
+        out.flush();
         PaxAppender appender = event -> printEvent(out, event, minLevel);
         ServiceTracker<LogService, LogService> tracker = new ServiceTracker<LogService, LogService>(context, LogService.class, null) {