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