1dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis/*
2dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * Copyright (c) 2004-2013 QOS.ch
3dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * All rights reserved.
4dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *
5dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * Permission is hereby granted, free  of charge, to any person obtaining
6dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * a  copy  of this  software  and  associated  documentation files  (the
7dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * "Software"), to  deal in  the Software without  restriction, including
8dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * without limitation  the rights to  use, copy, modify,  merge, publish,
9dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * distribute,  sublicense, and/or sell  copies of  the Software,  and to
10dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * permit persons to whom the Software  is furnished to do so, subject to
11dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * the following conditions:
12dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *
13dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * The  above  copyright  notice  and  this permission  notice  shall  be
14dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * included in all copies or substantial portions of the Software.
15dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *
16dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
17dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
18dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
19dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
22dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *
24dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis */
25dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landispackage org.slf4j.impl;
26dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
27dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landisimport android.util.Log;
28dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landisimport org.slf4j.helpers.FormattingTuple;
29dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landisimport org.slf4j.helpers.MarkerIgnoringBase;
30dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landisimport org.slf4j.helpers.MessageFormatter;
31dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
32dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis/**
33dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <p>A simple implementation that delegates all log requests to the Google Android
34dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * logging facilities. Note that this logger does not support {@link org.slf4j.Marker}.
35dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * Methods taking marker data as parameter simply invoke the eponymous method
36dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * without the Marker argument, discarding any marker data in the process.</p>
37dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *
38dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <p>The logging levels specified for SLF4J can be almost directly mapped to
39dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * the levels that exist in the Google Android platform. The following table
40dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * shows the mapping implemented by this logger.</p>
41dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *
42dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <table border="1">
43dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><th><b>SLF4J<b></th><th><b>Android</b></th></tr>
44dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><td>TRACE</td><td>{@link android.util.Log#VERBOSE}</td></tr>
45dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><td>DEBUG</td><td>{@link android.util.Log#DEBUG}</td></tr>
46dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><td>INFO</td><td>{@link android.util.Log#INFO}</td></tr>
47dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><td>WARN</td><td>{@link android.util.Log#WARN}</td></tr>
48dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><td>ERROR</td><td>{@link android.util.Log#ERROR}</td></tr>
49dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * </table>
50dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *
51dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <p>Use loggers as usual:
52dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <ul>
53dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *     <li>
54dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *         Declare a logger<br/>
55dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *         <code>private static final Logger logger = LoggerFactory.getLogger(MyClass.class);</code>
56dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *     </li>
57dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *     <li>
58dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *         Invoke logging methods, e.g.,<br/>
59dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *         <code>logger.debug("Some log message. Details: {}", someObject);</code><br/>
60dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *         <code>logger.debug("Some log message with varargs. Details: {}, {}, {}", someObject1, someObject2, someObject3);</code>
61dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *     </li>
62dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * </ul>
63dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * </p>
64dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *
65dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <p>Logger instances created using the LoggerFactory are named either according to the name
66dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * or the fully qualified class name of the class given as a parameter.
67dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * Each logger name will be used as the log message tag on the Android platform.
68dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * However, tag names cannot be longer than 23 characters so if logger name exceeds this limit then
69dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * it will be truncated by the LoggerFactory. The following examples illustrate this.
70dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <table border="1">
71dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><th><b>Original Name<b></th><th><b>Truncated Name</b></th></tr>
72dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><td>org.example.myproject.mypackage.MyClass</td><td>o*.e*.m*.m*.MyClass</td></tr>
73dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><td>o.e.myproject.mypackage.MyClass</td><td>o.e.m*.m*.MyClass</td></tr>
74dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><td>org.example.ThisNameIsWayTooLongAndWillBeTruncated</td><td>*LongAndWillBeTruncated</td></tr>
75dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * <tr><td>ThisNameIsWayTooLongAndWillBeTruncated</td><td>*LongAndWillBeTruncated</td></tr>
76dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * </table>
77dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * </p>
78dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis *
79dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis * @author Andrey Korzhevskiy <a.korzhevskiy@gmail.com>
80dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis */
81dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landisclass AndroidLoggerAdapter extends MarkerIgnoringBase {
82dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    private static final long serialVersionUID = -1227274521521287937L;
83dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
84dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
85dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
86dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Package access allows only {@link AndroidLoggerFactory} to instantiate
87dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * SimpleLogger instances.
88dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
89dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    AndroidLoggerAdapter(String tag) {
90dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        this.name = tag;
91dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
92dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
93dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
94dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Is this logger instance enabled for the VERBOSE level?
95dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
96dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @return True if this Logger is enabled for level VERBOSE, false otherwise.
97dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
98dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public boolean isTraceEnabled() {
99dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        return isLoggable(Log.VERBOSE);
100dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
101dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
102dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
103dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message object at level VERBOSE.
104dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
105dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param msg
106dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          - the message object to be logged
107dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
108dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void trace(String msg) {
109dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        log(Log.VERBOSE, msg, null);
110dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
111dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
112dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
113dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at level VERBOSE according to the specified format and
114dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * argument.
115dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
116dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
117dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
118dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for level VERBOSE.
119dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
120dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
121dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
122dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
123dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg
124dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the argument
125dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
126dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void trace(String format, Object arg) {
127dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.VERBOSE, format, arg);
128dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
129dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
130dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
131dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at level VERBOSE according to the specified format and
132dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * arguments.
133dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
134dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
135dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
136dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the VERBOSE level.
137dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
138dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
139dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
140dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
141dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg1
142dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the first argument
143dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg2
144dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the second argument
145dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
146dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void trace(String format, Object arg1, Object arg2) {
147dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.VERBOSE, format, arg1, arg2);
148dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
149dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
150dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
151dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at level VERBOSE according to the specified format and
152dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * arguments.
153dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
154dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
155dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
156dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the VERBOSE level.
157dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
158dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
159dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
160dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
161dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param argArray
162dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          an array of arguments
163dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
164dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void trace(String format, Object... argArray) {
165dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.VERBOSE, format, argArray);
166dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
167dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
168dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
169dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log an exception (throwable) at level VERBOSE with an accompanying message.
170dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
171dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param msg
172dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the message accompanying the exception
173dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param t
174dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the exception (throwable) to log
175dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
176dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void trace(String msg, Throwable t) {
177dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        log(Log.VERBOSE, msg, t);
178dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
179dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
180dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
181dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Is this logger instance enabled for the DEBUG level?
182dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
183dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @return True if this Logger is enabled for level DEBUG, false otherwise.
184dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
185dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public boolean isDebugEnabled() {
186dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        return isLoggable(Log.DEBUG);
187dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
188dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
189dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
190dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message object at level DEBUG.
191dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
192dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param msg
193dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          - the message object to be logged
194dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
195dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void debug(String msg) {
196dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        log(Log.DEBUG, msg, null);
197dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
198dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
199dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
200dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at level DEBUG according to the specified format and argument.
201dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
202dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
203dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
204dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for level DEBUG.
205dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
206dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
207dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
208dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
209dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg
210dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the argument
211dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
212dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void debug(String format, Object arg) {
213dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.DEBUG, format, arg);
214dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
215dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
216dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
217dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at level DEBUG according to the specified format and
218dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * arguments.
219dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
220dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
221dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
222dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the DEBUG level.
223dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
224dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
225dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
226dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
227dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg1
228dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the first argument
229dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg2
230dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the second argument
231dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
232dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void debug(String format, Object arg1, Object arg2) {
233dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.DEBUG, format, arg1, arg2);
234dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
235dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
236dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
237dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at level DEBUG according to the specified format and
238dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * arguments.
239dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
240dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
241dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
242dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the DEBUG level.
243dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
244dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
245dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
246dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
247dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param argArray
248dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          an array of arguments
249dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
250dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void debug(String format, Object... argArray) {
251dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.DEBUG, format, argArray);
252dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
253dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
254dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
255dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log an exception (throwable) at level DEBUG with an accompanying message.
256dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
257dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param msg
258dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the message accompanying the exception
259dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param t
260dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the exception (throwable) to log
261dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
262dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void debug(String msg, Throwable t) {
263dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        log(Log.VERBOSE, msg, t);
264dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
265dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
266dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
267dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Is this logger instance enabled for the INFO level?
268dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
269dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @return True if this Logger is enabled for the INFO level, false otherwise.
270dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
271dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public boolean isInfoEnabled() {
272dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        return isLoggable(Log.INFO);
273dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
274dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
275dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
276dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message object at the INFO level.
277dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
278dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param msg
279dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          - the message object to be logged
280dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
281dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void info(String msg) {
282dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        log(Log.INFO, msg, null);
283dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
284dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
285dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
286dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at level INFO according to the specified format and argument.
287dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
288dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
289dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
290dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the INFO level.
291dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
292dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
293dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
294dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
295dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg
296dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the argument
297dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
298dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void info(String format, Object arg) {
299dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.INFO, format, arg);
300dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
301dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
302dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
303dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at the INFO level according to the specified format and
304dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * arguments.
305dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
306dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
307dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
308dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the INFO level.
309dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
310dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
311dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
312dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
313dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg1
314dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the first argument
315dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg2
316dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the second argument
317dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
318dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void info(String format, Object arg1, Object arg2) {
319dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.INFO, format, arg1, arg2);
320dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
321dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
322dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
323dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at level INFO according to the specified format and
324dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * arguments.
325dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
326dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
327dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
328dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the INFO level.
329dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
330dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
331dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
332dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
333dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param argArray
334dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          an array of arguments
335dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
336dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void info(String format, Object... argArray) {
337dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.INFO, format, argArray);
338dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
339dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
340dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
341dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log an exception (throwable) at the INFO level with an accompanying
342dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * message.
343dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
344dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param msg
345dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the message accompanying the exception
346dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param t
347dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the exception (throwable) to log
348dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
349dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void info(String msg, Throwable t) {
350dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        log(Log.INFO, msg, t);
351dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
352dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
353dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
354dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Is this logger instance enabled for the WARN level?
355dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
356dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @return True if this Logger is enabled for the WARN level, false
357dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *         otherwise.
358dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
359dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public boolean isWarnEnabled() {
360dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        return isLoggable(Log.WARN);
361dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
362dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
363dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
364dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message object at the WARN level.
365dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
366dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param msg
367dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          - the message object to be logged
368dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
369dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void warn(String msg) {
370dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        log(Log.WARN, msg, null);
371dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
372dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
373dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
374dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at the WARN level according to the specified format and
375dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * argument.
376dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
377dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
378dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
379dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the WARN level.
380dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
381dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
382dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
383dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
384dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg
385dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the argument
386dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
387dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void warn(String format, Object arg) {
388dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.WARN, format, arg);
389dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
390dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
391dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
392dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at the WARN level according to the specified format and
393dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * arguments.
394dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
395dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
396dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
397dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the WARN level.
398dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
399dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
400dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
401dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
402dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg1
403dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the first argument
404dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg2
405dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the second argument
406dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
407dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void warn(String format, Object arg1, Object arg2) {
408dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.WARN, format, arg1, arg2);
409dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
410dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
411dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
412dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at level WARN according to the specified format and
413dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * arguments.
414dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
415dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
416dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
417dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the WARN level.
418dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
419dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
420dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
421dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
422dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param argArray
423dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          an array of arguments
424dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
425dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void warn(String format, Object... argArray) {
426dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.WARN, format, argArray);
427dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
428dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
429dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
430dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log an exception (throwable) at the WARN level with an accompanying
431dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * message.
432dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
433dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param msg
434dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the message accompanying the exception
435dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param t
436dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the exception (throwable) to log
437dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
438dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void warn(String msg, Throwable t) {
439dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        log(Log.WARN, msg, t);
440dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
441dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
442dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
443dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Is this logger instance enabled for level ERROR?
444dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
445dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @return True if this Logger is enabled for level ERROR, false otherwise.
446dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
447dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public boolean isErrorEnabled() {
448dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        return isLoggable(Log.ERROR);
449dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
450dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
451dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
452dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message object at the ERROR level.
453dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
454dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param msg
455dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          - the message object to be logged
456dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
457dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void error(String msg) {
458dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        log(Log.ERROR, msg, null);
459dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
460dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
461dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
462dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at the ERROR level according to the specified format and
463dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * argument.
464dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
465dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
466dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
467dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the ERROR level.
468dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
469dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
470dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
471dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
472dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg
473dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the argument
474dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
475dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void error(String format, Object arg) {
476dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.ERROR, format, arg);
477dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
478dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
479dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
480dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at the ERROR level according to the specified format and
481dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * arguments.
482dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
483dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
484dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
485dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the ERROR level.
486dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
487dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
488dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
489dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
490dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg1
491dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the first argument
492dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param arg2
493dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the second argument
494dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
495dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void error(String format, Object arg1, Object arg2) {
496dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.ERROR, format, arg1, arg2);
497dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
498dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
499dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
500dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log a message at level ERROR according to the specified format and
501dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * arguments.
502dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
503dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * <p>
504dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * This form avoids superfluous object creation when the logger is disabled
505dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * for the ERROR level.
506dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * </p>
507dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
508dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param format
509dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the format string
510dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param argArray
511dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          an array of arguments
512dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
513dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void error(String format, Object... argArray) {
514dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        formatAndLog(Log.ERROR, format, argArray);
515dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
516dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
517dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    /**
518dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * Log an exception (throwable) at the ERROR level with an accompanying
519dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * message.
520dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *
521dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param msg
522dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the message accompanying the exception
523dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     * @param t
524dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     *          the exception (throwable) to log
525dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis     */
526dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    public void error(String msg, Throwable t) {
527dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        log(Log.ERROR, msg, t);
528dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
529dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
530dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    private void formatAndLog(int priority, String format, Object... argArray) {
531dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        if (isLoggable(priority)) {
532dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis            FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
533dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis            _log(priority, ft.getMessage(), ft.getThrowable());
534dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        }
535dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
536dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
537dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    private void log(int priority, String message, Throwable throwable) {
538dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        if (isLoggable(priority)) {
539dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis            _log(priority, message, throwable);
540dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        }
541dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
542dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
543dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    private boolean isLoggable(int priority) {
544dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        return Log.isLoggable(name, priority);
545dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
546dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis
547dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    private void _log(int priority, String message, Throwable throwable) {
548dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        if (throwable != null) {
549dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis            message += '\n' + Log.getStackTraceString(throwable);
550dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        }
551dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis        Log.println(priority, name, message);
552dd7ec6b31e6235b73a80a231bf4a3236da4f866cJeremy Landis    }
553c75ac9a06d51da591a2217b32df347c11bfec40cAndrey Korzhevskiy}