You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2017/07/21 13:11:09 UTC
[1/2] karaf git commit: [KARAF-5267] Redesigned log:tail to not start
threads
Repository: karaf
Updated Branches:
refs/heads/master f35f5b526 -> 16acdbc37
[KARAF-5267] Redesigned log:tail to not start threads
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/f1ce8fa4
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/f1ce8fa4
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/f1ce8fa4
Branch: refs/heads/master
Commit: f1ce8fa4087d834e67527a4ea05ff68a2fdfc7da
Parents: f35f5b5
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Jul 21 12:02:16 2017 +0200
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Jul 21 12:02:16 2017 +0200
----------------------------------------------------------------------
.../apache/karaf/log/command/DisplayLog.java | 14 ++-
.../org/apache/karaf/log/command/LogTail.java | 117 ++++++-------------
2 files changed, 42 insertions(+), 89 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/f1ce8fa4/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
----------------------------------------------------------------------
diff --git a/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java b/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
index 0d73c1d..82aec16 100644
--- a/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
+++ b/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
@@ -66,18 +66,20 @@ public class DisplayLog implements Action {
@Override
public Object execute() throws Exception {
-
- int minLevel = getMinLevel(level);
-
-
final PrintStream out = System.out;
+ int minLevel = getMinLevel(level);
+ display(out, minLevel);
+ out.println();
+ return null;
+ }
+ protected void display(final PrintStream out, int minLevel) {
+
Iterable<PaxLoggingEvent> le = logService.getEvents(entries == 0 ? Integer.MAX_VALUE : entries);
for (PaxLoggingEvent event : le) {
printEvent(out, event, minLevel);
}
- out.println();
- return null;
+ out.flush();
}
protected static int getMinLevel(String levelSt) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/f1ce8fa4/log/src/main/java/org/apache/karaf/log/command/LogTail.java
----------------------------------------------------------------------
diff --git a/log/src/main/java/org/apache/karaf/log/command/LogTail.java b/log/src/main/java/org/apache/karaf/log/command/LogTail.java
index dc48e00..8cd70f8 100644
--- a/log/src/main/java/org/apache/karaf/log/command/LogTail.java
+++ b/log/src/main/java/org/apache/karaf/log/command/LogTail.java
@@ -16,12 +16,7 @@
*/
package org.apache.karaf.log.command;
-import java.io.IOException;
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.karaf.log.core.LogService;
import org.apache.karaf.shell.api.action.Command;
@@ -29,7 +24,9 @@ import org.apache.karaf.shell.api.action.lifecycle.Reference;
import org.apache.karaf.shell.api.action.lifecycle.Service;
import org.apache.karaf.shell.api.console.Session;
import org.ops4j.pax.logging.spi.PaxAppender;
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.util.tracker.ServiceTracker;
@Command(scope = "log", name = "tail", description = "Continuously display log entries. Use ctrl-c to quit this command")
@Service
@@ -39,92 +36,46 @@ public class LogTail extends DisplayLog {
Session session;
@Reference
- LogService logService;
-
- private ExecutorService executorService = Executors.newFixedThreadPool(2);
+ BundleContext context;
@Override
public Object execute() throws Exception {
- PrintEventThread printThread = new PrintEventThread();
- ReadKeyBoardThread readKeyboardThread = new ReadKeyBoardThread(Thread.currentThread());
- executorService.execute(printThread);
- executorService.execute(readKeyboardThread);
- while (!Thread.currentThread().isInterrupted()) {
- try {
- Thread.sleep(200);
- } catch (java.lang.InterruptedException e) {
- break;
- }
- }
- printThread.abort();
- readKeyboardThread.abort();
- executorService.shutdownNow();
- return null;
- }
-
- class ReadKeyBoardThread implements Runnable {
- private Thread sessionThread;
- boolean readKeyboard = true;
- public ReadKeyBoardThread(Thread thread) {
- this.sessionThread = thread;
- }
-
- public void abort() {
- readKeyboard = false;
- }
-
- public void run() {
- while (readKeyboard) {
- try {
- int c = session.getKeyboard().read();
- if (c < 0) {
- sessionThread.interrupt();
- break;
- }
- } catch (IOException e) {
- break;
- }
-
+ int minLevel = getMinLevel(level);
+ PrintStream out = session.getConsole();
+ display(out, minLevel);
+ PaxAppender appender = event -> printEvent(out, event, minLevel);
+ ServiceTracker<LogService, LogService> tracker = new ServiceTracker<LogService, LogService>(context, LogService.class, null) {
+
+ @Override
+ public LogService addingService(ServiceReference<LogService> reference) {
+ LogService service = super.addingService(reference);
+ service.addAppender(appender);
+ return service;
}
- }
- }
-
- class PrintEventThread implements Runnable {
-
- PrintStream out = System.out;
- boolean doDisplay = true;
- public void run() {
- int minLevel = getMinLevel(level);
- Iterable<PaxLoggingEvent> le = logService.getEvents(entries == 0 ? Integer.MAX_VALUE : entries);
- for (PaxLoggingEvent event : le) {
- printEvent(out, event, minLevel);
- }
- out.flush();
- // Tail
- final BlockingQueue<PaxLoggingEvent> queue = new LinkedBlockingQueue<>();
- PaxAppender appender = queue::add;
- try {
- logService.addAppender(appender);
- while (doDisplay) {
- printEvent(out, queue.take(), minLevel);
- if (queue.isEmpty()) {
- out.flush();
- }
+ @Override
+ public void removedService(ServiceReference<LogService> reference, LogService service) {
+ service.removeAppender(appender);
+ synchronized (LogTail.this) {
+ LogTail.this.notifyAll();
}
- } catch (InterruptedException e) {
- // Ignore
- } finally {
- logService.removeAppender(appender);
+ };
+ };
+ tracker.open();
+
+ try {
+ synchronized (this) {
+ wait();
}
- out.println();
-
- }
-
- public void abort() {
- doDisplay = false;
+ out.println("Stopping tail as log.core bundle was stopped.");
+ } catch (InterruptedException e) {
+ // Ignore as it will happen if the user breaks the tail using Ctrl-C
+ } finally {
+ tracker.close();
}
+ out.println();
+ return null;
}
}
[2/2] karaf git commit: [KARAF-5267] Documentation and move flush to
correct position
Posted by cs...@apache.org.
[KARAF-5267] Documentation and move flush to correct position
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/16acdbc3
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/16acdbc3
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/16acdbc3
Branch: refs/heads/master
Commit: 16acdbc37cd8c54ef4ca2122eaa3fdaa506114da
Parents: f1ce8fa
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Fri Jul 21 12:09:41 2017 +0200
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Fri Jul 21 12:09:41 2017 +0200
----------------------------------------------------------------------
log/src/main/java/org/apache/karaf/log/command/DisplayLog.java | 2 --
log/src/main/java/org/apache/karaf/log/command/LogTail.java | 2 ++
2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/16acdbc3/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
----------------------------------------------------------------------
diff --git a/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java b/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
index 82aec16..076b8ec 100644
--- a/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
+++ b/log/src/main/java/org/apache/karaf/log/command/DisplayLog.java
@@ -74,12 +74,10 @@ public class DisplayLog implements Action {
}
protected void display(final PrintStream out, int minLevel) {
-
Iterable<PaxLoggingEvent> le = logService.getEvents(entries == 0 ? Integer.MAX_VALUE : entries);
for (PaxLoggingEvent event : le) {
printEvent(out, event, minLevel);
}
- out.flush();
}
protected static int getMinLevel(String levelSt) {
http://git-wip-us.apache.org/repos/asf/karaf/blob/16acdbc3/log/src/main/java/org/apache/karaf/log/command/LogTail.java
----------------------------------------------------------------------
diff --git a/log/src/main/java/org/apache/karaf/log/command/LogTail.java b/log/src/main/java/org/apache/karaf/log/command/LogTail.java
index 8cd70f8..00d5a2b 100644
--- a/log/src/main/java/org/apache/karaf/log/command/LogTail.java
+++ b/log/src/main/java/org/apache/karaf/log/command/LogTail.java
@@ -41,8 +41,10 @@ public class LogTail extends DisplayLog {
@Override
public Object execute() throws Exception {
int minLevel = getMinLevel(level);
+ // Do not use System.out as it may write to the wrong console depending on the thread that calls our log handler
PrintStream out = session.getConsole();
display(out, minLevel);
+ out.flush();
PaxAppender appender = event -> printEvent(out, event, minLevel);
ServiceTracker<LogService, LogService> tracker = new ServiceTracker<LogService, LogService>(context, LogService.class, null) {