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;