logback-config: added support for FileAppender and TimeBasedRollingPolicy
[controller.git] / opendaylight / config / logback-config / src / main / java / org / opendaylight / controller / config / yang / logback / config / LogbackStatusListener.java
1 /**
2  * Generated file
3
4  * Generated from: yang module name: config-test  yang module local name: testing
5  * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
6  * Generated at: Fri Sep 27 14:06:33 CEST 2013
7  *
8  * Do not modify this file unless it is present under src/main directory
9  */
10 package org.opendaylight.controller.config.yang.logback.config;
11
12 import java.io.Closeable;
13 import java.io.IOException;
14 import java.util.ArrayList;
15 import java.util.Collections;
16 import java.util.List;
17
18 import ch.qos.logback.core.status.Status;
19 import org.slf4j.LoggerFactory;
20
21 import ch.qos.logback.classic.LoggerContext;
22 import ch.qos.logback.core.status.StatusBase;
23 import ch.qos.logback.core.status.StatusListener;
24 import ch.qos.logback.core.status.StatusManager;
25
26 public class LogbackStatusListener implements StatusListener, LogbackRuntimeMXBean, Closeable {
27
28     private final List<StatusTO> receivedStatuses;
29     private final LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper;
30     private LogbackRuntimeRegistration reg;
31
32     public LogbackStatusListener(LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) {
33         receivedStatuses = new ArrayList<>();
34         this.rootRuntimeBeanRegistratorWrapper = rootRuntimeBeanRegistratorWrapper;
35     }
36
37     @Override
38     public synchronized List<StatusTO> getStatusTO() {
39         return Collections.unmodifiableList(receivedStatuses);
40     }
41
42     @Override
43     public synchronized void reset() {
44         receivedStatuses.clear();
45     }
46
47     public LogbackRuntimeRegistration register() {
48         reg = registerToJMX(rootRuntimeBeanRegistratorWrapper);
49         registerToLogback();
50         return reg;
51     }
52
53     private LogbackRuntimeRegistration registerToJMX(LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) {
54         return rootRuntimeBeanRegistratorWrapper.register(this);
55     }
56
57     private synchronized void registerToLogback() {
58         LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
59         final StatusManager statusManager = context.getStatusManager();
60
61         statusManager.remove(this);
62         reset();
63
64         statusManager.add(this);
65         addInitialStatuses(statusManager);
66     }
67
68     private void addInitialStatuses(StatusManager statusManager) {
69         for (ch.qos.logback.core.status.Status status : statusManager.getCopyOfStatusList()) {
70             addStatusEvent(status);
71         }
72     }
73
74     @Override
75     public synchronized void addStatusEvent(ch.qos.logback.core.status.Status status) {
76         receivedStatuses.add(transformStatus(status));
77     }
78
79     private StatusTO transformStatus(ch.qos.logback.core.status.Status status) {
80         StatusTO transformed = new StatusTO();
81
82         transformed.setDate(status.getDate());
83         transformed.setLevel(transformStatusLevel(status.getLevel()));
84         transformed.setMessage(status.getMessage());
85
86         return transformed;
87     }
88
89     private String transformStatusLevel(int status) {
90         switch (status) {
91         case StatusBase.INFO:
92             return "INFO";
93         case StatusBase.WARN:
94             return "WARN";
95         case StatusBase.ERROR:
96             return "ERROR";
97         default:
98             throw new IllegalStateException("Unknown status level " + status);
99         }
100     }
101
102     @Override
103     public void close() throws IOException {
104         if (reg != null)
105             reg.close();
106         unregisterFromLogback();
107     }
108
109     private void unregisterFromLogback() {
110         LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
111         final StatusManager statusManager = context.getStatusManager();
112         statusManager.remove(this);
113     }
114 }