Author: ceki
Date: Wed Oct  1 18:20:09 2008
New Revision: 1154

Added:
   slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/ext/LoggerWrapper.java
   slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/ext/XLoggerFactory.java
Modified:
   slf4j/trunk/slf4j-ext/pom.xml
   slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/ext/XLogger.java

Log:
Fixing bug 104

Modified: slf4j/trunk/slf4j-ext/pom.xml
==============================================================================
--- slf4j/trunk/slf4j-ext/pom.xml       (original)
+++ slf4j/trunk/slf4j-ext/pom.xml       Wed Oct  1 18:20:09 2008
@@ -5,7 +5,7 @@
   <parent>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-parent</artifactId>
-    <version>1.5.4-SNAPSHOT</version>
+    <version>1.5.4-SNAPSHOT
</version>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>

Added: slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/ext/LoggerWrapper.java
==============================================================================
--- (empty file)
+++ slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/ext/LoggerWrapper.java        
Wed Oct  1 18:20:09 2008
@@ -0,0 +1,868 @@
+package org.slf4j.ext;
+
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+import org.slf4j.helpers.MessageFormatter;
+import org.slf4j.spi.LocationAwareLogger;
+
+/**
+ * A helper class wrapping an org.slf4j.Logger instance
+ * preserving location information if the wrapped
+ * instance supports it.
+ * 
+ * @author Ralph Goers
+ * @author Ceki Gulcu
+ */
+public class LoggerWrapper implements Logger {
+
+  // To ensure consistency between two instances sharing the same name 
(homonyms)
+  // a LoggerWrapper should not contain any state beyond 
+  // the Logger instance it wraps.
+  // Note that 'instanceofLAL' directly depends on Logger.
+  // fqcn depend on the caller, but its value would not be different
+  // between successive invocations of a factory class
+  
+  final Logger logger;
+  final String fqcn;
+  // is this logger instance a LocationAwareLogger
+  final boolean instanceofLAL;
+  
+  public LoggerWrapper(Logger logger, String fcqn) {
+    this.logger = logger;
+    this.fqcn = fcqn;
+    if (logger instanceof LocationAwareLogger) {
+      instanceofLAL = true;
+    } else {
+      instanceofLAL = false;
+    }
+  }
+  
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public boolean isTraceEnabled() {
+    return logger.isTraceEnabled();
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public boolean isTraceEnabled(Marker marker) {
+    return logger.isTraceEnabled(marker);
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void trace(String msg) {
+    if (!logger.isTraceEnabled())
+      return;
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.TRACE_INT, msg, null);
+    } else {
+      logger.trace(msg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void trace(String format, Object arg) {
+    if (!logger.isTraceEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.TRACE_INT, formattedMessage, null);
+    } else {
+      logger.trace(format, arg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void trace(String format, Object arg1, Object arg2) {
+    if (!logger.isTraceEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg1, arg2);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.TRACE_INT, formattedMessage, null);
+    } else {
+      logger.trace(format, arg1, arg2);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void trace(String format, Object[] argArray) {
+    if (!logger.isTraceEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.arrayFormat(format, argArray);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.TRACE_INT, formattedMessage, null);
+    } else {
+      logger.trace(format, argArray);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void trace(String msg, Throwable t) {
+    if (!logger.isTraceEnabled())
+      return;
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.TRACE_INT, msg, t);
+    } else {
+      logger.trace(msg, t);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void trace(Marker marker, String msg) {
+    if (!logger.isTraceEnabled())
+      return;
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.TRACE_INT, msg, null);
+    } else {
+      logger.trace(marker, msg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void trace(Marker marker, String format, Object arg) {
+    if (!logger.isTraceEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.TRACE_INT, formattedMessage, null);
+    } else {
+      logger.trace(marker, format, arg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void trace(Marker marker, String format, Object arg1, Object arg2) {
+    if (!logger.isTraceEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg1, arg2);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.TRACE_INT, formattedMessage, null);
+    } else {
+      logger.trace(marker, format, arg1, arg2);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void trace(Marker marker, String format, Object[] argArray) {
+    if (!logger.isTraceEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.arrayFormat(format, argArray);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.TRACE_INT, formattedMessage, null);
+    } else {
+      logger.trace(marker, format, argArray);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void trace(Marker marker, String msg, Throwable t) {
+    if (!logger.isTraceEnabled())
+      return;
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.TRACE_INT, msg, t);
+    } else {
+      logger.trace(marker, msg, t);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public boolean isDebugEnabled() {
+    return logger.isDebugEnabled();
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public boolean isDebugEnabled(Marker marker) {
+    return logger.isDebugEnabled(marker);
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void debug(String msg) {
+    if (!logger.isDebugEnabled())
+      return;
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.DEBUG_INT, msg, null);
+    } else {
+      logger.debug(msg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void debug(String format, Object arg) {
+    if (!logger.isDebugEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.DEBUG_INT, formattedMessage, null);
+    } else {
+      logger.debug(format, arg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void debug(String format, Object arg1, Object arg2) {
+    if (!logger.isDebugEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg1, arg2);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.DEBUG_INT, formattedMessage, null);
+    } else {
+      logger.debug(format, arg1, arg2);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void debug(String format, Object[] argArray) {
+    if (!logger.isDebugEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.arrayFormat(format, argArray);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.DEBUG_INT, formattedMessage, null);
+    } else {
+      logger.debug(format, argArray);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void debug(String msg, Throwable t) {
+    if (!logger.isDebugEnabled())
+      return;
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.DEBUG_INT, msg, t);
+    } else {
+      logger.debug(msg, t);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void debug(Marker marker, String msg) {
+    if (!logger.isDebugEnabled())
+      return;
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.DEBUG_INT, msg, null);
+    } else {
+      logger.debug(marker, msg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void debug(Marker marker, String format, Object arg) {
+    if (!logger.isDebugEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.DEBUG_INT, formattedMessage, null);
+    } else {
+      logger.debug(marker, format, arg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void debug(Marker marker, String format, Object arg1, Object arg2) {
+    if (!logger.isDebugEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg1, arg2);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.DEBUG_INT, formattedMessage, null);
+    } else {
+      logger.debug(marker, format, arg1, arg2);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void debug(Marker marker, String format, Object[] argArray) {
+    if (!logger.isDebugEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.arrayFormat(format, argArray);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.DEBUG_INT, formattedMessage, null);
+    } else {
+      logger.debug(marker, format, argArray);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void debug(Marker marker, String msg, Throwable t) {
+    if (!logger.isDebugEnabled())
+      return;
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.DEBUG_INT, msg, t);
+    } else {
+      logger.debug(marker, msg, t);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public boolean isInfoEnabled() {
+    return logger.isInfoEnabled();
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public boolean isInfoEnabled(Marker marker) {
+    return logger.isInfoEnabled(marker);
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void info(String msg) {
+    if (!logger.isInfoEnabled())
+      return;
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.INFO_INT, msg, null);
+    } else {
+      logger.info(msg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void info(String format, Object arg) {
+    if (!logger.isInfoEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.INFO_INT, formattedMessage, null);
+    } else {
+      logger.info(format, arg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void info(String format, Object arg1, Object arg2) {
+    if (!logger.isInfoEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg1, arg2);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.INFO_INT, formattedMessage, null);
+    } else {
+      logger.info(format, arg1, arg2);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void info(String format, Object[] argArray) {
+    if (!logger.isInfoEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.arrayFormat(format, argArray);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.INFO_INT, formattedMessage, null);
+    } else {
+      logger.info(format, argArray);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void info(String msg, Throwable t) {
+    if (!logger.isInfoEnabled())
+      return;
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.INFO_INT, msg, t);
+    } else {
+      logger.info(msg, t);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void info(Marker marker, String msg) {
+    if (!logger.isInfoEnabled())
+      return;
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.INFO_INT, msg, null);
+    } else {
+      logger.info(marker, msg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void info(Marker marker, String format, Object arg) {
+    if (!logger.isInfoEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.INFO_INT, formattedMessage, null);
+    } else {
+      logger.info(marker, format, arg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void info(Marker marker, String format, Object arg1, Object arg2) {
+    if (!logger.isInfoEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg1, arg2);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.INFO_INT, formattedMessage, null);
+    } else {
+      logger.info(marker, format, arg1, arg2);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void info(Marker marker, String format, Object[] argArray) {
+    if (!logger.isInfoEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.arrayFormat(format, argArray);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.INFO_INT, formattedMessage, null);
+    } else {
+      logger.info(marker, format, argArray);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void info(Marker marker, String msg, Throwable t) {
+    if (!logger.isInfoEnabled())
+      return;
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.INFO_INT, msg, t);
+    } else {
+      logger.info(marker, msg, t);
+    }
+  }
+
+  public boolean isWarnEnabled() {
+    return logger.isWarnEnabled();
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public boolean isWarnEnabled(Marker marker) {
+    return logger.isWarnEnabled(marker);
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void warn(String msg) {
+    if (!logger.isWarnEnabled())
+      return;
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.WARN_INT, msg, null);
+    } else {
+      logger.warn(msg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void warn(String format, Object arg) {
+    if (!logger.isWarnEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.WARN_INT, formattedMessage, null);
+    } else {
+      logger.warn(format, arg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void warn(String format, Object arg1, Object arg2) {
+    if (!logger.isWarnEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg1, arg2);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.WARN_INT, formattedMessage, null);
+    } else {
+      logger.warn(format, arg1, arg2);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void warn(String format, Object[] argArray) {
+    if (!logger.isWarnEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.arrayFormat(format, argArray);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.WARN_INT, formattedMessage, null);
+    } else {
+      logger.warn(format, argArray);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void warn(String msg, Throwable t) {
+    if (!logger.isWarnEnabled())
+      return;
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.WARN_INT, msg, t);
+    } else {
+      logger.warn(msg, t);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void warn(Marker marker, String msg) {
+    if (!logger.isWarnEnabled())
+      return;
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.WARN_INT, msg, null);
+    } else {
+      logger.warn(marker, msg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void warn(Marker marker, String format, Object arg) {
+    if (!logger.isWarnEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.WARN_INT, formattedMessage, null);
+    } else {
+      logger.warn(marker, format, arg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void warn(Marker marker, String format, Object arg1, Object arg2) {
+    if (!logger.isWarnEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg1, arg2);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.WARN_INT, formattedMessage, null);
+    } else {
+      logger.warn(marker, format, arg1, arg2);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void warn(Marker marker, String format, Object[] argArray) {
+    if (!logger.isWarnEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.arrayFormat(format, argArray);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.WARN_INT, formattedMessage, null);
+    } else {
+      logger.warn(marker, format, argArray);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void warn(Marker marker, String msg, Throwable t) {
+    if (!logger.isWarnEnabled())
+      return;
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.WARN_INT, msg, t);
+    } else {
+      logger.warn(marker, msg, t);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public boolean isErrorEnabled() {
+    return logger.isErrorEnabled();
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public boolean isErrorEnabled(Marker marker) {
+    return logger.isErrorEnabled(marker);
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void error(String msg) {
+    if (!logger.isErrorEnabled())
+      return;
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.ERROR_INT, msg, null);
+    } else {
+      logger.error(msg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void error(String format, Object arg) {
+    if (!logger.isErrorEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.ERROR_INT, formattedMessage, null);
+    } else {
+      logger.error(format, arg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void error(String format, Object arg1, Object arg2) {
+    if (!logger.isErrorEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg1, arg2);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.ERROR_INT, formattedMessage, null);
+    } else {
+      logger.error(format, arg1, arg2);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void error(String format, Object[] argArray) {
+    if (!logger.isErrorEnabled())
+      return;
+
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.arrayFormat(format, argArray);
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.ERROR_INT, formattedMessage, null);
+    } else {
+      logger.error(format, argArray);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void error(String msg, Throwable t) {
+    if (!logger.isErrorEnabled())
+      return;
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(null, fqcn,
+          LocationAwareLogger.ERROR_INT, msg, t);
+    } else {
+      logger.error(msg, t);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void error(Marker marker, String msg) {
+    if (!logger.isErrorEnabled())
+      return;
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.ERROR_INT, msg, null);
+    } else {
+      logger.error(marker, msg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void error(Marker marker, String format, Object arg) {
+    if (!logger.isErrorEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.ERROR_INT, formattedMessage, null);
+    } else {
+      logger.error(marker, format, arg);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void error(Marker marker, String format, Object arg1, Object arg2) {
+    if (!logger.isErrorEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.format(format, arg1, arg2);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.ERROR_INT, formattedMessage, null);
+    } else {
+      logger.error(marker, format, arg1, arg2);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void error(Marker marker, String format, Object[] argArray) {
+    if (!logger.isErrorEnabled())
+      return;
+    if (instanceofLAL) {
+      String formattedMessage = MessageFormatter.arrayFormat(format, argArray);
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.ERROR_INT, formattedMessage, null);
+    } else {
+      logger.error(marker, format, argArray);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public void error(Marker marker, String msg, Throwable t) {
+    if (!logger.isErrorEnabled())
+      return;
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(marker, fqcn,
+          LocationAwareLogger.ERROR_INT, msg, t);
+    } else {
+      logger.error(marker, msg, t);
+    }
+  }
+
+  /**
+   * Delegate to the appropriate method of the underlying logger.
+   */
+  public String getName() {
+    return logger.getName();
+  }
+}

Modified: slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/ext/XLogger.java
==============================================================================
--- slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/ext/XLogger.java      
(original)
+++ slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/ext/XLogger.java      Wed Oct 
 1 18:20:09 2008
@@ -4,7 +4,6 @@
 import org.slf4j.Marker;
 import org.slf4j.MarkerFactory;
 import org.slf4j.helpers.MessageFormatter;
-import org.slf4j.helpers.NOPLogger;
 import org.slf4j.spi.LocationAwareLogger;
 
 /**
@@ -14,7 +13,7 @@
  * @author Ralph Goers
  * @author Ceki Gulcu
  */
-public class XLogger implements Logger {
+public class XLogger extends LoggerWrapper implements Logger {
 
   private static final String FQCN = XLogger.class.getName();
   static Marker FLOW_MARKER = MarkerFactory.getMarker("FLOW");
@@ -48,22 +47,14 @@
     ENTRY_MESSAGE_ARRAY[4] = ENTRY_MESSAGE_4;
   }
 
-  final Logger logger;
-
   /**
    * Given an underlying logger, constuct an XLogger
    * 
-   * @param logger underlying logger
+   * @param logger
+   *                underlying logger
    */
   public XLogger(Logger logger) {
-
-    if (logger instanceof LocationAwareLogger) {
-      this.logger = logger;
-    } else {
-      // if the logger is not location aware, assume that
-      // there is no point in further effort
-      this.logger = NOPLogger.NOP_LOGGER;
-    }
+    super(logger, FQCN);
   }
 
   /**
@@ -73,7 +64,7 @@
    *                supplied parameters
    */
   public void entry(Object... argArray) {
-    if (logger.isTraceEnabled(ENTRY_MARKER)) {
+    if (instanceofLAL && logger.isTraceEnabled(ENTRY_MARKER)) {
       String messagePattern = null;
       if (argArray.length <= ENTRY_MESSAGE_ARRAY_LEN) {
         messagePattern = ENTRY_MESSAGE_ARRAY[argArray.length];
@@ -91,7 +82,7 @@
    * Log method exit
    */
   public void exit() {
-    if (logger.isTraceEnabled(ENTRY_MARKER)) {
+    if (instanceofLAL && logger.isTraceEnabled(ENTRY_MARKER)) {
       ((LocationAwareLogger) logger).log(EXIT_MARKER, FQCN,
           LocationAwareLogger.TRACE_INT, EXIT_MESSAGE_0, null);
     }
@@ -104,7 +95,7 @@
    *                The result of the method being exited
    */
   public void exit(Object result) {
-    if (logger.isTraceEnabled(ENTRY_MARKER)) {
+    if (instanceofLAL && logger.isTraceEnabled(ENTRY_MARKER)) {
       String formattedMessage = MessageFormatter.format(EXIT_MESSAGE_0, 
result);
       ((LocationAwareLogger) logger).log(EXIT_MARKER, FQCN,
           LocationAwareLogger.TRACE_INT, formattedMessage, null);
@@ -118,8 +109,10 @@
    *                the exception being caught.
    */
   public void throwing(Throwable throwable) {
-    ((LocationAwareLogger) logger).log(THROWING_MARKER, FQCN,
-        LocationAwareLogger.ERROR_INT, "throwing", throwable);
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(THROWING_MARKER, FQCN,
+          LocationAwareLogger.ERROR_INT, "throwing", throwable);
+    }
   }
 
   /**
@@ -129,8 +122,10 @@
    *                the exception being caught.
    */
   public void catching(Throwable throwable) {
-    ((LocationAwareLogger) logger).log(CATCHING_MARKER, FQCN,
-        LocationAwareLogger.ERROR_INT, "catching", throwable);
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(CATCHING_MARKER, FQCN,
+          LocationAwareLogger.ERROR_INT, "catching", throwable);
+    }
   }
 
   private static String buildMessagePattern(int len) {
@@ -144,440 +139,4 @@
     sb.append(')');
     return sb.toString();
   }
-
-  // =====================================
-  // org.slf4j.Logger methods
-  // =====================================
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public boolean isTraceEnabled() {
-    return logger.isTraceEnabled();
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public boolean isTraceEnabled(Marker marker) {
-    return logger.isTraceEnabled(marker);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void trace(String msg) {
-    logger.trace(msg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void trace(String format, Object arg) {
-    logger.trace(format, arg);
-  }
-  
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void trace(String format, Object arg1, Object arg2) {
-    logger.trace(format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void trace(String format, Object[] argArray) {
-    logger.trace(format, argArray);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void trace(String msg, Throwable t) {
-    logger.trace(msg, t);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void trace(Marker marker, String msg) {
-    logger.trace(marker, msg);
-  }
-  
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void trace(Marker marker, String format, Object arg) {
-    logger.trace(marker, format, arg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void trace(Marker marker, String format, Object arg1, Object arg2) {
-    logger.trace(marker, format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void trace(Marker marker, String format, Object[] argArray) {
-    logger.trace(marker, format, argArray);
-  }
-  
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void trace(Marker marker, String msg, Throwable t) {
-    logger.trace(marker, msg, t);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public boolean isDebugEnabled() {
-    return logger.isDebugEnabled();
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public boolean isDebugEnabled(Marker marker) {
-    return logger.isDebugEnabled(marker);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void debug(String msg) {
-    logger.debug(msg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void debug(String format, Object arg) {
-    logger.debug(format, arg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void debug(String format, Object arg1, Object arg2) {
-    logger.debug(format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void debug(String format, Object[] argArray) {
-    logger.debug(format, argArray);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void debug(String msg, Throwable t) {
-    logger.debug(msg, t);
-  }
-  
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void debug(Marker marker, String msg) {
-    logger.debug(marker, msg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void debug(Marker marker, String format, Object arg) {
-    logger.debug(marker, format, arg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void debug(Marker marker, String format, Object arg1, Object arg2) {
-    logger.debug(marker, format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void debug(Marker marker, String format, Object[] argArray) {
-    logger.debug(marker, format, argArray);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void debug(Marker marker, String msg, Throwable t) {
-    logger.debug(marker, msg, t);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public boolean isInfoEnabled() {
-    return logger.isInfoEnabled();
-  }
-  
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public boolean isInfoEnabled(Marker marker) {
-    return logger.isInfoEnabled(marker);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void info(String msg) {
-    logger.info(msg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void info(String format, Object arg) {
-    logger.info(format, arg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void info(String format, Object arg1, Object arg2) {
-    logger.info(format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void info(String format, Object[] argArray) {
-    logger.info(format, argArray);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void info(String msg, Throwable t) {
-    logger.info(msg, t);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void info(Marker marker, String msg) {
-    logger.info(marker, msg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void info(Marker marker, String format, Object arg) {
-    logger.info(marker, format, arg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void info(Marker marker, String format, Object arg1, Object arg2) {
-    logger.info(marker, format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void info(Marker marker, String format, Object[] argArray) {
-    logger.info(marker, format, argArray);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void info(Marker marker, String msg, Throwable t) {
-    logger.info(marker, msg, t);
-  }
-
-  public boolean isWarnEnabled() {
-    return logger.isWarnEnabled();
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public boolean isWarnEnabled(Marker marker) {
-    return logger.isWarnEnabled(marker);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void warn(String msg) {
-    logger.warn(msg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void warn(String format, Object arg) {
-    logger.warn(format, arg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void warn(String format, Object arg1, Object arg2) {
-    logger.warn(format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void warn(String format, Object[] argArray) {
-    logger.warn(format, argArray);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void warn(String msg, Throwable t) {
-    logger.warn(msg, t);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void warn(Marker marker, String msg) {
-    logger.warn(marker, msg);
-  }
-  
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void warn(Marker marker, String format, Object arg) {
-    logger.warn(marker, format, arg);
-  }
-  
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void warn(Marker marker, String format, Object arg1, Object arg2) {
-    logger.warn(marker, format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void warn(Marker marker, String format, Object[] argArray) {
-    logger.warn(marker, format, argArray);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void warn(Marker marker, String msg, Throwable t) {
-    logger.warn(marker, msg, t);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public boolean isErrorEnabled() {
-    return logger.isErrorEnabled();
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public boolean isErrorEnabled(Marker marker) {
-    return logger.isErrorEnabled(marker);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void error(String msg) {
-    logger.error(msg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void error(String format, Object arg) {
-    logger.error(format, arg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void errot(String format, Object arg1, Object arg2) {
-    logger.error(format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void error(String format, Object[] argArray) {
-    logger.error(format, argArray);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void error(String msg, Throwable t) {
-    logger.error(msg, t);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void error(Marker marker, String msg) {
-    logger.error(marker, msg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void error(Marker marker, String format, Object arg) {
-    logger.error(marker, format, arg);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void error(String format, Object arg1, Object arg2) {
-    logger.error(format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void error(Marker marker, String format, Object arg1, Object arg2) {
-    logger.error(marker, format, arg1, arg2);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void error(Marker marker, String format, Object[] argArray) {
-    logger.error(marker, format, argArray);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public void error(Marker marker, String msg, Throwable t) {
-    logger.error(marker, msg, t);
-  }
-
-  /**
-   * Delegate to the appropriate method of the underlying logger.
-   */
-  public String getName() {
-    return logger.getName();
-  }
-
 }

Added: slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/ext/XLoggerFactory.java
==============================================================================
--- (empty file)
+++ slf4j/trunk/slf4j-ext/src/main/java/org/slf4j/ext/XLoggerFactory.java       
Wed Oct  1 18:20:09 2008
@@ -0,0 +1,30 @@
+package org.slf4j.ext;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 
+ * This class is essentially a wrapper around an
+ * [EMAIL PROTECTED] LoggerFactory} producing [EMAIL PROTECTED] XLogger} 
instances.
+ * 
+ * <p>Contrary to [EMAIL PROTECTED] LoggerFactory#getLogger(String)} method of 
+ * [EMAIL PROTECTED] LoggerFactory}, each call to [EMAIL PROTECTED] 
getXLogger} 
+ * produces a new instance of XLogger. This should not matter because an 
+ * XLogger instance does not have any state beyond that of the Logger instance 
+ * it wraps.
+ * 
+ * @author Ralph Goers
+ * @author Ceki Gulcu
+ */
+public class XLoggerFactory {
+
+  public static XLogger getXLogger(String name) {
+    return new XLogger(LoggerFactory.getLogger(name));
+  }
+
+  @SuppressWarnings("unchecked")
+  public static Logger getXLogger(Class clazz) {
+    return getXLogger(clazz.getName());
+  }
+}
_______________________________________________
dev mailing list
dev@slf4j.org
http://www.slf4j.org/mailman/listinfo/dev

Reply via email to