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/30 14:34:42 UTC
karaf git commit: React correctly when bundle stops
Repository: karaf
Updated Branches:
refs/heads/master c63c75795 -> ccedc7753
React correctly when bundle stops
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/ccedc775
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/ccedc775
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/ccedc775
Branch: refs/heads/master
Commit: ccedc775389bb6c618db6aa8f191be471cf71b66
Parents: c63c757
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Sun Jul 30 15:39:18 2017 +0200
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Sun Jul 30 16:34:20 2017 +0200
----------------------------------------------------------------------
.../org/apache/karaf/log/command/LogTail.java | 54 ++++++++++++--------
1 file changed, 34 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/ccedc775/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 00d5a2b..d43b639 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
@@ -27,11 +27,11 @@ import org.ops4j.pax.logging.spi.PaxAppender;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
@Command(scope = "log", name = "tail", description = "Continuously display log entries. Use ctrl-c to quit this command")
@Service
public class LogTail extends DisplayLog {
-
@Reference
Session session;
@@ -45,26 +45,10 @@ public class LogTail extends DisplayLog {
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) {
-
- @Override
- public LogService addingService(ServiceReference<LogService> reference) {
- LogService service = super.addingService(reference);
- service.addAppender(appender);
- return service;
- }
- @Override
- public void removedService(ServiceReference<LogService> reference, LogService service) {
- service.removeAppender(appender);
- synchronized (LogTail.this) {
- LogTail.this.notifyAll();
- }
- };
- };
+ PaxAppender appender = event -> printEvent(out, event, minLevel);
+ ServiceTracker<LogService, LogService> tracker = new LogServiceTracker(context, LogService.class, null, appender);
tracker.open();
-
try {
synchronized (this) {
wait();
@@ -76,8 +60,38 @@ public class LogTail extends DisplayLog {
tracker.close();
}
out.println();
-
return null;
}
+
+ private synchronized void stopTail() {
+ notifyAll();
+ }
+
+ /**
+ * Track LogService dynamically so we can react when the log core bundle stops even while we block for the tail
+ */
+ private final class LogServiceTracker extends ServiceTracker<LogService, LogService> {
+ private final PaxAppender appender;
+
+ private LogServiceTracker(BundleContext context, Class<LogService> clazz,
+ ServiceTrackerCustomizer<LogService, LogService> customizer,
+ PaxAppender appender) {
+ super(context, clazz, customizer);
+ this.appender = appender;
+ }
+
+ @Override
+ public LogService addingService(ServiceReference<LogService> reference) {
+ LogService service = super.addingService(reference);
+ service.addAppender(appender);
+ return service;
+ }
+
+ @Override
+ public void removedService(ServiceReference<LogService> reference, LogService service) {
+ service.removeAppender(appender);
+ stopTail();
+ }
+ }
}