18f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu/**
28f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * Copyright (c) 2004-2011 QOS.ch
38f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * All rights reserved.
48f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu *
58f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * Permission is hereby granted, free  of charge, to any person obtaining
68f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * a  copy  of this  software  and  associated  documentation files  (the
78f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * "Software"), to  deal in  the Software without  restriction, including
88f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * without limitation  the rights to  use, copy, modify,  merge, publish,
98f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * distribute,  sublicense, and/or sell  copies of  the Software,  and to
108f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * permit persons to whom the Software  is furnished to do so, subject to
118f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * the following conditions:
128f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu *
138f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * The  above  copyright  notice  and  this permission  notice  shall  be
148f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * included in all copies or substantial portions of the Software.
158f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu *
168f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
178f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
188f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
198f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
208f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
218f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
228f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
238f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu *
248f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu */
258f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcupackage org.slf4j.helpers;
268f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
278f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcuimport org.slf4j.Logger;
288f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcuimport org.slf4j.Marker;
298f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
308f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu/**
318f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * A logger implementation which logs via a delegate logger. By default, the delegate is a
328f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * {@link NOPLogger}. However, a different delegate can be set at anytime.
338f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * <p/>
348f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * See also the <a href="http://www.slf4j.org/codes.html#substituteLogger">relevant
358f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * error code</a> documentation.
368f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu *
378f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu * @author Chetan Mehrotra
388f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu */
398f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcupublic class SubstituteLogger implements Logger {
408f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
418f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    private final String name;
428f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
438f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    private volatile Logger _delegate;
448f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
458f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public SubstituteLogger(String name) {
468f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        this.name = name;
478f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
488f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
498f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public String getName() {
508f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return name;
518f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
528f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
538f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean isTraceEnabled() {
548f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return delegate().isTraceEnabled();
558f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
568f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
578f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void trace(String msg) {
588f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().trace(msg);
598f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
608f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
618f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void trace(String format, Object arg) {
628f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().trace(format, arg);
638f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
648f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
658f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void trace(String format, Object arg1, Object arg2) {
668f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().trace(format, arg1, arg2);
678f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
688f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
698f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void trace(String format, Object... arguments) {
708f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().trace(format, arguments);
718f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
728f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
738f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void trace(String msg, Throwable t) {
748f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().trace(msg, t);
758f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
768f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
778f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean isTraceEnabled(Marker marker) {
788f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return delegate().isTraceEnabled(marker);
798f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
808f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
818f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void trace(Marker marker, String msg) {
828f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().trace(marker, msg);
838f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
848f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
858f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void trace(Marker marker, String format, Object arg) {
868f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().trace(marker, format, arg);
878f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
888f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
898f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void trace(Marker marker, String format, Object arg1, Object arg2) {
908f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().trace(marker, format, arg1, arg2);
918f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
928f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
938f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void trace(Marker marker, String format, Object... arguments) {
948f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().trace(marker, format, arguments);
958f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
968f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
978f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void trace(Marker marker, String msg, Throwable t) {
988f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().trace(marker, msg, t);
998f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1008f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1018f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean isDebugEnabled() {
1028f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return delegate().isDebugEnabled();
1038f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1048f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1058f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void debug(String msg) {
1068f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().debug(msg);
1078f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1088f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1098f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void debug(String format, Object arg) {
1108f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().debug(format, arg);
1118f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1128f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1138f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void debug(String format, Object arg1, Object arg2) {
1148f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().debug(format, arg1, arg2);
1158f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1168f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1178f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void debug(String format, Object... arguments) {
1188f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().debug(format, arguments);
1198f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1208f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1218f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void debug(String msg, Throwable t) {
1228f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().debug(msg, t);
1238f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1248f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1258f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean isDebugEnabled(Marker marker) {
1268f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return delegate().isDebugEnabled(marker);
1278f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1288f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1298f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void debug(Marker marker, String msg) {
1308f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().debug(marker, msg);
1318f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1328f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1338f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void debug(Marker marker, String format, Object arg) {
1348f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().debug(marker, format, arg);
1358f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1368f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1378f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void debug(Marker marker, String format, Object arg1, Object arg2) {
1388f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().debug(marker, format, arg1, arg2);
1398f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1408f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1418f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void debug(Marker marker, String format, Object... arguments) {
1428f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().debug(marker, format, arguments);
1438f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1448f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1458f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void debug(Marker marker, String msg, Throwable t) {
1468f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().debug(marker, msg, t);
1478f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1488f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1498f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean isInfoEnabled() {
1508f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return delegate().isInfoEnabled();
1518f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1528f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1538f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void info(String msg) {
1548f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().info(msg);
1558f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1568f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1578f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void info(String format, Object arg) {
1588f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().info(format, arg);
1598f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1608f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1618f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void info(String format, Object arg1, Object arg2) {
1628f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().info(format, arg1, arg2);
1638f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1648f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1658f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void info(String format, Object... arguments) {
1668f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().info(format, arguments);
1678f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1688f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1698f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void info(String msg, Throwable t) {
1708f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().info(msg, t);
1718f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1728f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1738f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean isInfoEnabled(Marker marker) {
1748f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return delegate().isInfoEnabled(marker);
1758f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1768f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1778f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void info(Marker marker, String msg) {
1788f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().info(marker, msg);
1798f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1808f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1818f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void info(Marker marker, String format, Object arg) {
1828f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().info(marker, format, arg);
1838f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1848f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1858f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void info(Marker marker, String format, Object arg1, Object arg2) {
1868f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().info(marker, format, arg1, arg2);
1878f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1888f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1898f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void info(Marker marker, String format, Object... arguments) {
1908f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().info(marker, format, arguments);
1918f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1928f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1938f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void info(Marker marker, String msg, Throwable t) {
1948f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().info(marker, msg, t);
1958f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
1968f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
1978f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean isWarnEnabled() {
1988f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return delegate().isWarnEnabled();
1998f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2008f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2018f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void warn(String msg) {
2028f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().warn(msg);
2038f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2048f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2058f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void warn(String format, Object arg) {
2068f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().warn(format, arg);
2078f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2088f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2098f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void warn(String format, Object arg1, Object arg2) {
2108f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().warn(format, arg1, arg2);
2118f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2128f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2138f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void warn(String format, Object... arguments) {
2148f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().warn(format, arguments);
2158f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2168f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2178f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void warn(String msg, Throwable t) {
2188f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().warn(msg, t);
2198f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2208f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2218f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean isWarnEnabled(Marker marker) {
2228f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return delegate().isWarnEnabled(marker);
2238f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2248f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2258f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void warn(Marker marker, String msg) {
2268f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().warn(marker, msg);
2278f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2288f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2298f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void warn(Marker marker, String format, Object arg) {
2308f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().warn(marker, format, arg);
2318f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2328f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2338f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void warn(Marker marker, String format, Object arg1, Object arg2) {
2348f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().warn(marker, format, arg1, arg2);
2358f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2368f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2378f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void warn(Marker marker, String format, Object... arguments) {
2388f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().warn(marker, format, arguments);
2398f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2408f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2418f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void warn(Marker marker, String msg, Throwable t) {
2428f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().warn(marker, msg, t);
2438f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2448f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2458f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean isErrorEnabled() {
2468f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return delegate().isErrorEnabled();
2478f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2488f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2498f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void error(String msg) {
2508f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().error(msg);
2518f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2528f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2538f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void error(String format, Object arg) {
2548f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().error(format, arg);
2558f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2568f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2578f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void error(String format, Object arg1, Object arg2) {
2588f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().error(format, arg1, arg2);
2598f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2608f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2618f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void error(String format, Object... arguments) {
2628f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().error(format, arguments);
2638f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2648f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2658f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void error(String msg, Throwable t) {
2668f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().error(msg, t);
2678f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2688f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2698f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean isErrorEnabled(Marker marker) {
2708f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return delegate().isErrorEnabled(marker);
2718f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2728f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2738f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void error(Marker marker, String msg) {
2748f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().error(marker, msg);
2758f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2768f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2778f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void error(Marker marker, String format, Object arg) {
2788f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().error(marker, format, arg);
2798f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2808f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2818f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void error(Marker marker, String format, Object arg1, Object arg2) {
2828f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().error(marker, format, arg1, arg2);
2838f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2848f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2858f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void error(Marker marker, String format, Object... arguments) {
2868f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().error(marker, format, arguments);
2878f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2888f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2898f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void error(Marker marker, String msg, Throwable t) {
2908f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        delegate().error(marker, msg, t);
2918f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
2928f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
2938f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    @Override
2948f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public boolean equals(Object o) {
29531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (this == o)
29631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return true;
29731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (o == null || getClass() != o.getClass())
29831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return false;
2998f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
3008f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        SubstituteLogger that = (SubstituteLogger) o;
3018f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
30231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (!name.equals(that.name))
30331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return false;
3048f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
3058f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return true;
3068f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
3078f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
3088f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    @Override
3098f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public int hashCode() {
3108f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return name.hashCode();
3118f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
3128f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
3138f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    /**
3148f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu     * Return the delegate logger instance if set. Otherwise, return a {@link NOPLogger}
3158f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu     * instance.
3168f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu     */
3178f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    Logger delegate() {
3188f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        return _delegate != null ? _delegate : NOPLogger.NOP_LOGGER;
3198f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
3208f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu
3218f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    /**
3228f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu     * Typically called after the {@link org.slf4j.LoggerFactory} initialization phase is completed.
3238f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu     * @param delegate
3248f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu     */
3258f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    public void setDelegate(Logger delegate) {
3268f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu        this._delegate = delegate;
3278f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu    }
3288f28a83eb4f6b81dd46e53052e17df3aaf602347Ceki Gulcu}
329