You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ff...@apache.org on 2013/09/10 10:37:12 UTC

svn commit: r1521369 - /karaf/branches/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java

Author: ffang
Date: Tue Sep 10 08:37:12 2013
New Revision: 1521369

URL: http://svn.apache.org/r1521369
Log:
[KARAF-2437]Logs still have been printed into console after log:tail and Ctrl + C

Modified:
    karaf/branches/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java

Modified: karaf/branches/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java?rev=1521369&r1=1521368&r2=1521369&view=diff
==============================================================================
--- karaf/branches/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java (original)
+++ karaf/branches/karaf-2.3.x/shell/log/src/main/java/org/apache/karaf/shell/log/LogTail.java Tue Sep 10 08:37:12 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.karaf.shell.log;
 
+import java.io.IOException;
 import java.io.PrintStream;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutorService;
@@ -34,19 +35,36 @@ public class LogTail extends DisplayLog 
     private ExecutorService executorService = Executors.newSingleThreadExecutor();
 
     protected Object doExecute() throws Exception {
-        PrintEventThread thread = new PrintEventThread();
-        executorService.execute(new PrintEventThread());
-
-        for (;;) {
-            int c = session.getKeyboard().read();
-            if (c < 0) {
-                thread.abort();
-                break;
+        PrintEventThread printThread = new PrintEventThread();
+        executorService.execute(printThread);
+        new Thread(new ReadKeyBoardThread(this, Thread.currentThread())).start();
+        while (!Thread.currentThread().isInterrupted());
+        printThread.abort();
+        executorService.shutdownNow();  
+        return null;
+    }
+    
+    class ReadKeyBoardThread implements Runnable {
+        private LogTail logTail;
+        private Thread sessionThread;
+        public ReadKeyBoardThread(LogTail logtail, Thread thread) {
+            this.logTail = logtail;
+            this.sessionThread = thread;
+        }
+        public void run() {
+            for (;;) {
+                try {
+                    int c = this.logTail.session.getKeyboard().read();
+                    if (c < 0) {
+                        this.sessionThread.interrupt();
+                        break;
+                    }
+                } catch (IOException e) {
+                    break;
+                }
+                
             }
         }
-
-        executorService.shutdownNow();
-        return null;
     }
     
     class PrintEventThread implements Runnable {
@@ -70,7 +88,7 @@ public class LogTail extends DisplayLog 
             };
             try {
                 events.addAppender(appender);
-                if (doDisplay) {
+                while (doDisplay) {
                     PaxLoggingEvent logEvent = queue.take();
                     if (logEvent != null) {
                         display(cnv, logEvent, out);