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 11:49:37 UTC

svn commit: r1521412 - /karaf/trunk/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java

Author: ffang
Date: Tue Sep 10 09:49:37 2013
New Revision: 1521412

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

Modified:
    karaf/trunk/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java

Modified: karaf/trunk/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java
URL: http://svn.apache.org/viewvc/karaf/trunk/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java?rev=1521412&r1=1521411&r2=1521412&view=diff
==============================================================================
--- karaf/trunk/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java (original)
+++ karaf/trunk/log/command/src/main/java/org/apache/karaf/log/command/LogTail.java Tue Sep 10 09:49:37 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.karaf.log.command;
 
+import java.io.IOException;
 import java.io.PrintStream;
 import java.util.concurrent.*;
 
@@ -29,22 +30,37 @@ public class LogTail extends DisplayLog 
     private ExecutorService executorService = Executors.newSingleThreadExecutor();
     
     protected Object doExecute() throws Exception {
-        PrintEventThread thread = new PrintEventThread();
-        executorService.execute(thread);
-       
-        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 {
 
@@ -66,7 +82,7 @@ public class LogTail extends DisplayLog 
             try {
                 logService.addAppender(appender);
                 
-                if (doDisplay) {
+                while (doDisplay) {
                     PaxLoggingEvent event = queue.take();
                     if (event != null) {
                         printEvent(out, event);