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);