summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
e0c010a)
The case where a parent logger has an handler attached but the
tracepoint comes from a child logger is not correctly handled
by the "lttng list -j/-l" command.
For example, if the logger "org.myapp" has a LTTng handler
attached, its child logger "org.myapp.mycomponent" would be
absent from the lttng list output even if it exists.
When checking for events to list, search through the parent
tree of each logger to find a potential LTTng handler.
This should also fix the problem of "lttng list" always
returning empty when the deprecated, but still supported,
LTTngAgent API was used, since that one attaches only one
handler to the root logger.
Signed-off-by: Alexandre Montplaisir <alexmonthy@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
import java.util.logging.Handler;
import java.util.logging.LogManager;
import java.util.logging.Logger;
import java.util.logging.Handler;
import java.util.logging.LogManager;
import java.util.logging.Logger;
@Override
public Collection<String> listAvailableEvents() {
@Override
public Collection<String> listAvailableEvents() {
- List<String> ret = new ArrayList<String>();
+ Set<String> ret = new TreeSet<String>();
List<String> loggersNames = Collections.list(LogManager.getLogManager().getLoggerNames());
for (String name : loggersNames) {
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.
*/
* Skip the root logger. An empty string is not a valid event name
* in LTTng.
*/
+ if (name.equals("") || name.equals("global")) {
+
+ /*
+ * 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.
+ */
+ Logger parent = logger.getParent();
+ if (parent != null) {
+ return hasLttngHandlerAttached(parent);
+ }
+
+ /*
+ * We have reached the root logger and have not found any LTTng handler,
+ * this event will not be accessible.
+ */
package org.lttng.ust.agent.log4j;
package org.lttng.ust.agent.log4j;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
import org.apache.log4j.Appender;
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;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.lttng.ust.agent.AbstractLttngAgent;
@Override
public Collection<String> listAvailableEvents() {
@Override
public Collection<String> listAvailableEvents() {
- List<String> ret = new ArrayList<String>();
+ Set<String> ret = new TreeSet<String>();
@SuppressWarnings("unchecked")
List<Logger> loggers = Collections.list(LogManager.getCurrentLoggers());
@SuppressWarnings("unchecked")
List<Logger> loggers = Collections.list(LogManager.getCurrentLoggers());
- private static boolean hasLttngAppenderAttached(Logger logger) {
+ private static boolean hasLttngAppenderAttached(Category logger) {
@SuppressWarnings("unchecked")
List<Appender> appenders = Collections.list(logger.getAllAppenders());
for (Appender appender : appenders) {
@SuppressWarnings("unchecked")
List<Appender> appenders = Collections.list(logger.getAllAppenders());
for (Appender appender : appenders) {
+
+ /*
+ * 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.
+ */