1/**
2 * Copyright (c) 2004-2011 QOS.ch
3 * All rights reserved.
4 *
5 * Permission is hereby granted, free  of charge, to any person obtaining
6 * a  copy  of this  software  and  associated  documentation files  (the
7 * "Software"), to  deal in  the Software without  restriction, including
8 * without limitation  the rights to  use, copy, modify,  merge, publish,
9 * distribute,  sublicense, and/or sell  copies of  the Software,  and to
10 * permit persons to whom the Software  is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The  above  copyright  notice  and  this permission  notice  shall  be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
17 * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
18 * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 *
24 */
25package org.slf4j.helpers;
26
27import org.slf4j.Logger;
28import org.slf4j.Marker;
29
30/**
31 * A logger implementation which logs via a delegate logger. By default, the delegate is a
32 * {@link NOPLogger}. However, a different delegate can be set at anytime.
33 * <p/>
34 * See also the <a href="http://www.slf4j.org/codes.html#substituteLogger">relevant
35 * error code</a> documentation.
36 *
37 * @author Chetan Mehrotra
38 */
39public class SubstituteLogger implements Logger {
40
41    private final String name;
42
43    private volatile Logger _delegate;
44
45    public SubstituteLogger(String name) {
46        this.name = name;
47    }
48
49    public String getName() {
50        return name;
51    }
52
53    public boolean isTraceEnabled() {
54        return delegate().isTraceEnabled();
55    }
56
57    public void trace(String msg) {
58        delegate().trace(msg);
59    }
60
61    public void trace(String format, Object arg) {
62        delegate().trace(format, arg);
63    }
64
65    public void trace(String format, Object arg1, Object arg2) {
66        delegate().trace(format, arg1, arg2);
67    }
68
69    public void trace(String format, Object... arguments) {
70        delegate().trace(format, arguments);
71    }
72
73    public void trace(String msg, Throwable t) {
74        delegate().trace(msg, t);
75    }
76
77    public boolean isTraceEnabled(Marker marker) {
78        return delegate().isTraceEnabled(marker);
79    }
80
81    public void trace(Marker marker, String msg) {
82        delegate().trace(marker, msg);
83    }
84
85    public void trace(Marker marker, String format, Object arg) {
86        delegate().trace(marker, format, arg);
87    }
88
89    public void trace(Marker marker, String format, Object arg1, Object arg2) {
90        delegate().trace(marker, format, arg1, arg2);
91    }
92
93    public void trace(Marker marker, String format, Object... arguments) {
94        delegate().trace(marker, format, arguments);
95    }
96
97    public void trace(Marker marker, String msg, Throwable t) {
98        delegate().trace(marker, msg, t);
99    }
100
101    public boolean isDebugEnabled() {
102        return delegate().isDebugEnabled();
103    }
104
105    public void debug(String msg) {
106        delegate().debug(msg);
107    }
108
109    public void debug(String format, Object arg) {
110        delegate().debug(format, arg);
111    }
112
113    public void debug(String format, Object arg1, Object arg2) {
114        delegate().debug(format, arg1, arg2);
115    }
116
117    public void debug(String format, Object... arguments) {
118        delegate().debug(format, arguments);
119    }
120
121    public void debug(String msg, Throwable t) {
122        delegate().debug(msg, t);
123    }
124
125    public boolean isDebugEnabled(Marker marker) {
126        return delegate().isDebugEnabled(marker);
127    }
128
129    public void debug(Marker marker, String msg) {
130        delegate().debug(marker, msg);
131    }
132
133    public void debug(Marker marker, String format, Object arg) {
134        delegate().debug(marker, format, arg);
135    }
136
137    public void debug(Marker marker, String format, Object arg1, Object arg2) {
138        delegate().debug(marker, format, arg1, arg2);
139    }
140
141    public void debug(Marker marker, String format, Object... arguments) {
142        delegate().debug(marker, format, arguments);
143    }
144
145    public void debug(Marker marker, String msg, Throwable t) {
146        delegate().debug(marker, msg, t);
147    }
148
149    public boolean isInfoEnabled() {
150        return delegate().isInfoEnabled();
151    }
152
153    public void info(String msg) {
154        delegate().info(msg);
155    }
156
157    public void info(String format, Object arg) {
158        delegate().info(format, arg);
159    }
160
161    public void info(String format, Object arg1, Object arg2) {
162        delegate().info(format, arg1, arg2);
163    }
164
165    public void info(String format, Object... arguments) {
166        delegate().info(format, arguments);
167    }
168
169    public void info(String msg, Throwable t) {
170        delegate().info(msg, t);
171    }
172
173    public boolean isInfoEnabled(Marker marker) {
174        return delegate().isInfoEnabled(marker);
175    }
176
177    public void info(Marker marker, String msg) {
178        delegate().info(marker, msg);
179    }
180
181    public void info(Marker marker, String format, Object arg) {
182        delegate().info(marker, format, arg);
183    }
184
185    public void info(Marker marker, String format, Object arg1, Object arg2) {
186        delegate().info(marker, format, arg1, arg2);
187    }
188
189    public void info(Marker marker, String format, Object... arguments) {
190        delegate().info(marker, format, arguments);
191    }
192
193    public void info(Marker marker, String msg, Throwable t) {
194        delegate().info(marker, msg, t);
195    }
196
197    public boolean isWarnEnabled() {
198        return delegate().isWarnEnabled();
199    }
200
201    public void warn(String msg) {
202        delegate().warn(msg);
203    }
204
205    public void warn(String format, Object arg) {
206        delegate().warn(format, arg);
207    }
208
209    public void warn(String format, Object arg1, Object arg2) {
210        delegate().warn(format, arg1, arg2);
211    }
212
213    public void warn(String format, Object... arguments) {
214        delegate().warn(format, arguments);
215    }
216
217    public void warn(String msg, Throwable t) {
218        delegate().warn(msg, t);
219    }
220
221    public boolean isWarnEnabled(Marker marker) {
222        return delegate().isWarnEnabled(marker);
223    }
224
225    public void warn(Marker marker, String msg) {
226        delegate().warn(marker, msg);
227    }
228
229    public void warn(Marker marker, String format, Object arg) {
230        delegate().warn(marker, format, arg);
231    }
232
233    public void warn(Marker marker, String format, Object arg1, Object arg2) {
234        delegate().warn(marker, format, arg1, arg2);
235    }
236
237    public void warn(Marker marker, String format, Object... arguments) {
238        delegate().warn(marker, format, arguments);
239    }
240
241    public void warn(Marker marker, String msg, Throwable t) {
242        delegate().warn(marker, msg, t);
243    }
244
245    public boolean isErrorEnabled() {
246        return delegate().isErrorEnabled();
247    }
248
249    public void error(String msg) {
250        delegate().error(msg);
251    }
252
253    public void error(String format, Object arg) {
254        delegate().error(format, arg);
255    }
256
257    public void error(String format, Object arg1, Object arg2) {
258        delegate().error(format, arg1, arg2);
259    }
260
261    public void error(String format, Object... arguments) {
262        delegate().error(format, arguments);
263    }
264
265    public void error(String msg, Throwable t) {
266        delegate().error(msg, t);
267    }
268
269    public boolean isErrorEnabled(Marker marker) {
270        return delegate().isErrorEnabled(marker);
271    }
272
273    public void error(Marker marker, String msg) {
274        delegate().error(marker, msg);
275    }
276
277    public void error(Marker marker, String format, Object arg) {
278        delegate().error(marker, format, arg);
279    }
280
281    public void error(Marker marker, String format, Object arg1, Object arg2) {
282        delegate().error(marker, format, arg1, arg2);
283    }
284
285    public void error(Marker marker, String format, Object... arguments) {
286        delegate().error(marker, format, arguments);
287    }
288
289    public void error(Marker marker, String msg, Throwable t) {
290        delegate().error(marker, msg, t);
291    }
292
293    @Override
294    public boolean equals(Object o) {
295        if (this == o)
296            return true;
297        if (o == null || getClass() != o.getClass())
298            return false;
299
300        SubstituteLogger that = (SubstituteLogger) o;
301
302        if (!name.equals(that.name))
303            return false;
304
305        return true;
306    }
307
308    @Override
309    public int hashCode() {
310        return name.hashCode();
311    }
312
313    /**
314     * Return the delegate logger instance if set. Otherwise, return a {@link NOPLogger}
315     * instance.
316     */
317    Logger delegate() {
318        return _delegate != null ? _delegate : NOPLogger.NOP_LOGGER;
319    }
320
321    /**
322     * Typically called after the {@link org.slf4j.LoggerFactory} initialization phase is completed.
323     * @param delegate
324     */
325    public void setDelegate(Logger delegate) {
326        this._delegate = delegate;
327    }
328}
329