[jboss-svn-commits] JBoss Common SVN: r4001 - jboss-logging and 7 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Feb 8 20:07:37 EST 2010


Author: david.lloyd at jboss.com
Date: 2010-02-08 20:07:37 -0500 (Mon, 08 Feb 2010)
New Revision: 4001

Added:
   jboss-logging/
   jboss-logging/branches/
   jboss-logging/tags/
   jboss-logging/trunk/
   jboss-logging/trunk/pom.xml
   jboss-logging/trunk/src/
   jboss-logging/trunk/src/main/
   jboss-logging/trunk/src/main/java/
   jboss-logging/trunk/src/main/java/org/
   jboss-logging/trunk/src/main/java/org/jboss/
   jboss-logging/trunk/src/main/java/org/jboss/logging/
   jboss-logging/trunk/src/main/java/org/jboss/logging/AbstractLoggerProvider.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/AbstractMdcLoggerProvider.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogManagerLogger.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogManagerProvider.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogRecord.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLevel.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLogger.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLoggerProvider.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/Log4jLogger.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/Log4jLoggerProvider.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/Logger.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/LoggerProvider.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/LoggerProviders.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/SerializedLogger.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLocationAwareLogger.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLogger.java
   jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLoggerProvider.java
Log:
Initial import - jboss-logging 3.x

