Fix: Return the correct list of available Java events
[lttng-ust.git] / liblttng-ust-java-agent / java / lttng-ust-agent-log4j / org / lttng / ust / agent / log4j / LttngLog4jAgent.java
1 /*
2 * Copyright (C) 2015 - EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com>
3 *
4 * This library is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License, version 2.1 only,
6 * as published by the Free Software Foundation.
7 *
8 * This library is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
11 * for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this library; if not, write to the Free Software Foundation,
15 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17
18 package org.lttng.ust.agent.log4j;
19
20 import java.util.ArrayList;
21 import java.util.Collection;
22 import java.util.Collections;
23 import java.util.List;
24
25 import org.apache.log4j.Appender;
26 import org.apache.log4j.LogManager;
27 import org.apache.log4j.Logger;
28 import org.lttng.ust.agent.AbstractLttngAgent;
29
30 /**
31 * Agent implementation for using the Log4j logger, connecting to a root session
32 * daemon.
33 *
34 * @author Alexandre Montplaisir
35 */
36 class LttngLog4jAgent extends AbstractLttngAgent<LttngLogAppender> {
37
38 private static LttngLog4jAgent instance = null;
39
40 private LttngLog4jAgent() {
41 super(Domain.LOG4J);
42 }
43
44 public static synchronized LttngLog4jAgent getInstance() {
45 if (instance == null) {
46 instance = new LttngLog4jAgent();
47 }
48 return instance;
49 }
50
51 @Override
52 public Collection<String> listAvailableEvents() {
53 List<String> ret = new ArrayList<String>();
54
55 @SuppressWarnings("unchecked")
56 List<Logger> loggers = Collections.list(LogManager.getCurrentLoggers());
57 for (Logger logger : loggers) {
58 /*
59 * Check if that logger has at least one LTTng log4j appender
60 * attached.
61 */
62 if (hasLttngAppenderAttached(logger)) {
63 ret.add(logger.getName());
64 }
65 }
66
67 return ret;
68 }
69
70 private static boolean hasLttngAppenderAttached(Logger logger) {
71 @SuppressWarnings("unchecked")
72 List<Appender> appenders = Collections.list(logger.getAllAppenders());
73 for (Appender appender : appenders) {
74 if (appender instanceof LttngLogAppender) {
75 return true;
76 }
77 }
78 return false;
79 }
80 }
This page took 0.031377 seconds and 5 git commands to generate.