X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust-java-agent%2Fjava%2Flttng-ust-agent-log4j%2Forg%2Flttng%2Fust%2Fagent%2Flog4j%2FLttngLog4jAgent.java;h=157ff3fe879395b88b1d0592805537201457a02c;hb=98296cd1cc5e479d5b6e382307c0a6c8ccac142f;hp=6cb74f91b5516864c1cc35403a1e8ff525cdda38;hpb=187d89d3e7f80f79f50eea6f70f3a0a937aaf67e;p=lttng-ust.git diff --git a/liblttng-ust-java-agent/java/lttng-ust-agent-log4j/org/lttng/ust/agent/log4j/LttngLog4jAgent.java b/liblttng-ust-java-agent/java/lttng-ust-agent-log4j/org/lttng/ust/agent/log4j/LttngLog4jAgent.java index 6cb74f91..157ff3fe 100644 --- a/liblttng-ust-java-agent/java/lttng-ust-agent-log4j/org/lttng/ust/agent/log4j/LttngLog4jAgent.java +++ b/liblttng-ust-java-agent/java/lttng-ust-agent-log4j/org/lttng/ust/agent/log4j/LttngLog4jAgent.java @@ -17,12 +17,15 @@ package org.lttng.ust.agent.log4j; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Enumeration; import java.util.List; +import java.util.Set; +import java.util.TreeSet; import org.apache.log4j.Appender; +import org.apache.log4j.Category; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.lttng.ust.agent.AbstractLttngAgent; @@ -50,7 +53,7 @@ class LttngLog4jAgent extends AbstractLttngAgent { @Override public Collection listAvailableEvents() { - List ret = new ArrayList(); + Set ret = new TreeSet(); @SuppressWarnings("unchecked") List loggers = Collections.list(LogManager.getCurrentLoggers()); @@ -71,14 +74,32 @@ class LttngLog4jAgent extends AbstractLttngAgent { return ret; } - private static boolean hasLttngAppenderAttached(Logger logger) { + private static boolean hasLttngAppenderAttached(Category logger) { @SuppressWarnings("unchecked") - List appenders = Collections.list(logger.getAllAppenders()); - for (Appender appender : appenders) { - if (appender instanceof LttngLogAppender) { - return true; + Enumeration appenders = logger.getAllAppenders(); + if (appenders != null) { + for (Appender appender : Collections.list(appenders)) { + if (appender instanceof LttngLogAppender) { + return true; + } } } + + /* + * A parent logger, if any, may be connected to an LTTng handler. In + * this case, we will want to include this child logger in the output, + * since it will be accessible by LTTng. + */ + Category parent = logger.getParent(); + if (parent != null) { + return hasLttngAppenderAttached(parent); + } + + /* + * We have reached the root logger and have not found any LTTng handler, + * this event will not be accessible. + */ return false; } + }