Author: jbonofre
Date: Mon Aug 12 03:56:18 2013
New Revision: 1513036
URL: http://svn.apache.org/r1513036
Log:
[KARAF-2437] Refactoring of log:tail to use a executor service and properly
control the thread
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=1513036&r1=1513035&r2=1513036&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
Mon Aug 12 03:56:18 2013
@@ -18,6 +18,8 @@ package org.apache.karaf.shell.log;
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.felix.gogo.commands.Command;
@@ -28,24 +30,29 @@ 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(new PrintEventThread());
+
for (;;) {
int c = session.getKeyboard().read();
if (c < 0) {
- needEndLog = true;
+ thread.abort();
break;
}
-
}
+
+ executorService.shutdownNow();
return null;
}
class PrintEventThread implements Runnable {
+
+ boolean doDisplay = true;
+
public void run() {
final PatternConverter cnv = new PatternParser(overridenPattern !=
null ? overridenPattern : pattern).parse();
final PrintStream out = System.out;
@@ -63,7 +70,7 @@ public class LogTail extends DisplayLog
};
try {
events.addAppender(appender);
- while (!needEndLog) {
+ if (doDisplay) {
PaxLoggingEvent logEvent = queue.take();
if (logEvent != null) {
display(cnv, logEvent, out);
@@ -76,6 +83,10 @@ public class LogTail extends DisplayLog
}
out.println();
}
+
+ public void abort() {
+ doDisplay = false;
+ }
}
}