~ubuntu-branches/ubuntu/wily/ust/wily-proposed

« back to all changes in this revision

Viewing changes to liblttng-ust-java-agent/java/org/lttng/ust/agent/log4j/LTTngLog4j.java

  • Committer: Package Import Robot
  • Author(s): Artur Rona
  • Date: 2015-06-24 14:18:03 UTC
  • mfrom: (11.2.11 sid)
  • Revision ID: package-import@ubuntu.com-20150624141803-zfj6xzpr7dlxiysg
Tags: 2.6.2-1ubuntu1
* Merge from Debian unstable. (LP: #1468345) Remaining changes:
  - debian/control, debian/patches/use-python3.patch:
    + Switch to use python3. (Closes: #789790)
* Drop following changes, fixed in Debian / upstream:
  - debian/patches/0001-Add-aarch64-host-cpu-in-configure.ac.patch:
    + Add arm64 host_cpu stanzas in configure.ac
  - debian/liblttng-ust0.symbols:
    + Update symbols file.
  - debian/control:
    + Enable builds on arm64 and ppc64el.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2014 - Christian Babeux <christian.babeux@efficios.com>
 
3
 *
 
4
 *
 
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.
 
8
 *
 
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
 
12
 * for more details.
 
13
 *
 
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
 
17
 */
 
18
 
 
19
package org.lttng.ust.agent.log4j;
 
20
 
 
21
import java.util.Enumeration;
 
22
import java.util.Iterator;
 
23
import java.util.Vector;
 
24
 
 
25
import org.apache.log4j.LogManager;
 
26
import org.apache.log4j.Logger;
 
27
 
 
28
import org.lttng.ust.agent.LogFrameworkSkeleton;
 
29
 
 
30
public class LTTngLog4j extends LogFrameworkSkeleton {
 
31
 
 
32
        private LTTngLogAppender appender;
 
33
        private Boolean attached;
 
34
 
 
35
        public LTTngLog4j(Boolean isRoot) {
 
36
                super();
 
37
                this.appender = new LTTngLogAppender(isRoot);
 
38
                this.attached = false;
 
39
        }
 
40
 
 
41
        @Override
 
42
        public Boolean enableLogger(String name) {
 
43
                if(!super.enableLogger(name)) {
 
44
                        return false;
 
45
                }
 
46
 
 
47
                /* The first enable of any event triggers the attachment to the root logger */
 
48
                if (getEventCount() == 1 && !this.attached) {
 
49
                        attachToRootLogger();
 
50
                }
 
51
 
 
52
                return true;
 
53
        }
 
54
 
 
55
        @Override
 
56
        public Boolean disableLogger(String name) {
 
57
                if(!super.disableLogger(name)) {
 
58
                        return false;
 
59
                }
 
60
 
 
61
                /* Detach from the root logger when the event counts reach zero */
 
62
                if (getEventCount() == 0 && this.attached) {
 
63
                        detachFromRootLogger();
 
64
                }
 
65
 
 
66
                return true;
 
67
        }
 
68
 
 
69
        @Override
 
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();
 
75
                        logs.add(name);
 
76
                }
 
77
 
 
78
                return logs.iterator();
 
79
        }
 
80
 
 
81
        @Override
 
82
        public Boolean isRoot() {
 
83
                return appender.isRoot();
 
84
        }
 
85
 
 
86
        @Override
 
87
        public void reset() {
 
88
                super.reset();
 
89
                detachFromRootLogger();
 
90
        }
 
91
 
 
92
        private void attachToRootLogger() {
 
93
                if (this.attached) {
 
94
                        return;
 
95
                }
 
96
 
 
97
                Logger logger = Logger.getRootLogger();
 
98
                logger.addAppender(this.appender);
 
99
                this.attached = true;
 
100
        }
 
101
 
 
102
        private void detachFromRootLogger() {
 
103
                if (!this.attached) {
 
104
                        return;
 
105
                }
 
106
 
 
107
                Logger logger = Logger.getRootLogger();
 
108
                logger.removeAppender(this.appender);
 
109
                this.attached = false;
 
110
        }
 
111
}