1054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu/*
2054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu * Copyright 2001-2004 The Apache Software Foundation.
37ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
4054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu * Licensed under the Apache License, Version 2.0 (the "License");
5054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu * you may not use this file except in compliance with the License.
6054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu * You may obtain a copy of the License at
77ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
8054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu *      http://www.apache.org/licenses/LICENSE-2.0
97ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
10054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu * Unless required by applicable law or agreed to in writing, software
11054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu * distributed under the License is distributed on an "AS IS" BASIS,
12054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu * See the License for the specific language governing permissions and
14054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu * limitations under the License.
1588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu */
16054ed393bd95a6f7c34398accc5cefe36fae8989Ceki Gulcu
1788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcupackage org.apache.log4j;
1888c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
19393d8899a64ae7562afe44105b7938b0fd9218a9Ceki Gulcuimport org.apache.log4j.helpers.NullEnumeration;
2088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.LoggerFactory;
2188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.Marker;
2288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.MarkerFactory;
2388c4c456766193e012eb890e2208473d99b91f83Ceki Gulcuimport org.slf4j.spi.LocationAwareLogger;
2488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
25393d8899a64ae7562afe44105b7938b0fd9218a9Ceki Gulcuimport java.util.Enumeration;
26393d8899a64ae7562afe44105b7938b0fd9218a9Ceki Gulcu
2788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu/**
2888c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * <p>
2988c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * This class is a minimal implementation of the original
3088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * <code>org.apache.log4j.Category</code> class (as found in log4j 1.2) by
3188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * delegation of all calls to a {@link org.slf4j.Logger} instance.
3288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * </p>
33b6e0c251129fb0eb4da237cbb9a99517599b6f5dCeki Gulcu *
3488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * <p>
3588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * Log4j's <code>trace</code>, <code>debug()</code>, <code>info()</code>,
3688c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * <code>warn()</code>, <code>error()</code> printing methods are directly
3788c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * mapped to their SLF4J equivalents. Log4j's <code>fatal()</code> printing
3899c9eb8a756df79e94234f00a348b0ee6222098eCeki Gulcu * method is mapped to SLF4J's <code>error()</code> method with a FATAL marker.
39b6e0c251129fb0eb4da237cbb9a99517599b6f5dCeki Gulcu *
4088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * @author S&eacute;bastien Pennec
4188c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu * @author Ceki G&uuml;lc&uuml;
4288c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu */
43e14afa68f0857ddc3dd925a1cf7c28c17184069dCeki Gulcu@SuppressWarnings("rawtypes")
4488c4c456766193e012eb890e2208473d99b91f83Ceki Gulcupublic class Category {
4588c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu
4631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private static final String CATEGORY_FQCN = Category.class.getName();
4731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
4831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private String name;
4931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
5031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    protected org.slf4j.Logger slf4jLogger;
5131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private org.slf4j.spi.LocationAwareLogger locationAwareLogger;
5231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
5331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private static Marker FATAL_MARKER = MarkerFactory.getMarker("FATAL");
5431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
5531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    Category(String name) {
5631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        this.name = name;
5731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slf4jLogger = LoggerFactory.getLogger(name);
5831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (slf4jLogger instanceof LocationAwareLogger) {
5931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            locationAwareLogger = (LocationAwareLogger) slf4jLogger;
6031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
6131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
6231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
6331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public static Category getInstance(Class clazz) {
6431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return Log4jLoggerFactory.getLogger(clazz.getName());
6531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
6631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
6731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public static Category getInstance(String name) {
6831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return Log4jLoggerFactory.getLogger(name);
6931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
7031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
7131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public final Category getParent() {
7231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return null;
7331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
7431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
7531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
7631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Returns the obvious.
7731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
7831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @return
7931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
8031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public String getName() {
8131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return name;
8231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
8331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
84a0ebd0a43bbf07dd0b5560e8eb4a62929e06efafCeki Gulcu    public Appender getAppender(String name) {
85a0ebd0a43bbf07dd0b5560e8eb4a62929e06efafCeki Gulcu        return null;
86a0ebd0a43bbf07dd0b5560e8eb4a62929e06efafCeki Gulcu    }
87a0ebd0a43bbf07dd0b5560e8eb4a62929e06efafCeki Gulcu
8831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public Enumeration getAllAppenders() {
8931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return NullEnumeration.getInstance();
9031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
9131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
9231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
9331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Return the level in effect for this category/logger.
9431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
9531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * <p>
9631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * The result is computed by simulation.
9731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
9831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @return
9931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
10031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public Level getEffectiveLevel() {
10131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (slf4jLogger.isTraceEnabled()) {
10231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return Level.TRACE;
10331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
10431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (slf4jLogger.isDebugEnabled()) {
10531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return Level.DEBUG;
10631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
10731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (slf4jLogger.isInfoEnabled()) {
10831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return Level.INFO;
10931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
11031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (slf4jLogger.isWarnEnabled()) {
11131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return Level.WARN;
11231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
11331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return Level.ERROR;
11431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
11531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
11631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
11731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Returns the assigned {@link Level}, if any, for this Category. This
11831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * implementation always returns null.
11931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
12031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @return Level - the assigned Level, can be <code>null</code>.
12131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
12231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    final public Level getLevel() {
12331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return null;
12431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
12531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
12631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
12731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @deprecated Please use {@link #getLevel} instead.
12831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
12931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    final public Level getPriority() {
13031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return null;
13131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
13231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
13331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
13431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#isDebugEnabled} method in SLF4J
13531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
13631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public boolean isDebugEnabled() {
13731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return slf4jLogger.isDebugEnabled();
13831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
13931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
14031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
14131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#isInfoEnabled} method in SLF4J
14231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
14331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public boolean isInfoEnabled() {
14431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return slf4jLogger.isInfoEnabled();
14531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
14631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
14731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
14831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates tob {@link org.slf4j.Logger#isWarnEnabled} method in SLF4J
14931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
15031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public boolean isWarnEnabled() {
15131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return slf4jLogger.isWarnEnabled();
15231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
15331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
15431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
15531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#isErrorEnabled} method in SLF4J
15631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
15731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public boolean isErrorEnabled() {
15831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return slf4jLogger.isErrorEnabled();
15931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
16031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
16131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
16231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Determines whether the priority passed as parameter is enabled in the
16331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * underlying SLF4J logger. Each log4j priority is mapped directly to its
16431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * SLF4J equivalent, except for FATAL which is mapped as ERROR.
16531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
16631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @param p
16731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *          the priority to check against
16831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * @return true if this logger is enabled for the given level, false
16931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *         otherwise.
17031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
17131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public boolean isEnabledFor(Priority p) {
17231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        switch (p.level) {
17331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Level.TRACE_INT:
17431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return slf4jLogger.isTraceEnabled();
17531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Level.DEBUG_INT:
17631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return slf4jLogger.isDebugEnabled();
17731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Level.INFO_INT:
17831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return slf4jLogger.isInfoEnabled();
17931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Level.WARN_INT:
18031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return slf4jLogger.isWarnEnabled();
18131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Level.ERROR_INT:
18231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return slf4jLogger.isErrorEnabled();
18331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Priority.FATAL_INT:
18431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return slf4jLogger.isErrorEnabled();
18531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
18631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return false;
18731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
18831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
18931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    void differentiatedLog(Marker marker, String fqcn, int level, Object message, Throwable t) {
19031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
19131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        String m = convertToString(message);
19231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (locationAwareLogger != null) {
19331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            locationAwareLogger.log(marker, fqcn, level, m, null, t);
19431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else {
19531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            switch (level) {
19631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            case LocationAwareLogger.TRACE_INT:
19731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                slf4jLogger.trace(marker, m);
19831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                break;
19931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            case LocationAwareLogger.DEBUG_INT:
20031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                slf4jLogger.debug(marker, m);
20131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                break;
20231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            case LocationAwareLogger.INFO_INT:
20331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                slf4jLogger.info(marker, m);
20431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                break;
20531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            case LocationAwareLogger.WARN_INT:
20631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                slf4jLogger.warn(marker, m);
20731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                break;
20831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            case LocationAwareLogger.ERROR_INT:
20931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                slf4jLogger.error(marker, m);
21031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                break;
21131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            }
21231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
21331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
21431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
21531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
21631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#debug(String)} method of SLF4J.
21731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
21831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void debug(Object message) {
21931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.DEBUG_INT, message, null);
22031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
22131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
22231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
22331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#debug(String,Throwable)} method in
22431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * SLF4J.
22531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
22631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void debug(Object message, Throwable t) {
22731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.DEBUG_INT, message, t);
22831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
22931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
23031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
23131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#info(String)} method in SLF4J.
23231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
23331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void info(Object message) {
23431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.INFO_INT, message, null);
23531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
23631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
23731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
23831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#info(String,Throwable)} method in
23931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * SLF4J.
24031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
24131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void info(Object message, Throwable t) {
24231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.INFO_INT, message, t);
24331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
24431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
24531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
24631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#warn(String)} method in SLF4J.
24731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
24831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void warn(Object message) {
24931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.WARN_INT, message, null);
25031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
25131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
25231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
25331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#warn(String,Throwable)} method in
25431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * SLF4J.
25531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
25631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void warn(Object message, Throwable t) {
25731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.WARN_INT, message, t);
25831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
25931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
26031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
26131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#error(String)} method in SLF4J.
26231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
26331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void error(Object message) {
26431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.ERROR_INT, message, null);
26531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
26631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
26731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
26831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#error(String,Throwable)} method in
26931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * SLF4J.
27031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
27131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void error(Object message, Throwable t) {
27231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, CATEGORY_FQCN, LocationAwareLogger.ERROR_INT, message, t);
27331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
27431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
27531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
27631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#error(String)} method in SLF4J.
27731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
27831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void fatal(Object message) {
27931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(FATAL_MARKER, CATEGORY_FQCN, LocationAwareLogger.ERROR_INT, message, null);
28031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
28131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
28231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
28331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * Delegates to {@link org.slf4j.Logger#error(String,Throwable)} method in
28431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     * SLF4J. In addition, the call is marked with a marker named "FATAL".
28531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
28631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void fatal(Object message, Throwable t) {
28731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(FATAL_MARKER, CATEGORY_FQCN, LocationAwareLogger.ERROR_INT, message, t);
28831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
28931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
29031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    protected void forcedLog(String FQCN, Priority p, Object msg, Throwable t) {
29131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        log(FQCN, p, msg, t);
29231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
29331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
29431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    // See also http://bugzilla.slf4j.org/show_bug.cgi?id=168
29531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void log(String FQCN, Priority p, Object msg, Throwable t) {
29631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        int levelInt = priorityToLevelInt(p);
29731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, FQCN, levelInt, msg, t);
29831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
29931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
30031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void log(Priority p, Object message, Throwable t) {
30131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        int levelInt = priorityToLevelInt(p);
30231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, CATEGORY_FQCN, levelInt, message, t);
30331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
30431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
30531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void log(Priority p, Object message) {
30631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        int levelInt = priorityToLevelInt(p);
30731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        differentiatedLog(null, CATEGORY_FQCN, levelInt, message, null);
30831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
30931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
31031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private int priorityToLevelInt(Priority p) {
31131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        switch (p.level) {
31231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Level.TRACE_INT:
31331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Level.X_TRACE_INT:
31431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return LocationAwareLogger.TRACE_INT;
31531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Priority.DEBUG_INT:
31631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return LocationAwareLogger.DEBUG_INT;
31731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Priority.INFO_INT:
31831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return LocationAwareLogger.INFO_INT;
31931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Priority.WARN_INT:
32031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return LocationAwareLogger.WARN_INT;
32131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Priority.ERROR_INT:
32231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return LocationAwareLogger.ERROR_INT;
32331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        case Priority.FATAL_INT:
32431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return LocationAwareLogger.ERROR_INT;
32531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        default:
32631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            throw new IllegalStateException("Unknown Priority " + p);
32731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
32831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
32931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
33031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    protected final String convertToString(Object message) {
33131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (message == null) {
33231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return (String) message;
33331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else {
33431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return message.toString();
33531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
33631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
33731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
33831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void setAdditivity(boolean additive) {
33931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        // nothing to do
34031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
34131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
34231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void addAppender(Appender newAppender) {
34331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        // nothing to do
34431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
34531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
34631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void setLevel(Level level) {
34731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        // nothing to do
34831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
3493f776eb758fd59429bb654f594d9c8feb2d9574cChristian Trutz
35088c4c456766193e012eb890e2208473d99b91f83Ceki Gulcu}
351