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;
+ }
+
}
}