fix: unix socket peercred on FreeBSD
[lttng-ust.git] / liblttng-ust-java-agent / java / lttng-ust-agent-log4j / org / lttng / ust / agent / log4j / LttngLog4jAgent.java
CommitLineData
5b5ffa03 1/*
d60dfbe4 2 * Copyright (C) 2015 - EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com>
5b5ffa03
DG
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
d60dfbe4
AM
18package org.lttng.ust.agent.log4j;
19
68a1ef73
AM
20import java.util.Collection;
21import java.util.Collections;
a548b3c1 22import java.util.Enumeration;
68a1ef73 23import java.util.List;
46070114
AM
24import java.util.Set;
25import java.util.TreeSet;
68a1ef73
AM
26
27import org.apache.log4j.Appender;
46070114 28import org.apache.log4j.Category;
68a1ef73
AM
29import org.apache.log4j.LogManager;
30import org.apache.log4j.Logger;
d60dfbe4
AM
31import org.lttng.ust.agent.AbstractLttngAgent;
32
33/**
34 * Agent implementation for using the Log4j logger, connecting to a root session
35 * daemon.
36 *
37 * @author Alexandre Montplaisir
38 */
39class LttngLog4jAgent extends AbstractLttngAgent<LttngLogAppender> {
40
41 private static LttngLog4jAgent instance = null;
42
43 private LttngLog4jAgent() {
44 super(Domain.LOG4J);
45 }
5b5ffa03 46
d60dfbe4
AM
47 public static synchronized LttngLog4jAgent getInstance() {
48 if (instance == null) {
49 instance = new LttngLog4jAgent();
50 }
51 return instance;
52 }
5b5ffa03 53
68a1ef73
AM
54 @Override
55 public Collection<String> listAvailableEvents() {
46070114 56 Set<String> ret = new TreeSet<String>();
68a1ef73
AM
57
58 @SuppressWarnings("unchecked")
59 List<Logger> loggers = Collections.list(LogManager.getCurrentLoggers());
60 for (Logger logger : loggers) {
2b218c9a
AM
61 if (logger == null) {
62 continue;
63 }
64
68a1ef73
AM
65 /*
66 * Check if that logger has at least one LTTng log4j appender
67 * attached.
68 */
69 if (hasLttngAppenderAttached(logger)) {
70 ret.add(logger.getName());
71 }
72 }
73
74 return ret;
75 }
76
46070114 77 private static boolean hasLttngAppenderAttached(Category logger) {
68a1ef73 78 @SuppressWarnings("unchecked")
a548b3c1
AM
79 Enumeration<Appender> appenders = logger.getAllAppenders();
80 if (appenders != null) {
81 for (Appender appender : Collections.list(appenders)) {
82 if (appender instanceof LttngLogAppender) {
83 return true;
84 }
68a1ef73
AM
85 }
86 }
46070114
AM
87
88 /*
89 * A parent logger, if any, may be connected to an LTTng handler. In
90 * this case, we will want to include this child logger in the output,
91 * since it will be accessible by LTTng.
92 */
93 Category parent = logger.getParent();
94 if (parent != null) {
95 return hasLttngAppenderAttached(parent);
96 }
97
98 /*
99 * We have reached the root logger and have not found any LTTng handler,
100 * this event will not be accessible.
101 */
68a1ef73
AM
102 return false;
103 }
46070114 104
5b5ffa03 105}
This page took 0.029956 seconds and 4 git commands to generate.