+ @Override
+ public Collection<String> listAvailableEvents() {
+ List<String> ret = new ArrayList<String>();
+
+ List<String> loggersNames = Collections.list(LogManager.getLogManager().getLoggerNames());
+ for (String name : loggersNames) {
+ /*
+ * Skip the root logger. An empty string is not a valid event name
+ * in LTTng.
+ */
+ if (name.equals("")) {
+ continue;
+ }
+
+ /*
+ * Check if that logger has at least one LTTng JUL handler attached.
+ */
+ Logger logger = Logger.getLogger(name);
+ if (hasLttngHandlerAttached(logger)) {
+ ret.add(name);
+ }
+ }
+
+ return ret;
+ }
+
+ private static boolean hasLttngHandlerAttached(Logger logger) {
+ for (Handler handler : logger.getHandlers()) {
+ if (handler instanceof LttngLogHandler) {
+ return true;
+ }
+ }
+ return false;
+ }
+