From b6b73d335a1f24e0d056e4f41e8b7c2948937606 Mon Sep 17 00:00:00 2001 From: kske Date: Sun, 20 Sep 2020 15:27:51 +0200 Subject: [PATCH] Add logging to EventBus using the Platform Logging API --- README.md | 2 +- pom.xml | 2 +- src/main/java/dev/kske/eventbus/EventBus.java | 31 +++++++++++++++++-- .../java/dev/kske/eventbus/EventHandler.java | 5 +++ 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index efe571e..07e8240 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ To include it inside your project, just add the Maven repository and the depende dev.kske event-bus - 0.0.4 + 0.1.0 ``` diff --git a/pom.xml b/pom.xml index d1a0f85..396a840 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ dev.kske event-bus - 0.0.4 + 0.1.0 Event Bus An event handling framework for Java utilizing annotations. diff --git a/src/main/java/dev/kske/eventbus/EventBus.java b/src/main/java/dev/kske/eventbus/EventBus.java index a069e00..4905889 100644 --- a/src/main/java/dev/kske/eventbus/EventBus.java +++ b/src/main/java/dev/kske/eventbus/EventBus.java @@ -1,5 +1,7 @@ package dev.kske.eventbus; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -19,6 +21,8 @@ public final class EventBus { private static EventBus singletonInstance; + private static final Logger logger = System.getLogger(EventBus.class.getName()); + /** * Produces a singleton instance of the event bus. It is lazily initialized on the first call. * @@ -26,8 +30,10 @@ public final class EventBus { * @since 0.0.2 */ public static EventBus getInstance() { - if (singletonInstance == null) + if (singletonInstance == null) { + logger.log(Level.DEBUG, "Initializing singleton event bus instance"); singletonInstance = new EventBus(); + } return singletonInstance; } @@ -44,6 +50,7 @@ public final class EventBus { */ public void dispatch(IEvent event) { Objects.requireNonNull(event); + logger.log(Level.INFO, "Dispatching event {0}", event); getHandlersFor(event.getClass()).forEach(handler -> handler.execute(event)); } @@ -84,6 +91,8 @@ public final class EventBus { Objects.requireNonNull(listener); if (registeredListeners.contains(listener)) throw new EventBusException(listener + " already registered!"); + logger.log(Level.INFO, "Registering event listener {0}", listener.getClass().getName()); + boolean handlerBound = false; registeredListeners.add(listener); for (var method : listener.getClass().getDeclaredMethods()) { @@ -97,9 +106,18 @@ public final class EventBus { var handler = new EventHandler(listener, method, annotation); if (!bindings.containsKey(handler.getEventType())) bindings.put(handler.getEventType(), new TreeSet<>()); + logger.log(Level.DEBUG, "Binding event handler {0}", handler); bindings.get(handler.getEventType()) .add(handler); + handlerBound = true; } + + if(!handlerBound) + logger.log( + Level.WARNING, + "No event handlers bound for event listener {0}", + listener.getClass().getName() + ); } /** @@ -110,11 +128,17 @@ public final class EventBus { */ public void removeListener(EventListener listener) { Objects.requireNonNull(listener); + logger.log(Level.INFO, "Removing event listener {0}", listener.getClass().getName()); + for (var binding : bindings.values()) { var it = binding.iterator(); - while (it.hasNext()) - if (it.next().getListener() == listener) + while (it.hasNext()) { + var handler = it.next(); + if (handler.getListener() == listener) { + logger.log(Level.DEBUG, "Unbinding event handler {0}", handler); it.remove(); + } + } } registeredListeners.remove(listener); } @@ -125,6 +149,7 @@ public final class EventBus { * @since 0.0.1 */ public void clearListeners() { + logger.log(Level.INFO, "Clearing event listeners"); bindings.clear(); registeredListeners.clear(); } diff --git a/src/main/java/dev/kske/eventbus/EventHandler.java b/src/main/java/dev/kske/eventbus/EventHandler.java index 2dfb257..53d9085 100644 --- a/src/main/java/dev/kske/eventbus/EventHandler.java +++ b/src/main/java/dev/kske/eventbus/EventHandler.java @@ -77,6 +77,11 @@ final class EventHandler implements Comparable { return priority == 0 ? hashCode() - other.hashCode() : priority; } + @Override + public String toString() { + return String.format("EventHandler[method=%s, annotation=%s]", method, annotation); + } + /** * Executes the event handler. *