2
* Copyright (C) 2014 - Christian Babeux <christian.babeux@efficios.com>
5
* This library is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU Lesser General Public License, version 2.1 only,
7
* as published by the Free Software Foundation.
9
* This library is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
14
* You should have received a copy of the GNU Lesser General Public License
15
* along with this library; if not, write to the Free Software Foundation,
16
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
package org.lttng.ust.agent.log4j;
21
import java.util.Enumeration;
22
import java.util.Iterator;
23
import java.util.Vector;
25
import org.apache.log4j.LogManager;
26
import org.apache.log4j.Logger;
28
import org.lttng.ust.agent.LogFrameworkSkeleton;
30
public class LTTngLog4j extends LogFrameworkSkeleton {
32
private LTTngLogAppender appender;
33
private Boolean attached;
35
public LTTngLog4j(Boolean isRoot) {
37
this.appender = new LTTngLogAppender(isRoot);
38
this.attached = false;
42
public Boolean enableLogger(String name) {
43
if(!super.enableLogger(name)) {
47
/* The first enable of any event triggers the attachment to the root logger */
48
if (getEventCount() == 1 && !this.attached) {
56
public Boolean disableLogger(String name) {
57
if(!super.disableLogger(name)) {
61
/* Detach from the root logger when the event counts reach zero */
62
if (getEventCount() == 0 && this.attached) {
63
detachFromRootLogger();
70
public Iterator<String> listLoggers() {
71
Vector<String> logs = new Vector<String>();
72
for (Enumeration loggers = LogManager.getCurrentLoggers(); loggers.hasMoreElements(); ) {
73
Logger logger = (Logger) loggers.nextElement();
74
String name = logger.getName();
78
return logs.iterator();
82
public Boolean isRoot() {
83
return appender.isRoot();
89
detachFromRootLogger();
92
private void attachToRootLogger() {
97
Logger logger = Logger.getRootLogger();
98
logger.addAppender(this.appender);
102
private void detachFromRootLogger() {
103
if (!this.attached) {
107
Logger logger = Logger.getRootLogger();
108
logger.removeAppender(this.appender);
109
this.attached = false;