[SDC-29] Amdocs OnBoard 1707 initial commit.
[sdc.git] / openecomp-be / lib / openecomp-logging-lib / openecomp-sdc-logging-api / src / main / java / org / openecomp / sdc / logging / api / LoggerFactory.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.logging.api;
22
23
24 /**
25  * <a>Factory to hide a concrete, framework-specific implementation of logger creation.</a>
26  *
27  * <p>The service used by this factory must implement {@link LoggerCreationService}. If no implementation has been
28  * configured or could not be instantiated, a <b>no-op logger</b> will be used, and <b>no events</b> will be logged.
29  * This is done to prevent recursion if attempts are being made to log exceptions that resulted from logger
30  * initialization.
31  * </p>
32  *
33  * @author evitaliy
34  * @since 13/09/2016.
35  *
36  * @see BaseFactory
37  * @see LoggerCreationService
38  */
39 @SuppressWarnings("ThrowableInstanceNeverThrown")
40 public class LoggerFactory extends BaseFactory {
41
42     private static final LoggerCreationService SERVICE;
43
44     static {
45         LoggerCreationService service;
46
47         try {
48             service = locateService(LoggerCreationService.class);
49         } catch (Throwable e) {
50             new RuntimeException("Failed to instantiate logger factory", e).printStackTrace();
51             // use the no-op service to prevent recursion in case of an attempt to log an exception as a
52             // result of a logger initialization error
53             service = new NoOpLoggerCreationService();
54         }
55
56         SERVICE = service;
57     }
58
59     public static Logger getLogger(String clazzName) {
60         return SERVICE.getLogger(clazzName);
61     }
62
63     public static Logger getLogger(Class<?> clazz) {
64         return SERVICE.getLogger(clazz);
65     }
66
67     private static class NoOpLoggerCreationService implements LoggerCreationService {
68         
69         private static final Logger NO_OP_LOGGER = new Logger() {
70             
71             @Override
72             public String getName() {
73                 return "No-Op Logger";
74             }
75
76             @Override
77             public boolean isMetricsEnabled() {
78                 return false;
79             }
80
81             @Override
82             public void metrics(String msg) { }
83
84             @Override
85             public void metrics(String msg, Object arg) { }
86
87             @Override
88             public void metrics(String msg, Object arg1, Object arg2) { }
89
90             @Override
91             public void metrics(String msg, Object... arguments) { }
92
93             @Override
94             public void metrics(String msg, Throwable t) { }
95
96             @Override
97             public boolean isAuditEnabled() {
98                 return false;
99             }
100
101             @Override
102             public void audit(String msg) { }
103
104             @Override
105             public void audit(String msg, Object arg) { }
106
107             @Override
108             public void audit(String msg, Object arg1, Object arg2) { }
109
110             @Override
111             public void audit(String msg, Object... arguments) { }
112
113             @Override
114             public void audit(String msg, Throwable t) { }
115
116             @Override
117             public boolean isDebugEnabled() {
118                 return false;
119             }
120
121             @Override
122             public void debug(String msg) { }
123
124             @Override
125             public void debug(String msg, Object arg) { }
126
127             @Override
128             public void debug(String msg, Object arg1, Object arg2) { }
129
130             @Override
131             public void debug(String msg, Object... arguments) { }
132
133             @Override
134             public void debug(String msg, Throwable t) { }
135
136             @Override
137             public boolean isInfoEnabled() {
138                 return false;
139             }
140
141             @Override
142             public void info(String msg) { }
143
144             @Override
145             public void info(String msg, Object arg) { }
146
147             @Override
148             public void info(String msg, Object arg1, Object arg2) { }
149
150             @Override
151             public void info(String msg, Object... arguments) { }
152
153             @Override
154             public void info(String msg, Throwable t) { }
155
156             @Override
157             public boolean isWarnEnabled() {
158                 return false;
159             }
160
161             @Override
162             public void warn(String msg) { }
163
164             @Override
165             public void warn(String msg, Object arg) { }
166
167             @Override
168             public void warn(String msg, Object... arguments) { }
169
170             @Override
171             public void warn(String msg, Object arg1, Object arg2) { }
172
173             @Override
174             public void warn(String msg, Throwable t) { }
175
176             @Override
177             public boolean isErrorEnabled() {
178                 return false;
179             }
180
181             @Override
182             public void error(String msg) { }
183
184             @Override
185             public void error(String msg, Object arg) { }
186
187             @Override
188             public void error(String msg, Object arg1, Object arg2) { }
189
190             @Override
191             public void error(String msg, Object... arguments) { }
192
193             @Override
194             public void error(String msg, Throwable t) { }
195         };
196         
197         @Override
198         public Logger getLogger(String className) {
199             return NO_OP_LOGGER;
200         }
201
202         @Override
203         public Logger getLogger(Class<?> clazz) {
204             return NO_OP_LOGGER;
205         }
206     }
207 }