001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      https://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018package org.apache.commons.logging;
019
020/**
021 * A simple logging interface abstracting logging APIs.  In order to be
022 * instantiated successfully by {@link LogFactory}, classes that implement
023 * this interface must have a constructor that takes a single String
024 * parameter representing the "name" of this Log.
025 * <p>
026 * The six logging levels used by {@code Log} are (in order):
027 * </p>
028 * <ol>
029 * <li>trace (the least serious)</li>
030 * <li>debug</li>
031 * <li>info</li>
032 * <li>warn</li>
033 * <li>error</li>
034 * <li>fatal (the most serious)</li>
035 * </ol>
036 * <p>
037 * The mapping of these log levels to the concepts used by the underlying
038 * logging system is implementation dependent.
039 * The implementation should ensure, though, that this ordering behaves
040 * as expected.
041 * </p>
042 * <p>
043 * Performance is often a logging concern.
044 * By examining the appropriate property,
045 * a component can avoid expensive operations (producing information
046 * to be logged).
047 * </p>
048 * <p>
049 * For example:
050 * </p>
051 * <pre>
052 *    if (log.isDebugEnabled()) {
053 *        ... do something expensive ...
054 *        log.debug(theResult);
055 *    }
056 * </pre>
057 * <p>
058 * Configuration of the underlying logging system will generally be done
059 * external to the Logging APIs, through whatever mechanism is supported by
060 * that system.
061 * </p>
062 */
063public interface Log {
064
065    /**
066     * Logs a message with debug log level.
067     *
068     * @param message log this message
069     */
070    void debug(Object message);
071
072    /**
073     * Logs an error with debug log level.
074     *
075     * @param message log this message
076     * @param t log this cause
077     */
078    void debug(Object message, Throwable t);
079
080    /**
081     * Logs a message with error log level.
082     *
083     * @param message log this message
084     */
085    void error(Object message);
086
087    /**
088     * Logs an error with error log level.
089     *
090     * @param message log this message
091     * @param t log this cause
092     */
093    void error(Object message, Throwable t);
094
095    /**
096     * Logs a message with fatal log level.
097     *
098     * @param message log this message
099     */
100    void fatal(Object message);
101
102    /**
103     * Logs an error with fatal log level.
104     *
105     * @param message log this message
106     * @param t log this cause
107     */
108    void fatal(Object message, Throwable t);
109
110    /**
111     * Logs a message with info log level.
112     *
113     * @param message log this message
114     */
115    void info(Object message);
116
117    /**
118     * Logs an error with info log level.
119     *
120     * @param message log this message
121     * @param t log this cause
122     */
123    void info(Object message, Throwable t);
124
125    /**
126     * Is debug logging currently enabled?
127     * <p>
128     * Call this method to prevent having to perform expensive operations
129     * (for example, {@code String} concatenation)
130     * when the log level is more than debug.
131     *
132     * @return true if debug is enabled in the underlying logger.
133     */
134    boolean isDebugEnabled();
135
136    /**
137     * Is error logging currently enabled?
138     * <p>
139     * Call this method to prevent having to perform expensive operations
140     * (for example, {@code String} concatenation)
141     * when the log level is more than error.
142     *
143     * @return true if error is enabled in the underlying logger.
144     */
145    boolean isErrorEnabled();
146
147    /**
148     * Is fatal logging currently enabled?
149     * <p>
150     * Call this method to prevent having to perform expensive operations
151     * (for example, {@code String} concatenation)
152     * when the log level is more than fatal.
153     *
154     * @return true if fatal is enabled in the underlying logger.
155     */
156    boolean isFatalEnabled();
157
158    /**
159     * Is info logging currently enabled?
160     * <p>
161     * Call this method to prevent having to perform expensive operations
162     * (for example, {@code String} concatenation)
163     * when the log level is more than info.
164     *
165     * @return true if info is enabled in the underlying logger.
166     */
167    boolean isInfoEnabled();
168
169    /**
170     * Is trace logging currently enabled?
171     * <p>
172     * Call this method to prevent having to perform expensive operations
173     * (for example, {@code String} concatenation)
174     * when the log level is more than trace.
175     *
176     * @return true if trace is enabled in the underlying logger.
177     */
178    boolean isTraceEnabled();
179
180    /**
181     * Is warn logging currently enabled?
182     * <p>
183     * Call this method to prevent having to perform expensive operations
184     * (for example, {@code String} concatenation)
185     * when the log level is more than warn.
186     *
187     * @return true if warn is enabled in the underlying logger.
188     */
189    boolean isWarnEnabled();
190
191    /**
192     * Logs a message with trace log level.
193     *
194     * @param message log this message
195     */
196    void trace(Object message);
197
198    /**
199     * Logs an error with trace log level.
200     *
201     * @param message log this message
202     * @param t log this cause
203     */
204    void trace(Object message, Throwable t);
205
206    /**
207     * Logs a message with warn log level.
208     *
209     * @param message log this message
210     */
211    void warn(Object message);
212
213    /**
214     * Logs an error with warn log level.
215     *
216     * @param message log this message
217     * @param t log this cause
218     */
219    void warn(Object message, Throwable t);
220}