X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust-java-agent%2Fjava%2Flttng-ust-agent-log4j%2Forg%2Flttng%2Fust%2Fagent%2Flog4j%2FLttngLog4jAgent.java;h=157ff3fe879395b88b1d0592805537201457a02c;hb=e494a9cdf17705bddf2169adf3945ed2ae335db9;hp=7dcff9ec4e582721eba2c85675d56671884aa390;hpb=68a1ef7391fb6103eba95fd350ccc61e73855d95;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 7dcff9ec..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,11 +53,15 @@ class LttngLog4jAgent extends AbstractLttngAgent { @Override public Collection listAvailableEvents() { - List ret = new ArrayList(); + Set ret = new TreeSet(); @SuppressWarnings("unchecked") List loggers = Collections.list(LogManager.getCurrentLoggers()); for (Logger logger : loggers) { + if (logger == null) { + continue; + } + /* * Check if that logger has at least one LTTng log4j appender * attached. @@ -67,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; } + }