You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2013/08/13 03:54:22 UTC

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

Author: jbonofre
Date: Tue Aug 13 01:54:22 2013
New Revision: 1513318

URL: http://svn.apache.org/r1513318
Log:
[KARAF-2437] Refactoring of log:tail to use a executor service and properly control the thread

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=1513318&r1=1513317&r2=1513318&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 Aug 13 01:54:22 2013
@@ -17,9 +17,7 @@
 package org.apache.karaf.log.command;
 
 import java.io.PrintStream;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
+import java.util.concurrent.*;
 
 import org.apache.karaf.shell.commands.Command;
 import org.ops4j.pax.logging.spi.PaxAppender;
@@ -27,27 +25,32 @@ import org.ops4j.pax.logging.spi.PaxLogg
 
 @Command(scope = "log", name = "tail", description = "Continuously display log entries. Use ctrl-c to quit this command")
 public class LogTail extends DisplayLog {
-	
-    private boolean needEndLog;
+
+    private ExecutorService executorService = Executors.newSingleThreadExecutor();
     
     protected Object doExecute() throws Exception {
-        new Thread(new PrintEventThread()).start();
+        PrintEventThread thread = new PrintEventThread();
+        executorService.execute(thread);
        
         for (;;) {
             int c = session.getKeyboard().read();
             if (c < 0) {
-                needEndLog = true;
+                thread.abort();
                 break;
             }
 
         }
-            
+
+        executorService.shutdownNow();
         return null;
     }
     
     
     class PrintEventThread implements Runnable {
+
         PrintStream out = System.out;
+        boolean doDisplay = true;
+
         public void run() {
             Iterable<PaxLoggingEvent> le = logService.getEvents(entries == 0 ? Integer.MAX_VALUE : entries);
             for (PaxLoggingEvent event : le) {
@@ -63,7 +66,7 @@ public class LogTail extends DisplayLog 
             try {
                 logService.addAppender(appender);
                 
-                while (!needEndLog) {
+                if (doDisplay) {
                     PaxLoggingEvent event = queue.take();
                     if (event != null) {
                         printEvent(out, event);
@@ -77,6 +80,11 @@ public class LogTail extends DisplayLog 
             out.println();
             
         }
+
+        public void abort() {
+            doDisplay = false;
+        }
+
     }
 
 }