17ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu/**
27ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * Copyright (c) 2004-2011 QOS.ch
388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * All rights reserved.
488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu *
57ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * Permission is hereby granted, free  of charge, to any person obtaining
67ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * a  copy  of this  software  and  associated  documentation files  (the
788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * "Software"), to  deal in  the Software without  restriction, including
888c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * without limitation  the rights to  use, copy, modify,  merge, publish,
97ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * distribute,  sublicense, and/or sell  copies of  the Software,  and to
107ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * permit persons to whom the Software  is furnished to do so, subject to
117ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * the following conditions:
127ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
137ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * The  above  copyright  notice  and  this permission  notice  shall  be
147ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * included in all copies or substantial portions of the Software.
1588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu *
1688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
1788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
187ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
197ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
207ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
217ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
227ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu *
2488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu */
2588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcupackage org.slf4j.impl;
2688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
2788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport java.util.logging.Level;
2888c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport java.util.logging.LogRecord;
2988c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
3088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.Logger;
3188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.Marker;
323c0ab3466b6fa6e915974c72558d64c570734700Ceki Gulcuimport org.slf4j.helpers.FormattingTuple;
3388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.helpers.MarkerIgnoringBase;
3488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.helpers.MessageFormatter;
3588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.spi.LocationAwareLogger;
3688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
3788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu/**
389f10490a05f7344f4b3ef657e8991f5d51934e2fCeki Gulcu * A wrapper over {@link java.util.logging.Logger java.util.logging.Logger} in
399f10490a05f7344f4b3ef657e8991f5d51934e2fCeki Gulcu * conformity with the {@link Logger} interface. Note that the logging levels
409f10490a05f7344f4b3ef657e8991f5d51934e2fCeki Gulcu * mentioned in this class refer to those defined in the java.util.logging
4188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * package.
4288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu *
4388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * @author Ceki Gülcü
4488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * @author Peter Royal
4588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu */
4631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcupublic final class JDK14LoggerAdapter extends MarkerIgnoringBase implements LocationAwareLogger {
4731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
4831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private static final long serialVersionUID = -8053026990503422791L;
4931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
5031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    transient final java.util.logging.Logger logger;
5131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
5231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    // WARN: JDK14LoggerAdapter constructor should have only package access so
5331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    // that only JDK14LoggerFactory be able to create one.
5431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    JDK14LoggerAdapter(java.util.logging.Logger logger) {
5531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        this.logger = logger;
5631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        this.name = logger.getName();
5731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
5831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
5931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
6031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Is this logger instance enabled for the FINEST level?
6131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
6231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @return True if this Logger is enabled for level FINEST, false otherwise.
6331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
6431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public boolean isTraceEnabled() {
6531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return logger.isLoggable(Level.FINEST);
6631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
6731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
6831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
6931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message object at level FINEST.
7031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
7131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
7231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          - the message object to be logged
7331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
7431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void trace(String msg) {
7531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.FINEST)) {
7631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.FINEST, msg, null);
7731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
7831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
7931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
8031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
8131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at level FINEST according to the specified format and
8231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * argument.
8331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
8431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
8531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
8631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for level FINEST.
8731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
8831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
8931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
9031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
9131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg
9231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the argument
9331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
9431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void trace(String format, Object arg) {
9531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.FINEST)) {
9631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.format(format, arg);
9731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.FINEST, ft.getMessage(), ft.getThrowable());
9831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
9931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
10031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
10131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
10231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at level FINEST according to the specified format and
10331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * arguments.
10431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
10531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
10631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
10731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the FINEST level.
10831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
10931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
11031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
11131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
11231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg1
11331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the first argument
11431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg2
11531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the second argument
11631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
11731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void trace(String format, Object arg1, Object arg2) {
11831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.FINEST)) {
11931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
12031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.FINEST, ft.getMessage(), ft.getThrowable());
12131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
12231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
12331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
12431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
12531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at level FINEST according to the specified format and
12631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * arguments.
12731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
12831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
12931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
13031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the FINEST level.
13131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
13231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
13331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
13431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
13531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param argArray
13631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          an array of arguments
13731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
13831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void trace(String format, Object... argArray) {
13931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.FINEST)) {
14031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
14131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.FINEST, ft.getMessage(), ft.getThrowable());
14231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
14331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
14431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
14531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
14631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log an exception (throwable) at level FINEST with an accompanying message.
14731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
14831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
14931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the message accompanying the exception
15031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param t
15131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the exception (throwable) to log
15231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
15331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void trace(String msg, Throwable t) {
15431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.FINEST)) {
15531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.FINEST, msg, t);
15631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
15731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
15831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
15931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
16031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Is this logger instance enabled for the FINE level?
16131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
16231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @return True if this Logger is enabled for level FINE, false otherwise.
16331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
16431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public boolean isDebugEnabled() {
16531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return logger.isLoggable(Level.FINE);
16631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
16731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
16831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
16931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message object at level FINE.
17031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
17131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
17231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          - the message object to be logged
17331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
17431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void debug(String msg) {
17531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.FINE)) {
17631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.FINE, msg, null);
17731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
17831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
17931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
18031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
18131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at level FINE according to the specified format and argument.
18231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
18331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
18431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
18531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for level FINE.
18631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
18731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
18831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
18931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
19031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg
19131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the argument
19231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
19331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void debug(String format, Object arg) {
19431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.FINE)) {
19531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.format(format, arg);
19631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.FINE, ft.getMessage(), ft.getThrowable());
19731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
19831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
19931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
20031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
20131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at level FINE according to the specified format and
20231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * arguments.
20331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
20431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
20531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
20631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the FINE level.
20731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
20831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
20931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
21031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
21131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg1
21231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the first argument
21331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg2
21431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the second argument
21531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
21631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void debug(String format, Object arg1, Object arg2) {
21731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.FINE)) {
21831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
21931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.FINE, ft.getMessage(), ft.getThrowable());
22031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
22131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
22231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
22331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
22431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at level FINE according to the specified format and
22531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * arguments.
22631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
22731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
22831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
22931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the FINE level.
23031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
23131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
23231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
23331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
23431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param argArray
23531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          an array of arguments
23631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
23731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void debug(String format, Object... argArray) {
23831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.FINE)) {
23931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
24031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.FINE, ft.getMessage(), ft.getThrowable());
24131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
24231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
24331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
24431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
24531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log an exception (throwable) at level FINE with an accompanying message.
24631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
24731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
24831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the message accompanying the exception
24931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param t
25031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the exception (throwable) to log
25131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
25231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void debug(String msg, Throwable t) {
25331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.FINE)) {
25431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.FINE, msg, t);
25531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
25631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
25731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
25831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
25931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Is this logger instance enabled for the INFO level?
26031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
26131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @return True if this Logger is enabled for the INFO level, false otherwise.
26231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
26331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public boolean isInfoEnabled() {
26431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return logger.isLoggable(Level.INFO);
26531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
26631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
26731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
26831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message object at the INFO level.
26931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
27031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
27131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          - the message object to be logged
27231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
27331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void info(String msg) {
27431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.INFO)) {
27531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.INFO, msg, null);
27631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
27731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
27831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
27931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
28031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at level INFO according to the specified format and argument.
28131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
28231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
28331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
28431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the INFO level.
28531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
28631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
28731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
28831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
28931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg
29031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the argument
29131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
29231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void info(String format, Object arg) {
29331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.INFO)) {
29431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.format(format, arg);
29531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.INFO, ft.getMessage(), ft.getThrowable());
29631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
29731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
29831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
29931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
30031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at the INFO level according to the specified format and
30131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * arguments.
30231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
30331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
30431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
30531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the INFO level.
30631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
30731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
30831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
30931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
31031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg1
31131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the first argument
31231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg2
31331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the second argument
31431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
31531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void info(String format, Object arg1, Object arg2) {
31631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.INFO)) {
31731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
31831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.INFO, ft.getMessage(), ft.getThrowable());
31931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
32031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
32131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
32231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
32331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at level INFO according to the specified format and
32431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * arguments.
32531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
32631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
32731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
32831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the INFO level.
32931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
33031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
33131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
33231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
33331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param argArray
33431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          an array of arguments
33531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
33631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void info(String format, Object... argArray) {
33731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.INFO)) {
33831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
33931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.INFO, ft.getMessage(), ft.getThrowable());
34031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
34131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
34231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
34331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
34431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log an exception (throwable) at the INFO level with an accompanying
34531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * message.
34631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
34731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
34831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the message accompanying the exception
34931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param t
35031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the exception (throwable) to log
35131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
35231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void info(String msg, Throwable t) {
35331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.INFO)) {
35431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.INFO, msg, t);
35531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
35631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
35731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
35831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
35931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Is this logger instance enabled for the WARNING level?
36031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
36131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @return True if this Logger is enabled for the WARNING level, false
36231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *         otherwise.
36331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
36431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public boolean isWarnEnabled() {
36531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return logger.isLoggable(Level.WARNING);
36631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
36731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
36831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
36931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message object at the WARNING level.
37031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
37131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
37231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          - the message object to be logged
37331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
37431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void warn(String msg) {
37531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.WARNING)) {
37631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.WARNING, msg, null);
37731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
37831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
37931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
38031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
38131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at the WARNING level according to the specified format and
38231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * argument.
38331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
38431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
38531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
38631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the WARNING level.
38731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
38831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
38931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
39031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
39131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg
39231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the argument
39331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
39431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void warn(String format, Object arg) {
39531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.WARNING)) {
39631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.format(format, arg);
39731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.WARNING, ft.getMessage(), ft.getThrowable());
39831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
39931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
40031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
40131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
40231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at the WARNING level according to the specified format and
40331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * arguments.
40431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
40531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
40631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
40731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the WARNING level.
40831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
40931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
41031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
41131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
41231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg1
41331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the first argument
41431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg2
41531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the second argument
41631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
41731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void warn(String format, Object arg1, Object arg2) {
41831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.WARNING)) {
41931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
42031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.WARNING, ft.getMessage(), ft.getThrowable());
42131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
42231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
42331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
42431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
42531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at level WARNING according to the specified format and
42631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * arguments.
42731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
42831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
42931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
43031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the WARNING level.
43131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
43231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
43331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
43431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
43531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param argArray
43631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          an array of arguments
43731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
43831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void warn(String format, Object... argArray) {
43931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.WARNING)) {
44031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.arrayFormat(format, argArray);
44131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.WARNING, ft.getMessage(), ft.getThrowable());
44231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
44331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
44431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
44531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
44631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log an exception (throwable) at the WARNING level with an accompanying
44731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * message.
44831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
44931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
45031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the message accompanying the exception
45131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param t
45231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the exception (throwable) to log
45331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
45431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void warn(String msg, Throwable t) {
45531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.WARNING)) {
45631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.WARNING, msg, t);
45731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
45831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
45931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
46031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
46131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Is this logger instance enabled for level SEVERE?
46231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
46331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @return True if this Logger is enabled for level SEVERE, false otherwise.
46431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
46531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public boolean isErrorEnabled() {
46631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return logger.isLoggable(Level.SEVERE);
46731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
46831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
46931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
47031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message object at the SEVERE level.
47131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
47231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
47331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          - the message object to be logged
47431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
47531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void error(String msg) {
47631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.SEVERE)) {
47731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.SEVERE, msg, null);
47831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
47931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
48031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
48131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
48231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at the SEVERE level according to the specified format and
48331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * argument.
48431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
48531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
48631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
48731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the SEVERE level.
48831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
48931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
49031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
49131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
49231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg
49331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the argument
49431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
49531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void error(String format, Object arg) {
49631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.SEVERE)) {
49731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.format(format, arg);
49831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.SEVERE, ft.getMessage(), ft.getThrowable());
49931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
50031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
50131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
50231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
50331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at the SEVERE level according to the specified format and
50431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * arguments.
50531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
50631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
50731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
50831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the SEVERE level.
50931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
51031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
51131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
51231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
51331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg1
51431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the first argument
51531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arg2
51631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the second argument
51731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
51831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void error(String format, Object arg1, Object arg2) {
51931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.SEVERE)) {
52031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.format(format, arg1, arg2);
52131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.SEVERE, ft.getMessage(), ft.getThrowable());
52231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
52331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
52431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
52531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
52631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a message at level SEVERE according to the specified format and
52731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * arguments.
52831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
52931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
53031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This form avoids superfluous object creation when the logger is disabled
53131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * for the SEVERE level.
53231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * </p>
53331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
53431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param format
53531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the format string
53631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param arguments
53731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          an array of arguments
53831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
53931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void error(String format, Object... arguments) {
54031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.SEVERE)) {
54131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            FormattingTuple ft = MessageFormatter.arrayFormat(format, arguments);
54231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.SEVERE, ft.getMessage(), ft.getThrowable());
54331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
54431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
54531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
54631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
54731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log an exception (throwable) at the SEVERE level with an accompanying
54831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * message.
54931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
55031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
55131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the message accompanying the exception
55231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param t
55331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the exception (throwable) to log
55431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
55531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void error(String msg, Throwable t) {
55631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(Level.SEVERE)) {
55731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(SELF, Level.SEVERE, msg, t);
55831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
55931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
56031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
56131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
56231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log the message at the specified level with the specified throwable if any.
56331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * This method creates a LogRecord and fills in caller date before calling
56431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * this instance's JDK14 logger.
56531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
56631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * See bug report #13 for more details.
56731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
56831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param level
56931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param msg
57031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param t
57131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
57231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void log(String callerFQCN, Level level, String msg, Throwable t) {
57331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        // millis and thread are filled by the constructor
57431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        LogRecord record = new LogRecord(level, msg);
57531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        record.setLoggerName(getName());
57631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        record.setThrown(t);
57731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        fillCallerData(callerFQCN, record);
57831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        logger.log(record);
57931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
58031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
58131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
58231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    static String SELF = JDK14LoggerAdapter.class.getName();
58331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    static String SUPER = MarkerIgnoringBase.class.getName();
58431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
58531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
58631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Fill in caller data if possible.
58731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
58831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param record
58931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          The record to update
59031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
59131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    final private void fillCallerData(String callerFQCN, LogRecord record) {
59231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        StackTraceElement[] steArray = new Throwable().getStackTrace();
59331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
59431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        int selfIndex = -1;
59531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        for (int i = 0; i < steArray.length; i++) {
59631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            final String className = steArray[i].getClassName();
59731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            if (className.equals(callerFQCN) || className.equals(SUPER)) {
59831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                selfIndex = i;
59931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                break;
60031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            }
60131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
60231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
60331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        int found = -1;
60431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        for (int i = selfIndex + 1; i < steArray.length; i++) {
60531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            final String className = steArray[i].getClassName();
60631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            if (!(className.equals(callerFQCN) || className.equals(SUPER))) {
60731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                found = i;
60831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                break;
60931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            }
61031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
61131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
61231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (found != -1) {
61331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            StackTraceElement ste = steArray[found];
61431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            // setting the class name has the side effect of setting
61531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            // the needToInferCaller variable to false.
61631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            record.setSourceClassName(ste.getClassName());
61731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            record.setSourceMethodName(ste.getMethodName());
61831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
61931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
62031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
62131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void log(Marker marker, String callerFQCN, int level, String message, Object[] argArray, Throwable t) {
62231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        Level julLevel;
62331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        switch (level) {
62431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case LocationAwareLogger.TRACE_INT:
62531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            julLevel = Level.FINEST;
62631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            break;
62731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case LocationAwareLogger.DEBUG_INT:
62831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            julLevel = Level.FINE;
62931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            break;
63031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case LocationAwareLogger.INFO_INT:
63131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            julLevel = Level.INFO;
63231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            break;
63331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case LocationAwareLogger.WARN_INT:
63431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            julLevel = Level.WARNING;
63531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            break;
63631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case LocationAwareLogger.ERROR_INT:
63731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            julLevel = Level.SEVERE;
63831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            break;
63931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        default:
64031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            throw new IllegalStateException("Level number " + level + " is not recognized.");
64131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
64231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        // the logger.isLoggable check avoids the unconditional
64331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        // construction of location data for disabled log
64431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        // statements. As of 2008-07-31, callers of this method
64531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        // do not perform this check. See also
64631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        // http://bugzilla.slf4j.org/show_bug.cgi?id=90
64731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (logger.isLoggable(julLevel)) {
64831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            log(callerFQCN, julLevel, message, t);
64931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
65031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
65188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu}
652