17ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu/**
27ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * Copyright (c) 2004-2011 QOS.ch
37ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * All rights reserved.
47ba0605dc97fb81bde8311510d27b3ccba170008Ceki 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
77ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * "Software"), to  deal in  the Software without  restriction, including
87ba0605dc97fb81bde8311510d27b3ccba170008Ceki 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.
157ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
167ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
177ba0605dc97fb81bde8311510d27b3ccba170008Ceki 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.
237ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
2488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu */
2588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcupackage org.slf4j.cal10n;
2688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
2788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.Logger;
2888c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.Marker;
2988c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.MarkerFactory;
3088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.ext.LoggerWrapper;
3188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.spi.LocationAwareLogger;
3288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
3388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport ch.qos.cal10n.IMessageConveyor;
3488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport ch.qos.cal10n.MessageParameterObj;
3588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
3688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu/**
379f10490a05f7344f4b3ef657e8991f5d51934e2fCeki Gulcu * A logger specialized in localized logging. Localization is based in the <a
3888c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * href="http://cal10n.qos.ch">CAL10N project</p>.
3988c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu *
4088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * @author Ceki G&uuml;lc&uuml;
4188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu */
4288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcupublic class LocLogger extends LoggerWrapper implements Logger {
4388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
4431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private static final String FQCN = LocLogger.class.getName();
4531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
4631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
4731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Every localized message logged by a LocLogger will bear this marker. It
4831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * allows marker-aware implementations to perform additional processing on
4931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * localized messages.
5031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
5131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    static Marker LOCALIZED = MarkerFactory.getMarker("LOCALIZED");
5231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
5331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    final IMessageConveyor imc;
5431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
5531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public LocLogger(Logger logger, IMessageConveyor imc) {
5631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        super(logger, LoggerWrapper.class.getName());
5731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (imc == null) {
5831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            throw new IllegalArgumentException("IMessageConveyor cannot be null");
5931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
6031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        this.imc = imc;
6188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu    }
6231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
6331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
6431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a localized message at the TRACE level.
6531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
6631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param key
6731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the key used for localization
6831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param args
6931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          optional arguments
7031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
7131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void trace(Enum<?> key, Object... args) {
7231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (!logger.isTraceEnabled()) {
7331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return;
7431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
7531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        String translatedMsg = imc.getMessage(key, args);
7631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        MessageParameterObj mpo = new MessageParameterObj(key, args);
7731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
7831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (instanceofLAL) {
7931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            ((LocationAwareLogger) logger).log(LOCALIZED, FQCN, LocationAwareLogger.TRACE_INT, translatedMsg, args, null);
8031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else {
8131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            logger.trace(LOCALIZED, translatedMsg, mpo);
8231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
8388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu    }
8431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
8531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
8631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a localized message at the DEBUG level.
8731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
8831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param key
8931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the key used for localization
9031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param args
9131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          optional arguments
9231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
9331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void debug(Enum<?> key, Object... args) {
9431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (!logger.isDebugEnabled()) {
9531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return;
9631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
9731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        String translatedMsg = imc.getMessage(key, args);
9831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        MessageParameterObj mpo = new MessageParameterObj(key, args);
9931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
10031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (instanceofLAL) {
10131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            ((LocationAwareLogger) logger).log(LOCALIZED, FQCN, LocationAwareLogger.DEBUG_INT, translatedMsg, args, null);
10231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else {
10331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            logger.debug(LOCALIZED, translatedMsg, mpo);
10431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
10588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu    }
10631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
10731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
10831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a localized message at the INFO level.
10931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
11031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param key
11131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the key used for localization
11231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param args
11331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          optional arguments
11431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
11531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void info(Enum<?> key, Object... args) {
11631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (!logger.isInfoEnabled()) {
11731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return;
11831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
11931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        String translatedMsg = imc.getMessage(key, args);
12031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        MessageParameterObj mpo = new MessageParameterObj(key, args);
12131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
12231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (instanceofLAL) {
12331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            ((LocationAwareLogger) logger).log(LOCALIZED, FQCN, LocationAwareLogger.INFO_INT, translatedMsg, args, null);
12431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else {
12531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            logger.info(LOCALIZED, translatedMsg, mpo);
12631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
12788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu    }
12831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
12931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
13031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a localized message at the WARN level.
13131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
13231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param key
13331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the key used for localization
13431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param args
13531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          optional arguments
13631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
13731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void warn(Enum<?> key, Object... args) {
13831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (!logger.isWarnEnabled()) {
13931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return;
14031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
14131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        String translatedMsg = imc.getMessage(key, args);
14231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        MessageParameterObj mpo = new MessageParameterObj(key, args);
14331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
14431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (instanceofLAL) {
14531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            ((LocationAwareLogger) logger).log(LOCALIZED, FQCN, LocationAwareLogger.WARN_INT, translatedMsg, args, null);
14631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else {
14731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            logger.warn(LOCALIZED, translatedMsg, mpo);
14831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
14988c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu    }
15031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
15131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
15231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Log a localized message at the ERROR level.
15331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
15431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param key
15531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the key used for localization
15631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param args
15731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          optional arguments
15831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
15931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void error(Enum<?> key, Object... args) {
16031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (!logger.isErrorEnabled()) {
16131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return;
16231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
16331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        String translatedMsg = imc.getMessage(key, args);
16431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        MessageParameterObj mpo = new MessageParameterObj(key, args);
16531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
16631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (instanceofLAL) {
16731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            ((LocationAwareLogger) logger).log(LOCALIZED, FQCN, LocationAwareLogger.ERROR_INT, translatedMsg, args, null);
16831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else {
16931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            logger.error(LOCALIZED, translatedMsg, mpo);
17031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
17188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu    }
17288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
17388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu}
174