Added: jboss-logging/trunk/pom.xml
===================================================================
--- jboss-logging/trunk/pom.xml	                        (rev 0)
+++ jboss-logging/trunk/pom.xml	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,122 @@
+<!--
+  ~ JBoss, Home of Professional Open Source.
+  ~ Copyright 2010, Red Hat Middleware LLC, and individual contributors
+  ~ as indicated by the @author tags. See the copyright.txt file in the
+  ~ distribution for a full listing of individual contributors.
+  ~
+  ~ This is free software; you can redistribute it and/or modify it
+  ~ under the terms of the GNU Lesser General Public License as
+  ~ published by the Free Software Foundation; either version 2.1 of
+  ~ the License, or (at your option) any later version.
+  ~
+  ~ This software is distributed in the hope that it will be useful,
+  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  ~ Lesser General Public License for more details.
+  ~
+  ~ You should have received a copy of the GNU Lesser General Public
+  ~ License along with this software; if not, write to the Free
+  ~ Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  ~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.jboss.logging</groupId>
+    <artifactId>jboss-logging</artifactId>
+    <version>3.0.0.CR1-SNAPSHOT</version>
+    <packaging>jar</packaging>
+    <name>JBoss Logging 3</name>
+    <url>http://www.jboss.org</url>
+    <description>The JBoss Logging Framework</description>
+    <scm>
+        <connection>scm:svn:https://svn.jboss.org/repos/common/common-logging-spi/trunk/</connection>
+    </scm>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.jboss.logmanager</groupId>
+            <artifactId>jboss-logmanager</artifactId>
+            <version>1.2.0.CR1-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.2.15</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.5.8</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.0.2</version>
+                <configuration>
+                    <source>1.5</source>
+                    <target>1.5</target>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-source-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-sources</id>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>2.6.1</version>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <phase>verify</phase>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <detectJavaApiLink>false</detectJavaApiLink>
+                    <detectLinks>false</detectLinks>
+                    <doclet>net.gleamynode.apiviz.APIviz</doclet>
+                    <docletArtifact>
+                        <groupId>org.jboss.apiviz</groupId>
+                        <artifactId>apiviz</artifactId>
+                        <version>1.2.5.GA</version>
+                    </docletArtifact>
+                    <doctitle><![CDATA[JBoss Logging ]]>${version}</doctitle>
+                    <header><![CDATA[JBoss Logging ]]>${version}</header>
+                    <footer><![CDATA[JBoss Logging ]]>${version}</footer>
+                    <bottom><![CDATA[<i>Copyright &#169; 2010 JBoss, a division of Red Hat, Inc.</i>]]></bottom>
+                    <links>
+                        <link>http://java.sun.com/javase/6/docs/api/</link>
+                    </links>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <distributionManagement>
+        <repository>
+            <id>repository.jboss.org</id>
+            <name>JBoss Maven2 Repository</name>
+            <url>http://repository.jboss.org/maven2</url>
+        </repository>
+    </distributionManagement>
+    
+</project>
\ No newline at end of file

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/AbstractLoggerProvider.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/AbstractLoggerProvider.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/AbstractLoggerProvider.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,86 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.util.ArrayDeque;
+
+abstract class AbstractLoggerProvider {
+
+    private final ThreadLocal<ArrayDeque<Entry>> ndcStack = new ThreadLocal<ArrayDeque<Entry>>();
+
+    public void clearNdc() {
+        ArrayDeque<Entry> stack = ndcStack.get();
+        if (stack != null)
+            stack.clear();
+    }
+
+    public String getNdc() {
+        ArrayDeque<Entry> stack = ndcStack.get();
+        return stack == null || stack.isEmpty() ? null : stack.peek().merged;
+    }
+
+    public int getNdcDepth() {
+        ArrayDeque<Entry> stack = ndcStack.get();
+        return stack == null ? 0 : stack.size();
+    }
+
+    public String peekNdc() {
+        ArrayDeque<Entry> stack = ndcStack.get();
+        return stack == null || stack.isEmpty() ? "" : stack.peek().current;
+    }
+
+    public String popNdc() {
+        ArrayDeque<Entry> stack = ndcStack.get();
+        return stack == null || stack.isEmpty() ? "" : stack.pop().current;
+    }
+
+    public void pushNdc(String message) {
+        ArrayDeque<Entry> stack = ndcStack.get();
+        if (stack == null) {
+            stack = new ArrayDeque<Entry>();
+            ndcStack.set(stack);
+        }
+        stack.push(stack.isEmpty() ? new Entry(message) : new Entry(stack.peek(), message));
+    }
+
+    public void setNdcMaxDepth(int maxDepth) {
+        final ArrayDeque<Entry> stack = ndcStack.get();
+        if (stack != null) while (stack.size() > maxDepth) stack.pop();
+    }
+
+    private static class Entry {
+
+        private String merged;
+        private String current;
+
+        Entry(String current) {
+            merged = current;
+            this.current = current;
+        }
+
+        Entry(Entry parent, String current) {
+            merged = parent.merged + ' ' + current;
+            this.current = current;
+        }
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/AbstractMdcLoggerProvider.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/AbstractMdcLoggerProvider.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/AbstractMdcLoggerProvider.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,55 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.util.HashMap;
+import java.util.Map;
+
+abstract class AbstractMdcLoggerProvider extends AbstractLoggerProvider {
+
+    private final ThreadLocal<Map<String, Object>> mdcMap = new ThreadLocal<Map<String, Object>>();
+
+    public Object getMdc(String key) {
+        return mdcMap.get() == null ? null : mdcMap.get().get(key);
+    }
+
+    public Map<String, Object> getMdcMap() {
+        return mdcMap.get();
+    }
+
+    public void putMdc(String key, Object value) {
+        Map<String, Object> map = mdcMap.get();
+        if (map == null) {
+            map = new HashMap<String, Object>();
+            mdcMap.set(map);
+        }
+        map.put(key, value);
+    }
+
+    public void removeMdc(String key) {
+        Map<String, Object> map = mdcMap.get();
+        if (map == null)
+            return;
+        map.remove(key);
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogManagerLogger.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogManagerLogger.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogManagerLogger.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,73 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import org.jboss.logmanager.ExtLogRecord;
+
+final class JBossLogManagerLogger extends Logger {
+
+    private static final long serialVersionUID = 7429618317727584742L;
+
+    private final org.jboss.logmanager.Logger logger;
+
+    JBossLogManagerLogger(final String name, final String resourceBundleName, final String prefix) {
+        super(name, resourceBundleName, prefix);
+        if (resourceBundleName != null) {
+            logger = org.jboss.logmanager.Logger.getLogger(name, resourceBundleName);
+        } else {
+            logger = org.jboss.logmanager.Logger.getLogger(name);
+        }
+    }
+
+    public boolean isEnabled(final Level level) {
+        return logger.isLoggable(translate(level));
+    }
+
+    protected void doLog(final Level level, final String loggerClassName, final Object message, final Object[] parameters, final Throwable thrown) {
+        if (parameters == null) {
+            logger.log(loggerClassName, translate(level), String.valueOf(message), thrown);
+        } else {
+            logger.log(loggerClassName, translate(level), String.valueOf(message), ExtLogRecord.FormatStyle.MESSAGE_FORMAT, parameters, thrown);
+        }
+    }
+
+    protected void doLogf(final Level level, final String loggerClassName, final String format, final Object[] parameters, final Throwable thrown) {
+        if (parameters == null) {
+            logger.log(loggerClassName, translate(level), format, thrown);
+        } else {
+            logger.log(loggerClassName, translate(level), format, ExtLogRecord.FormatStyle.PRINTF, parameters, thrown);
+        }
+    }
+
+    private static java.util.logging.Level translate(final Level level) {
+        if (level != null) switch (level) {
+            case FATAL: return org.jboss.logmanager.Level.FATAL;
+            case ERROR: return org.jboss.logmanager.Level.ERROR;
+            case WARN:  return org.jboss.logmanager.Level.WARN;
+            case INFO:  return org.jboss.logmanager.Level.INFO;
+            case DEBUG: return org.jboss.logmanager.Level.DEBUG;
+            case TRACE: return org.jboss.logmanager.Level.TRACE;
+        }
+        return org.jboss.logmanager.Level.ALL;
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogManagerProvider.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogManagerProvider.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogManagerProvider.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,80 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.util.Map;
+import org.jboss.logmanager.MDC;
+import org.jboss.logmanager.NDC;
+
+final class JBossLogManagerProvider implements LoggerProvider {
+
+    public Logger getLogger(final String name, final String resourceBundleName, final String prefix) {
+        return new JBossLogManagerLogger(name, resourceBundleName, prefix);
+    }
+
+    public void putMdc(final String key, final Object value) {
+        MDC.put(key, String.valueOf(value));
+    }
+
+    public Object getMdc(final String key) {
+        return MDC.get(key);
+    }
+
+    public void removeMdc(final String key) {
+        MDC.remove(key);
+    }
+
+    @SuppressWarnings({ "unchecked" })
+    public Map<String, Object> getMdcMap() {
+        // we can re-define the erasure of this map because MDC does not make further use of the copy
+        return (Map)MDC.copy();
+    }
+
+    public void clearNdc() {
+        NDC.clear();
+    }
+
+    public String getNdc() {
+        return NDC.get();
+    }
+
+    public int getNdcDepth() {
+        return NDC.getDepth();
+    }
+
+    public String popNdc() {
+        return NDC.pop();
+    }
+
+    public String peekNdc() {
+        return NDC.get();
+    }
+
+    public void pushNdc(final String message) {
+        NDC.push(message);
+    }
+
+    public void setNdcMaxDepth(final int maxDepth) {
+        NDC.trimTo(maxDepth);
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogRecord.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogRecord.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/JBossLogRecord.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,105 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+class JBossLogRecord extends LogRecord {
+
+    private static final long serialVersionUID = 2492784413065296060L;
+    private static final String LOGGER_CLASS_NAME = Logger.class.getName();
+
+    private boolean resolved;
+    private final String loggerClassName;
+
+    JBossLogRecord(final Level level, final String msg) {
+        super(level, msg);
+        loggerClassName = LOGGER_CLASS_NAME;
+    }
+
+    JBossLogRecord(final Level level, final String msg, final String loggerClassName) {
+        super(level, msg);
+        this.loggerClassName = loggerClassName;
+    }
+
+    public String getSourceClassName() {
+        if (! resolved) {
+            resolve();
+        }
+        return super.getSourceClassName();
+    }
+
+    public void setSourceClassName(final String sourceClassName) {
+        resolved = true;
+        super.setSourceClassName(sourceClassName);
+    }
+
+    public String getSourceMethodName() {
+        if (! resolved) {
+            resolve();
+        }
+        return super.getSourceMethodName();
+    }
+
+    public void setSourceMethodName(final String sourceMethodName) {
+        resolved = true;
+        super.setSourceMethodName(sourceMethodName);
+    }
+
+    private void resolve() {
+        resolved = true;
+        final StackTraceElement[] stack = new Throwable().getStackTrace();
+        boolean found = false;
+        for (StackTraceElement element : stack) {
+            final String className = element.getClassName();
+            if (found) {
+                if (! loggerClassName.equals(className)) {
+                    setSourceClassName(className);
+                    setSourceMethodName(element.getMethodName());
+                    return;
+                }
+            } else {
+                found = loggerClassName.equals(className);
+            }
+        }
+        setSourceClassName("<unknown>");
+        setSourceMethodName("<unknown>");
+    }
+
+    protected Object writeReplace() {
+        final LogRecord replacement = new LogRecord(getLevel(), getMessage());
+        replacement.setResourceBundle(getResourceBundle());
+        replacement.setLoggerName(getLoggerName());
+        replacement.setMillis(getMillis());
+        replacement.setParameters(getParameters());
+        replacement.setResourceBundleName(getResourceBundleName());
+        replacement.setSequenceNumber(getSequenceNumber());
+        replacement.setSourceClassName(getSourceClassName());
+        replacement.setSourceMethodName(getSourceMethodName());
+        replacement.setThreadID(getThreadID());
+        replacement.setThrown(getThrown());
+        return replacement;
+    }
+
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLevel.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLevel.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLevel.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,48 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.util.logging.Level;
+
+/**
+ * Levels used by the JDK logging backend.
+ */
+public final class JDKLevel extends Level {
+   /** The serialVersionUID */
+   private static final long serialVersionUID = 1L;
+   protected JDKLevel(final String name, final int value) {
+      super(name, value);
+   }
+
+   protected JDKLevel(final String name, final int value, final String resourceBundleName) {
+      super(name, value, resourceBundleName);
+   }
+
+   public static final JDKLevel FATAL = new JDKLevel("FATAL", 1100);
+   public static final JDKLevel ERROR = new JDKLevel("ERROR", 1000);
+   public static final JDKLevel WARN = new JDKLevel("WARN", 900);
+   @SuppressWarnings("hiding")
+   public static final JDKLevel INFO = new JDKLevel("INFO", 800);
+   public static final JDKLevel DEBUG = new JDKLevel("DEBUG", 500);
+   public static final JDKLevel TRACE = new JDKLevel("TRACE", 400);
+}
\ No newline at end of file

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLogger.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLogger.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLogger.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,62 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+final class JDKLogger extends Logger {
+
+    private static final long serialVersionUID = 2563174097983721393L;
+
+    @SuppressWarnings({ "NonConstantLogger" })
+    private transient final java.util.logging.Logger logger;
+
+    public JDKLogger(final String name, final String resourceBundleName, final String prefix) {
+        super(name, resourceBundleName, prefix);
+        if (resourceBundleName == null) {
+            logger = java.util.logging.Logger.getLogger(name);
+        } else {
+            logger = java.util.logging.Logger.getLogger(name, resourceBundleName);
+        }
+    }
+
+    protected void doLog(final Level level, final String loggerClassName, final Object message, final Object[] parameters, final Throwable thrown) {
+    }
+
+    protected void doLogf(final Level level, final String loggerClassName, final String format, final Object[] parameters, final Throwable thrown) {
+    }
+
+    private static java.util.logging.Level translate(final Level level) {
+        if (level != null) switch (level) {
+            case FATAL: return JDKLevel.FATAL;
+            case ERROR: return JDKLevel.ERROR;
+            case WARN:  return JDKLevel.WARN;
+            case INFO:  return JDKLevel.INFO;
+            case DEBUG: return JDKLevel.DEBUG;
+            case TRACE: return JDKLevel.TRACE;
+        }
+        return JDKLevel.ALL;
+    }
+
+    public boolean isEnabled(final Level level) {
+        return logger.isLoggable(translate(level));
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLoggerProvider.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLoggerProvider.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/JDKLoggerProvider.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,30 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+final class JDKLoggerProvider extends AbstractMdcLoggerProvider implements LoggerProvider {
+
+    public Logger getLogger(final String name, final String resourceBundleName, final String prefix) {
+        return new JDKLogger(name, resourceBundleName, prefix);
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/Log4jLogger.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/Log4jLogger.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/Log4jLogger.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,62 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.text.MessageFormat;
+
+final class Log4jLogger extends Logger {
+
+    private static final long serialVersionUID = -5446154366955151335L;
+
+    private final org.apache.log4j.Logger logger;
+
+    Log4jLogger(final String name, final String resourceBundleName, final String prefix) {
+        super(name, resourceBundleName, prefix);
+        logger = org.apache.log4j.Logger.getLogger(name);
+    }
+
+    public boolean isEnabled(final Level level) {
+        final org.apache.log4j.Level l = translate(level);
+        return logger.isEnabledFor(l) && l.isGreaterOrEqual(logger.getEffectiveLevel());
+    }
+
+    protected void doLog(final Level level, final String loggerClassName, final Object message, final Object[] parameters, final Throwable thrown) {
+        logger.log(loggerClassName, translate(level), parameters == null || parameters.length == 0 ? message : MessageFormat.format(String.valueOf(message), parameters), thrown);
+    }
+
+    protected void doLogf(final Level level, final String loggerClassName, final String format, final Object[] parameters, final Throwable thrown) {
+        logger.log(loggerClassName, translate(level), parameters == null || parameters.length == 0 ? format : String.format(format, parameters), thrown);
+    }
+
+    private static org.apache.log4j.Level translate(final Level level) {
+        if (level != null) switch (level) {
+            case FATAL: return org.apache.log4j.Level.FATAL;
+            case ERROR: return org.apache.log4j.Level.ERROR;
+            case WARN:  return org.apache.log4j.Level.WARN;
+            case INFO:  return org.apache.log4j.Level.INFO;
+            case DEBUG: return org.apache.log4j.Level.DEBUG;
+            case TRACE: return org.apache.log4j.Level.TRACE;
+        }
+        return org.apache.log4j.Level.ALL;
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/Log4jLoggerProvider.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/Log4jLoggerProvider.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/Log4jLoggerProvider.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,80 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.util.Map;
+
+import org.apache.log4j.MDC;
+import org.apache.log4j.NDC;
+
+final class Log4jLoggerProvider implements LoggerProvider {
+
+    public Logger getLogger(final String name, final String resourceBundleName, final String prefix) {
+        return new Log4jLogger(name, resourceBundleName, prefix);
+    }
+
+    public Object getMdc(String key) {
+        return MDC.get(key);
+    }
+
+    @SuppressWarnings("unchecked")
+    public Map<String, Object> getMdcMap() {
+        return MDC.getContext();
+    }
+
+    public void putMdc(String key, Object val) {
+        MDC.put(key, val);
+    }
+
+    public void removeMdc(String key) {
+        MDC.remove(key);
+    }
+
+    public void clearNdc() {
+        NDC.clear();
+    }
+
+    public String getNdc() {
+        return NDC.get();
+    }
+
+    public int getNdcDepth() {
+        return NDC.getDepth();
+    }
+
+    public String peekNdc() {
+        return NDC.peek();
+    }
+
+    public String popNdc() {
+        return NDC.pop();
+    }
+
+    public void pushNdc(String message) {
+        NDC.push(message);
+    }
+
+    public void setNdcMaxDepth(int maxDepth) {
+        NDC.setMaxDepth(maxDepth);
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/Logger.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/Logger.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/Logger.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,1438 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.logging;
+
+import java.io.Serializable;
+
+/**
+ * An abstracted logging entry point.
+ */
+public abstract class Logger implements Serializable {
+
+    private static final long serialVersionUID = 4232175575988879434L;
+
+    private static final String FQCN = Logger.class.getName();
+
+    /**
+     * Levels used by this logging API.
+     */
+    public enum Level {
+        FATAL,
+        ERROR,
+        WARN,
+        INFO,
+        DEBUG,
+        TRACE,
+    }
+
+    private final String name;
+    private final String resourceBundleName;
+    private final String prefix;
+
+    /**
+     * Construct a new instance.
+     *
+     * @param name the logger category name
+     * @param resourceBundleName the resource bundle name or {@code null} for none
+     * @param prefix the log message prefix string
+     */
+    protected Logger(final String name, final String resourceBundleName, final String prefix) {
+        this.name = name;
+        this.resourceBundleName = resourceBundleName;
+        this.prefix = prefix;
+    }
+
+    /**
+     * Return the name of this logger.
+     *
+     * @return The name of this logger.
+     */
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * Check to see if the given level is enabled for this logger.
+     *
+     * @param level the level to check for
+     * @return {@code true} if messages may be logged at the given level, {@code false} otherwise
+     */
+    public abstract boolean isEnabled(Level level);
+
+    /**
+     * Implementation log method (standard parameter formatting).
+     *
+     * @param level the level
+     * @param loggerClassName the logger class name
+     * @param message the message to log
+     * @param parameters the parameters of the message
+     * @param thrown the exception which was thrown, if any
+     */
+    protected abstract void doLog(Level level, String loggerClassName, Object message, Object[] parameters, Throwable thrown);
+
+    /**
+     * Implementation log method (printf formatting).
+     *
+     * @param level the level
+     * @param loggerClassName the logger class name
+     * @param format the format string to log
+     * @param parameters the parameters of the message
+     * @param thrown the exception which was thrown, if any
+     */
+    protected abstract void doLogf(Level level, String loggerClassName, String format, Object[] parameters, Throwable thrown);
+    
+    /**
+     * Check to see if the TRACE level is enabled for this logger.
+     *
+     * @return true if a {@link #trace(Object)} method invocation would pass the msg to the configured appenders, false
+     *         otherwise.
+     */
+    public boolean isTraceEnabled() {
+        return isEnabled(Level.TRACE);
+    }
+
+    /**
+     * Issue a log msg with a level of TRACE.
+     *
+     * @param message the message
+     */
+    public void trace(Object message) {
+        doLog(Level.TRACE, FQCN, message, null, null);
+    }
+
+    /**
+     * Issue a log msg and throwable with a level of TRACE.
+     *
+     * @param message the message
+     * @param t the throwable
+     */
+    public void trace(Object message, Throwable t) {
+        doLog(Level.TRACE, FQCN, message, null, t);
+    }
+
+    /**
+     * Issue a log msg and throwable with a level of TRACE and a specific logger class name.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param t the throwable
+     */
+    public void trace(String loggerFqcn, Object message, Throwable t) {
+        doLog(Level.TRACE, loggerFqcn, message, null, t);
+    }
+
+    /**
+     * Issue a log message with parameters with a level of TRACE.
+     *
+     * @param message the message
+     * @param params the message parameters
+     */
+    public void trace(Object message, Object[] params) {
+        doLog(Level.TRACE, FQCN, message, params, null);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of TRACE.
+     *
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void trace(Object message, Object[] params, Throwable t) {
+        doLog(Level.TRACE, FQCN, message, params, t);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of TRACE.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void trace(String loggerFqcn, Object message, Object[] params, Throwable t) {
+        doLog(Level.TRACE, loggerFqcn, message, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of TRACE.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param params the parameters
+     */
+    public void tracef(String format, Object... params) {
+        doLogf(Level.TRACE, FQCN, format, params, null);
+    }
+
+    /**
+     * Issue a formatted log message with a level of TRACE.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the sole parameter
+     */
+    public void tracef(String format, Object param1) {
+        if (isEnabled(Level.TRACE)) {
+            doLogf(Level.TRACE, FQCN, format, new Object[] { param1 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of TRACE.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void tracef(String format, Object param1, Object param2) {
+        if (isEnabled(Level.TRACE)) {
+            doLogf(Level.TRACE, FQCN, format, new Object[] { param1, param2 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of TRACE.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void tracef(String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.TRACE)) {
+            doLogf(Level.TRACE, FQCN, format, new Object[] { param1, param2, param3 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of TRACE.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param params the parameters
+     */
+    public void tracef(Throwable t, String format, Object... params) {
+        doLogf(Level.TRACE, FQCN, format, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of TRACE.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the sole parameter
+     */
+    public void tracef(Throwable t, String format, Object param1) {
+        if (isEnabled(Level.TRACE)) {
+            doLogf(Level.TRACE, FQCN, format, new Object[] { param1 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of TRACE.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void tracef(Throwable t, String format, Object param1, Object param2) {
+        if (isEnabled(Level.TRACE)) {
+            doLogf(Level.TRACE, FQCN, format, new Object[] { param1, param2 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of TRACE.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void tracef(Throwable t, String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.TRACE)) {
+            doLogf(Level.TRACE, FQCN, format, new Object[] { param1, param2, param3 }, t);
+        }
+    }
+
+    /**
+     * Check to see if the DEBUG level is enabled for this logger.
+     *
+     * @return true if a {@link #debug(Object)} method invocation would pass the msg to the configured appenders, false
+     *         otherwise.
+     */
+    public boolean isDebugEnabled() {
+        return isEnabled(Level.DEBUG);
+    }
+
+    /**
+     * Issue a log message with a level of DEBUG.
+     *
+     * @param message the message
+     */
+    public void debug(Object message) {
+        doLog(Level.DEBUG, FQCN, message, null, null);
+    }
+
+    /**
+     * Issue a log message and throwable with a level of DEBUG.
+     *
+     * @param message the message
+     * @param t the throwable
+     */
+    public void debug(Object message, Throwable t) {
+        doLog(Level.DEBUG, FQCN, message, null, t);
+    }
+
+    /**
+     * Issue a log message and throwable with a level of DEBUG and a specific logger class name.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param t the throwable
+     */
+    public void debug(String loggerFqcn, Object message, Throwable t) {
+        doLog(Level.DEBUG, loggerFqcn, message, null, t);
+    }
+
+    /**
+     * Issue a log message with parameters with a level of DEBUG.
+     *
+     * @param message the message
+     * @param params the message parameters
+     */
+    public void debug(Object message, Object[] params) {
+        doLog(Level.DEBUG, FQCN, message, params, null);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of DEBUG.
+     *
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void debug(Object message, Object[] params, Throwable t) {
+        doLog(Level.DEBUG, FQCN, message, params, t);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of DEBUG.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void debug(String loggerFqcn, Object message, Object[] params, Throwable t) {
+        doLog(Level.DEBUG, loggerFqcn, message, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of DEBUG.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param params the parameters
+     */
+    public void debugf(String format, Object... params) {
+        doLogf(Level.DEBUG, FQCN, format, params, null);
+    }
+
+    /**
+     * Issue a formatted log message with a level of DEBUG.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the sole parameter
+     */
+    public void debugf(String format, Object param1) {
+        if (isEnabled(Level.DEBUG)) {
+            doLogf(Level.DEBUG, FQCN, format, new Object[] { param1 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of DEBUG.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void debugf(String format, Object param1, Object param2) {
+        if (isEnabled(Level.DEBUG)) {
+            doLogf(Level.DEBUG, FQCN, format, new Object[] { param1, param2 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of DEBUG.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void debugf(String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.DEBUG)) {
+            doLogf(Level.DEBUG, FQCN, format, new Object[] { param1, param2, param3 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of DEBUG.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param params the parameters
+     */
+    public void debugf(Throwable t, String format, Object... params) {
+        doLogf(Level.DEBUG, FQCN, format, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of DEBUG.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the sole parameter
+     */
+    public void debugf(Throwable t, String format, Object param1) {
+        if (isEnabled(Level.DEBUG)) {
+            doLogf(Level.DEBUG, FQCN, format, new Object[] { param1 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of DEBUG.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void debugf(Throwable t, String format, Object param1, Object param2) {
+        if (isEnabled(Level.DEBUG)) {
+            doLogf(Level.DEBUG, FQCN, format, new Object[] { param1, param2 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of DEBUG.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void debugf(Throwable t, String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.DEBUG)) {
+            doLogf(Level.DEBUG, FQCN, format, new Object[] { param1, param2, param3 }, t);
+        }
+    }
+
+    /**
+     * Check to see if the INFO level is enabled for this logger.
+     *
+     * @return true if a {@link #info(Object)} method invocation would pass the msg to the configured appenders, false
+     *         otherwise.
+     */
+    public boolean isInfoEnabled() {
+        return isEnabled(Level.INFO);
+    }
+
+    /**
+     * Issue a log message with a level of INFO.
+     *
+     * @param message the message
+     */
+    public void info(Object message) {
+        doLog(Level.INFO, FQCN, message, null, null);
+    }
+
+    /**
+     * Issue a log message and throwable with a level of INFO.
+     *
+     * @param message the message
+     * @param t the throwable
+     */
+    public void info(Object message, Throwable t) {
+        doLog(Level.INFO, FQCN, message, null, t);
+    }
+
+    /**
+     * Issue a log message and throwable with a level of INFO and a specific logger class name.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param t the throwable
+     */
+    public void info(String loggerFqcn, Object message, Throwable t) {
+        doLog(Level.INFO, loggerFqcn, message, null, t);
+    }
+
+    /**
+     * Issue a log message with parameters with a level of INFO.
+     *
+     * @param message the message
+     * @param params the message parameters
+     */
+    public void info(Object message, Object[] params) {
+        doLog(Level.INFO, FQCN, message, params, null);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of INFO.
+     *
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void info(Object message, Object[] params, Throwable t) {
+        doLog(Level.INFO, FQCN, message, params, t);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of INFO.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void info(String loggerFqcn, Object message, Object[] params, Throwable t) {
+        doLog(Level.INFO, loggerFqcn, message, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of INFO.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param params the parameters
+     */
+    public void infof(String format, Object... params) {
+        doLogf(Level.INFO, FQCN, format, params, null);
+    }
+
+    /**
+     * Issue a formatted log message with a level of INFO.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the sole parameter
+     */
+    public void infof(String format, Object param1) {
+        if (isEnabled(Level.INFO)) {
+            doLogf(Level.INFO, FQCN, format, new Object[] { param1 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of INFO.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void infof(String format, Object param1, Object param2) {
+        if (isEnabled(Level.INFO)) {
+            doLogf(Level.INFO, FQCN, format, new Object[] { param1, param2 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of INFO.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void infof(String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.INFO)) {
+            doLogf(Level.INFO, FQCN, format, new Object[] { param1, param2, param3 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of INFO.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param params the parameters
+     */
+    public void infof(Throwable t, String format, Object... params) {
+        doLogf(Level.INFO, FQCN, format, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of INFO.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the sole parameter
+     */
+    public void infof(Throwable t, String format, Object param1) {
+        if (isEnabled(Level.INFO)) {
+            doLogf(Level.INFO, FQCN, format, new Object[] { param1 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of INFO.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void infof(Throwable t, String format, Object param1, Object param2) {
+        if (isEnabled(Level.INFO)) {
+            doLogf(Level.INFO, FQCN, format, new Object[] { param1, param2 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of INFO.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void infof(Throwable t, String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.INFO)) {
+            doLogf(Level.INFO, FQCN, format, new Object[] { param1, param2, param3 }, t);
+        }
+    }
+
+    /**
+     * Issue a log message with a level of WARN.
+     *
+     * @param message the message
+     */
+    public void warn(Object message) {
+        doLog(Level.WARN, FQCN, message, null, null);
+    }
+
+    /**
+     * Issue a log message and throwable with a level of WARN.
+     *
+     * @param message the message
+     * @param t the throwable
+     */
+    public void warn(Object message, Throwable t) {
+        doLog(Level.WARN, FQCN, message, null, t);
+    }
+
+    /**
+     * Issue a log message and throwable with a level of WARN and a specific logger class name.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param t the throwable
+     */
+    public void warn(String loggerFqcn, Object message, Throwable t) {
+        doLog(Level.WARN, loggerFqcn, message, null, t);
+    }
+
+    /**
+     * Issue a log message with parameters with a level of WARN.
+     *
+     * @param message the message
+     * @param params the message parameters
+     */
+    public void warn(Object message, Object[] params) {
+        doLog(Level.WARN, FQCN, message, params, null);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of WARN.
+     *
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void warn(Object message, Object[] params, Throwable t) {
+        doLog(Level.WARN, FQCN, message, params, t);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of WARN.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void warn(String loggerFqcn, Object message, Object[] params, Throwable t) {
+        doLog(Level.WARN, loggerFqcn, message, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of WARN.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param params the parameters
+     */
+    public void warnf(String format, Object... params) {
+        doLogf(Level.WARN, FQCN, format, params, null);
+    }
+
+    /**
+     * Issue a formatted log message with a level of WARN.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the sole parameter
+     */
+    public void warnf(String format, Object param1) {
+        if (isEnabled(Level.WARN)) {
+            doLogf(Level.WARN, FQCN, format, new Object[] { param1 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of WARN.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void warnf(String format, Object param1, Object param2) {
+        if (isEnabled(Level.WARN)) {
+            doLogf(Level.WARN, FQCN, format, new Object[] { param1, param2 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of WARN.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void warnf(String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.WARN)) {
+            doLogf(Level.WARN, FQCN, format, new Object[] { param1, param2, param3 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of WARN.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param params the parameters
+     */
+    public void warnf(Throwable t, String format, Object... params) {
+        doLogf(Level.WARN, FQCN, format, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of WARN.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the sole parameter
+     */
+    public void warnf(Throwable t, String format, Object param1) {
+        if (isEnabled(Level.WARN)) {
+            doLogf(Level.WARN, FQCN, format, new Object[] { param1 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of WARN.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void warnf(Throwable t, String format, Object param1, Object param2) {
+        if (isEnabled(Level.WARN)) {
+            doLogf(Level.WARN, FQCN, format, new Object[] { param1, param2 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of WARN.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void warnf(Throwable t, String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.WARN)) {
+            doLogf(Level.WARN, FQCN, format, new Object[] { param1, param2, param3 }, t);
+        }
+    }
+
+    /**
+     * Issue a log message with a level of ERROR.
+     *
+     * @param message the message
+     */
+    public void error(Object message) {
+        doLog(Level.ERROR, FQCN, message, null, null);
+    }
+
+    /**
+     * Issue a log message and throwable with a level of ERROR.
+     *
+     * @param message the message
+     * @param t the throwable
+     */
+    public void error(Object message, Throwable t) {
+        doLog(Level.ERROR, FQCN, message, null, t);
+    }
+
+    /**
+     * Issue a log message and throwable with a level of ERROR and a specific logger class name.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param t the throwable
+     */
+    public void error(String loggerFqcn, Object message, Throwable t) {
+        doLog(Level.ERROR, loggerFqcn, message, null, t);
+    }
+
+    /**
+     * Issue a log message with parameters with a level of ERROR.
+     *
+     * @param message the message
+     * @param params the message parameters
+     */
+    public void error(Object message, Object[] params) {
+        doLog(Level.ERROR, FQCN, message, params, null);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of ERROR.
+     *
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void error(Object message, Object[] params, Throwable t) {
+        doLog(Level.ERROR, FQCN, message, params, t);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of ERROR.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void error(String loggerFqcn, Object message, Object[] params, Throwable t) {
+        doLog(Level.ERROR, loggerFqcn, message, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of ERROR.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param params the parameters
+     */
+    public void errorf(String format, Object... params) {
+        doLogf(Level.ERROR, FQCN, format, params, null);
+    }
+
+    /**
+     * Issue a formatted log message with a level of ERROR.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the sole parameter
+     */
+    public void errorf(String format, Object param1) {
+        if (isEnabled(Level.ERROR)) {
+            doLogf(Level.ERROR, FQCN, format, new Object[] { param1 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of ERROR.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void errorf(String format, Object param1, Object param2) {
+        if (isEnabled(Level.ERROR)) {
+            doLogf(Level.ERROR, FQCN, format, new Object[] { param1, param2 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of ERROR.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void errorf(String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.ERROR)) {
+            doLogf(Level.ERROR, FQCN, format, new Object[] { param1, param2, param3 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of ERROR.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param params the parameters
+     */
+    public void errorf(Throwable t, String format, Object... params) {
+        doLogf(Level.ERROR, FQCN, format, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of ERROR.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the sole parameter
+     */
+    public void errorf(Throwable t, String format, Object param1) {
+        if (isEnabled(Level.ERROR)) {
+            doLogf(Level.ERROR, FQCN, format, new Object[] { param1 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of ERROR.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void errorf(Throwable t, String format, Object param1, Object param2) {
+        if (isEnabled(Level.ERROR)) {
+            doLogf(Level.ERROR, FQCN, format, new Object[] { param1, param2 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of ERROR.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void errorf(Throwable t, String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.ERROR)) {
+            doLogf(Level.ERROR, FQCN, format, new Object[] { param1, param2, param3 }, t);
+        }
+    }
+
+    /**
+     * Issue a log message with a level of FATAL.
+     *
+     * @param message the message
+     */
+    public void fatal(Object message) {
+        doLog(Level.FATAL, FQCN, message, null, null);
+    }
+
+    /**
+     * Issue a log message and throwable with a level of FATAL.
+     *
+     * @param message the message
+     * @param t the throwable
+     */
+    public void fatal(Object message, Throwable t) {
+        doLog(Level.FATAL, FQCN, message, null, t);
+    }
+
+    /**
+     * Issue a log message and throwable with a level of FATAL and a specific logger class name.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param t the throwable
+     */
+    public void fatal(String loggerFqcn, Object message, Throwable t) {
+        doLog(Level.FATAL, loggerFqcn, message, null, t);
+    }
+
+    /**
+     * Issue a log message with parameters with a level of FATAL.
+     *
+     * @param message the message
+     * @param params the message parameters
+     */
+    public void fatal(Object message, Object[] params) {
+        doLog(Level.FATAL, FQCN, message, params, null);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of FATAL.
+     *
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void fatal(Object message, Object[] params, Throwable t) {
+        doLog(Level.FATAL, FQCN, message, params, t);
+    }
+
+    /**
+     * Issue a log message with parameters and a throwable with a level of FATAL.
+     *
+     * @param loggerFqcn the logger class name
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable
+     */
+    public void fatal(String loggerFqcn, Object message, Object[] params, Throwable t) {
+        doLog(Level.FATAL, loggerFqcn, message, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of FATAL.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param params the parameters
+     */
+    public void fatalf(String format, Object... params) {
+        doLogf(Level.FATAL, FQCN, format, params, null);
+    }
+
+    /**
+     * Issue a formatted log message with a level of FATAL.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the sole parameter
+     */
+    public void fatalf(String format, Object param1) {
+        if (isEnabled(Level.FATAL)) {
+            doLogf(Level.FATAL, FQCN, format, new Object[] { param1 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of FATAL.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void fatalf(String format, Object param1, Object param2) {
+        if (isEnabled(Level.FATAL)) {
+            doLogf(Level.FATAL, FQCN, format, new Object[] { param1, param2 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of FATAL.
+     *
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void fatalf(String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.FATAL)) {
+            doLogf(Level.FATAL, FQCN, format, new Object[] { param1, param2, param3 }, null);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of FATAL.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param params the parameters
+     */
+    public void fatalf(Throwable t, String format, Object... params) {
+        doLogf(Level.FATAL, FQCN, format, params, t);
+    }
+
+    /**
+     * Issue a formatted log message with a level of FATAL.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the sole parameter
+     */
+    public void fatalf(Throwable t, String format, Object param1) {
+        if (isEnabled(Level.FATAL)) {
+            doLogf(Level.FATAL, FQCN, format, new Object[] { param1 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of FATAL.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void fatalf(Throwable t, String format, Object param1, Object param2) {
+        if (isEnabled(Level.FATAL)) {
+            doLogf(Level.FATAL, FQCN, format, new Object[] { param1, param2 }, t);
+        }
+    }
+
+    /**
+     * Issue a formatted log message with a level of FATAL.
+     *
+     * @param t the throwable
+     * @param format the format string, as per {@link String#format(String, Object...)}
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void fatalf(Throwable t, String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(Level.FATAL)) {
+            doLogf(Level.FATAL, FQCN, format, new Object[] { param1, param2, param3 }, t);
+        }
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param message the message
+     */
+    public void log(Level level, Object message) {
+        doLog(level, FQCN, message, null, null);
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param message the message
+     * @param params the message parameters
+     */
+    public void log(Level level, Object message, Object[] params) {
+        doLog(level, FQCN, message, params, null);
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable cause
+     */
+    public void log(Level level, Object message, Object[] params, Throwable t) {
+        doLog(level, FQCN, message, params, t);
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param loggerFqcn the logger class name
+     * @param level the level
+     * @param message the message
+     * @param params the message parameters
+     * @param t the throwable cause
+     */
+    public void log(String loggerFqcn, Level level, Object message, Object[] params, Throwable t) {
+        doLog(level, loggerFqcn, message, params, t);
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the sole parameter
+     */
+    public void logf(Level level, String format, Object param1) {
+        if (isEnabled(level)) {
+            doLogf(level, FQCN, format, new Object[] { param1 }, null);
+        }
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void logf(Level level, String format, Object param1, Object param2) {
+        if (isEnabled(level)) {
+            doLogf(level, FQCN, format, new Object[] { param1, param2 }, null);
+        }
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void logf(Level level, String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(level)) {
+            doLogf(level, FQCN, format, new Object[] { param1, param2, param3 }, null);
+        }
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param params the message parameters
+     */
+    public void logf(Level level, String format, Object... params) {
+        doLogf(level, FQCN, format, params, null);
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param t the throwable cause
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the sole parameter
+     */
+    public void logf(Level level, Throwable t, String format, Object param1) {
+        if (isEnabled(level)) {
+            doLogf(level, FQCN, format, new Object[] { param1 }, t);
+        }
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param t the throwable cause
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void logf(Level level, Throwable t, String format, Object param1, Object param2) {
+        if (isEnabled(level)) {
+            doLogf(level, FQCN, format, new Object[] { param1, param2 }, t);
+        }
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param t the throwable cause
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void logf(Level level, Throwable t, String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(level)) {
+            doLogf(level, FQCN, format, new Object[] { param1, param2, param3 }, t);
+        }
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param level the level
+     * @param t the throwable cause
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param params the message parameters
+     */
+    public void logf(Level level, Throwable t, String format, Object... params) {
+        doLogf(level, FQCN, format, params, t);
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param loggerFqcn the logger class name
+     * @param level the level
+     * @param t the throwable cause
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the sole parameter
+     */
+    public void logf(String loggerFqcn, Level level, Throwable t, String format, Object param1) {
+        if (isEnabled(level)) {
+            doLogf(level, loggerFqcn, format, new Object[] { param1 }, t);
+        }
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param loggerFqcn the logger class name
+     * @param level the level
+     * @param t the throwable cause
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     */
+    public void logf(String loggerFqcn, Level level, Throwable t, String format, Object param1, Object param2) {
+        if (isEnabled(level)) {
+            doLogf(level, loggerFqcn, format, new Object[] { param1, param2 }, t);
+        }
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param loggerFqcn the logger class name
+     * @param level the level
+     * @param t the throwable cause
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param param1 the first parameter
+     * @param param2 the second parameter
+     * @param param3 the third parameter
+     */
+    public void logf(String loggerFqcn, Level level, Throwable t, String format, Object param1, Object param2, Object param3) {
+        if (isEnabled(level)) {
+            doLogf(level, loggerFqcn, format, new Object[] { param1, param2, param3 }, t);
+        }
+    }
+
+    /**
+     * Log a message at the given level.
+     *
+     * @param loggerFqcn the logger class name
+     * @param level the level
+     * @param t the throwable cause
+     * @param format the format string as per {@link String#format(String, Object...)} or resource bundle key therefor
+     * @param params the message parameters
+     */
+    public void logf(String loggerFqcn, Level level, Throwable t, String format, Object... params) {
+        doLogf(level, loggerFqcn, format, params, t);
+    }
+
+    /**
+     * Read resolver; replaces deserialized instance with a canonical instance.
+     *
+     * @return the canonical logger instance
+     */
+    protected final Object writeReplace() {
+        return new SerializedLogger(name, resourceBundleName, prefix);
+    }
+
+    /**
+     * Get a logger instance with the given name using the given resource bundle (if supported by the underlying
+     * framework).
+     *
+     * @param name the logger category name
+     * @param resourceBundleName the resource bundle name
+     *
+     * @return the logger
+     */
+    public static Logger getI18nLogger(String name, String resourceBundleName) {
+        return LoggerProviders.PROVIDER.getLogger(name, resourceBundleName, null);
+    }
+
+    /**
+     * Get a logger instance with the given name using the given resource bundle (if supported by the underlying
+     * framework).
+     *
+     * @param name the logger category name
+     * @param resourceBundleName the resource bundle name
+     * @param prefix the log message ID subsystem prefix to use
+     *
+     * @return the logger
+     */
+    public static Logger getI18nLogger(String name, String resourceBundleName, String prefix) {
+        return LoggerProviders.PROVIDER.getLogger(name, resourceBundleName, prefix);
+    }
+
+    /**
+     * Get a logger instance with the given name using the given resource bundle (if supported by the underlying
+     * framework).
+     *
+     * @param clazz the class whose name will be used as the logger category name
+     * @param resourceBundleName the resource bundle name
+     *
+     * @return the logger
+     */
+    public static Logger getI18nLogger(Class<?> clazz, String resourceBundleName) {
+        return getI18nLogger(clazz.getName(), resourceBundleName);
+    }
+
+    /**
+     * Get a Logger instance given the logger name.
+     *
+     * @param name the logger name
+     *
+     * @return the logger
+     */
+    public static Logger getLogger(String name) {
+        return getI18nLogger(name, null);
+    }
+
+    /**
+     * Get a Logger instance given the logger name with the given suffix.
+     * <p/>
+     * <p>This will include a logger separator between logger name and suffix.
+     *
+     * @param name the logger name
+     * @param suffix a suffix to append to the logger name
+     *
+     * @return the logger
+     */
+    public static Logger getLogger(String name, String suffix) {
+        return getLogger(name == null || name.length() == 0 ? suffix : name + "." + suffix);
+    }
+
+    /**
+     * Get a Logger instance given the name of a class. This simply calls create(clazz.getName()).
+     *
+     * @param clazz the Class whose name will be used as the logger name
+     *
+     * @return the logger
+     */
+    public static Logger getLogger(Class<?> clazz) {
+        return getLogger(clazz.getName());
+    }
+
+    /**
+     * Get a Logger instance given the name of a class with the given suffix.
+     * <p/>
+     * <p>This will include a logger separator between logger name and suffix
+     *
+     * @param clazz the Class whose name will be used as the logger name
+     * @param suffix a suffix to append to the logger name
+     *
+     * @return the logger
+     */
+    public static Logger getLogger(Class<?> clazz, String suffix) {
+        return getLogger(clazz.getName(), suffix);
+    }
+}
\ No newline at end of file

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/LoggerProvider.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/LoggerProvider.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/LoggerProvider.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.util.Map;
+
+public interface LoggerProvider {
+    Logger getLogger(String name, String resourceBundleName, String prefix);
+
+    void putMdc(String key, Object value);
+
+    Object getMdc(String key);
+
+    void removeMdc(String key);
+
+    Map<String, Object> getMdcMap();
+
+    void clearNdc();
+
+    String getNdc();
+
+    int getNdcDepth();
+
+    String popNdc();
+
+    String peekNdc();
+
+    void pushNdc(String message);
+
+    void setNdcMaxDepth(int maxDepth);
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/LoggerProviders.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/LoggerProviders.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/LoggerProviders.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,61 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.util.logging.LogManager;
+
+final class LoggerProviders {
+    static final LoggerProvider PROVIDER = findProvider();
+
+    private static LoggerProvider findProvider() {
+        final LogManager jdkLogManager = LogManager.getLogManager();
+        if (jdkLogManager.getClass().getName().equals("org.jboss.logmanager.LogManager")) {
+            return new JBossLogManagerProvider();
+        }
+        final ClassLoader cl = getClassLoader();
+        try {
+            Class.forName("org.apache.log4j.LogManager", true, cl);
+            return new Log4jLoggerProvider();
+        } catch (Throwable t) {
+            // nope...
+        }
+        try {
+            // only use slf4j if Logback is in use
+            Class.forName("ch.qos.logback.classic.Logger", false, cl);
+            return new Slf4jLoggerProvider();
+        } catch (Throwable t) {
+            // nope...
+        }
+        return new JDKLoggerProvider();
+    }
+
+    private static ClassLoader getClassLoader() {
+        // Since the impl classes refer to the back-end frameworks directly, if this classloader can't find the target
+        // log classes, then it doesn't really matter if they're possibly available from the TCCL because we won't be
+        // able to find it anyway
+        return LoggerProviders.class.getClassLoader();
+    }
+
+    private LoggerProviders() {
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/SerializedLogger.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/SerializedLogger.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/SerializedLogger.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,48 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.io.Serializable;
+
+final class SerializedLogger implements Serializable {
+
+    private static final long serialVersionUID = 508779982439435831L;
+
+    private final String name;
+    private final String resourceBundleName;
+    private final String prefix;
+
+    SerializedLogger(final String name, final String resourceBundleName, final String prefix) {
+        this.name = name;
+        this.resourceBundleName = resourceBundleName;
+        this.prefix = prefix;
+    }
+
+    protected Object readResolve() {
+        if (resourceBundleName != null) {
+            return Logger.getI18nLogger(name, resourceBundleName);
+        } else {
+            return Logger.getLogger(name);
+        }
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLocationAwareLogger.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLocationAwareLogger.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLocationAwareLogger.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,76 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.text.MessageFormat;
+import org.slf4j.spi.LocationAwareLogger;
+
+final class Slf4jLocationAwareLogger extends Logger {
+
+    private static final long serialVersionUID = 8685757928087758380L;
+
+    private final LocationAwareLogger logger;
+
+    Slf4jLocationAwareLogger(final String name, final String resourceBundleName, final String prefix, final LocationAwareLogger  logger) {
+        super(name, resourceBundleName, prefix);
+        this.logger = logger;
+    }
+
+    public boolean isEnabled(final Level level) {
+        if (level != null) switch (level) {
+            case FATAL: return logger.isErrorEnabled();
+            case ERROR: return logger.isErrorEnabled();
+            case WARN:  return logger.isWarnEnabled();
+            case INFO:  return logger.isInfoEnabled();
+            case DEBUG: return logger.isDebugEnabled();
+            case TRACE: return logger.isTraceEnabled();
+        }
+        return true;
+    }
+
+    protected void doLog(final Level level, final String loggerClassName, final Object message, final Object[] parameters, final Throwable thrown) {
+        if (isEnabled(level)) {
+            final String text = parameters == null || parameters.length == 0 ? String.valueOf(message) : MessageFormat.format(String.valueOf(message), parameters);
+            logger.log(null, loggerClassName, translate(level), text, thrown);
+        }
+    }
+
+    protected void doLogf(final Level level, final String loggerClassName, final String format, final Object[] parameters, final Throwable thrown) {
+        if (isEnabled(level)) {
+            final String text = parameters == null || parameters.length == 0 ? format : String.format(format, parameters);
+            logger.log(null, loggerClassName, translate(level), text, thrown);
+        }
+    }
+
+    private static int translate(Level level) {
+        if (level != null) switch (level) {
+            case FATAL:
+            case ERROR: return LocationAwareLogger.ERROR_INT;
+            case WARN:  return LocationAwareLogger.WARN_INT;
+            case INFO:  return LocationAwareLogger.INFO_INT;
+            case DEBUG: return LocationAwareLogger.DEBUG_INT;
+            case TRACE: return LocationAwareLogger.TRACE_INT;
+        }
+        return LocationAwareLogger.TRACE_INT;
+    }
+}
\ No newline at end of file

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLogger.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLogger.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLogger.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,97 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.text.MessageFormat;
+
+final class Slf4jLogger extends Logger {
+
+    private static final long serialVersionUID = 8685757928087758380L;
+
+    private final org.slf4j.Logger logger;
+
+    Slf4jLogger(final String name, final String resourceBundleName, final String prefix, final org.slf4j.Logger logger) {
+        super(name, resourceBundleName, prefix);
+        this.logger = logger;
+    }
+
+    public boolean isEnabled(final Level level) {
+        if (level != null) switch (level) {
+            case FATAL: return logger.isErrorEnabled();
+            case ERROR: return logger.isErrorEnabled();
+            case WARN:  return logger.isWarnEnabled();
+            case INFO:  return logger.isInfoEnabled();
+            case DEBUG: return logger.isDebugEnabled();
+            case TRACE: return logger.isTraceEnabled();
+        }
+        return true;
+    }
+
+    protected void doLog(final Level level, final String loggerClassName, final Object message, final Object[] parameters, final Throwable thrown) {
+        if (isEnabled(level)) {
+            final String text = parameters == null || parameters.length == 0 ? String.valueOf(message) : MessageFormat.format(String.valueOf(message), parameters);
+            switch (level) {
+                case FATAL:
+                case ERROR:
+                    logger.error(text, thrown);
+                    return;
+                case WARN:
+                    logger.warn(text, thrown);
+                    return;
+                case INFO:
+                    logger.info(text, thrown);
+                    return;
+                case DEBUG:
+                    logger.debug(text, thrown);
+                    return;
+                case TRACE:
+                    logger.trace(text, thrown);
+                    return;
+            }
+        }
+    }
+
+    protected void doLogf(final Level level, final String loggerClassName, final String format, final Object[] parameters, final Throwable thrown) {
+        if (isEnabled(level)) {
+            final String text = parameters == null || parameters.length == 0 ? format : String.format(format, parameters);
+            switch (level) {
+                case FATAL:
+                case ERROR:
+                    logger.error(text, thrown);
+                    return;
+                case WARN:
+                    logger.warn(text, thrown);
+                    return;
+                case INFO:
+                    logger.info(text, thrown);
+                    return;
+                case DEBUG:
+                    logger.debug(text, thrown);
+                    return;
+                case TRACE:
+                    logger.trace(text, thrown);
+                    return;
+            }
+        }
+    }
+}

Added: jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLoggerProvider.java
===================================================================
--- jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLoggerProvider.java	                        (rev 0)
+++ jboss-logging/trunk/src/main/java/org/jboss/logging/Slf4jLoggerProvider.java	2010-02-09 01:07:37 UTC (rev 4001)
@@ -0,0 +1,57 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.logging;
+
+import java.util.Map;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.slf4j.spi.LocationAwareLogger;
+
+final class Slf4jLoggerProvider extends AbstractLoggerProvider implements LoggerProvider {
+
+    public Logger getLogger(final String name, final String resourceBundleName, final String prefix) {
+        org.slf4j.Logger l = LoggerFactory.getLogger(name);
+        if (l instanceof LocationAwareLogger) {
+            return new Slf4jLocationAwareLogger(name, resourceBundleName, prefix, (LocationAwareLogger) l);
+        } else {
+            return new Slf4jLogger(name, resourceBundleName, prefix, l);
+        }
+    }
+
+    public void putMdc(final String key, final Object value) {
+        MDC.put(key, String.valueOf(value));
+    }
+
+    public Object getMdc(final String key) {
+        return MDC.get(key);
+    }
+
+    public void removeMdc(final String key) {
+        MDC.remove(key);
+    }
+
+    @SuppressWarnings({ "unchecked" })
+    public Map<String, Object> getMdcMap() {
+        return MDC.getCopyOfContextMap();
+    }
+}



More information about the jboss-svn-commits mailing list