[slf4j-dev] branch, master, updated. 0124e54b54f81e10f5980b8796c80a12d4f87069

added by portage for gitosis-gentoo git-noreply at pixie.qos.ch
Tue Sep 1 22:53:41 CEST 2009


The branch, master has been updated
       via  0124e54b54f81e10f5980b8796c80a12d4f87069 (commit)
      from  50f843f7507c7a206046205d742fe7bd4e305581 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=slf4j.git;a=commit;h=0124e54b54f81e10f5980b8796c80a12d4f87069
http://github.com/ceki/slf4j/commit/0124e54b54f81e10f5980b8796c80a12d4f87069

commit 0124e54b54f81e10f5980b8796c80a12d4f87069
Author: Ceki Gulcu <ceki at qos.ch>
Date:   Tue Sep 1 22:50:54 2009 +0200

    - Localication code that actually does something useful

diff --git a/slf4j-ext/src/main/java/org/slf4j/cal10n/LLogger.java b/slf4j-ext/src/main/java/org/slf4j/cal10n/LLogger.java
deleted file mode 100644
index 08917d8..0000000
--- a/slf4j-ext/src/main/java/org/slf4j/cal10n/LLogger.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2004-2009 QOS.ch All rights reserved.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS  IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-package org.slf4j.cal10n;
-
-import org.slf4j.Logger;
-import org.slf4j.ext.LoggerWrapper;
-
-public class LLogger extends LoggerWrapper implements Logger {
-
-  private static final String FQCN = LLogger.class.getName();
-  
-  public LLogger(Logger logger) {
-    super(logger, FQCN);
-  }
-  
-  void debug(Enum<?> e, Object... args) {
-      
-  }
-  
-
-}
diff --git a/slf4j-ext/src/main/java/org/slf4j/cal10n/LocLogger.java b/slf4j-ext/src/main/java/org/slf4j/cal10n/LocLogger.java
new file mode 100644
index 0000000..4ce9d70
--- /dev/null
+++ b/slf4j-ext/src/main/java/org/slf4j/cal10n/LocLogger.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2004-2009 QOS.ch All rights reserved.
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS  IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package org.slf4j.cal10n;
+
+import java.util.Locale;
+
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+import org.slf4j.ext.LoggerWrapper;
+import org.slf4j.spi.LocationAwareLogger;
+
+import ch.qos.cal10n.IMessageConveyor;
+import ch.qos.cal10n.MessageConveyor;
+import ch.qos.cal10n.MessageParameterObj;
+
+/**
+ * A logger specialized in localized logging. Localization is based in the <a
+ * href="http://cal10n.qos.ch">CAL10N project</p>.
+ * 
+ * @author Ceki G&uuml;lc&uuml;
+ */
+public class LocLogger extends LoggerWrapper implements Logger {
+
+  private static final String FQCN = LocLogger.class.getName();
+
+  /**
+   * Every localized message logged by a LocLogger will bear this marker. It
+   * allows marker-aware implementations to perform additional processing on
+   * localized messages.
+   */
+  static Marker LOCALIZED = MarkerFactory.getMarker("LOCALIZED");
+
+  final Locale locale;
+  final IMessageConveyor imc;
+
+  public LocLogger(Logger logger, Locale locale) {
+    super(logger, LoggerWrapper.class.getName());
+    this.locale = locale;
+    imc = new MessageConveyor(locale);
+  }
+
+  /**
+   * Log a localized message at the TRACE level.
+   * 
+   * @param key
+   *          the key used for localization
+   * @param args
+   *          optional arguments
+   */
+  public void trace(Enum<?> key, Object... args) {
+    if (!logger.isTraceEnabled()) {
+      return;
+    }
+    String translatedMsg = imc.getMessage(key, args);
+    MessageParameterObj mpo = new MessageParameterObj(key, args);
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(LOCALIZED, FQCN,
+          LocationAwareLogger.TRACE_INT, translatedMsg, null);
+    } else {
+      logger.trace(LOCALIZED, translatedMsg, mpo);
+    }
+  }
+
+  /**
+   * Log a localized message at the DEBUG level.
+   * 
+   * @param key
+   *          the key used for localization
+   * @param args
+   *          optional arguments
+   */
+  public void debug(Enum<?> key, Object... args) {
+    if (!logger.isDebugEnabled()) {
+      return;
+    }
+    String translatedMsg = imc.getMessage(key, args);
+    MessageParameterObj mpo = new MessageParameterObj(key, args);
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(LOCALIZED, FQCN,
+          LocationAwareLogger.DEBUG_INT, translatedMsg, null);
+    } else {
+      logger.debug(LOCALIZED, translatedMsg, mpo);
+    }
+  }
+
+  /**
+   * Log a localized message at the INFO level.
+   * 
+   * @param key
+   *          the key used for localization
+   * @param args
+   *          optional arguments
+   */
+  public void info(Enum<?> key, Object... args) {
+    if (!logger.isInfoEnabled()) {
+      return;
+    }
+    String translatedMsg = imc.getMessage(key, args);
+    MessageParameterObj mpo = new MessageParameterObj(key, args);
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(LOCALIZED, FQCN,
+          LocationAwareLogger.INFO_INT, translatedMsg, null);
+    } else {
+      logger.info(LOCALIZED, translatedMsg, mpo);
+    }
+  }
+
+  /**
+   * Log a localized message at the WARN level.
+   * 
+   * @param key
+   *          the key used for localization
+   * @param args
+   *          optional arguments
+   */
+  public void warn(Enum<?> key, Object... args) {
+    if (!logger.isWarnEnabled()) {
+      return;
+    }
+    String translatedMsg = imc.getMessage(key, args);
+    MessageParameterObj mpo = new MessageParameterObj(key, args);
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(LOCALIZED, FQCN,
+          LocationAwareLogger.WARN_INT, translatedMsg, null);
+    } else {
+      logger.warn(LOCALIZED, translatedMsg, mpo);
+    }
+  }
+
+  /**
+   * Log a localized message at the ERROR level.
+   * 
+   * @param key
+   *          the key used for localization
+   * @param args
+   *          optional arguments
+   */
+  public void error(Enum<?> key, Object... args) {
+    if (!logger.isErrorEnabled()) {
+      return;
+    }
+    String translatedMsg = imc.getMessage(key, args);
+    MessageParameterObj mpo = new MessageParameterObj(key, args);
+
+    if (instanceofLAL) {
+      ((LocationAwareLogger) logger).log(LOCALIZED, FQCN,
+          LocationAwareLogger.ERROR_INT, translatedMsg, null);
+    } else {
+      logger.error(LOCALIZED, translatedMsg, mpo);
+    }
+  }
+
+}
diff --git a/slf4j-ext/src/main/java/org/slf4j/cal10n/LLoggerFactory.java b/slf4j-ext/src/main/java/org/slf4j/cal10n/LocLoggerFactory.java
similarity index 55%
rename from slf4j-ext/src/main/java/org/slf4j/cal10n/LLoggerFactory.java
rename to slf4j-ext/src/main/java/org/slf4j/cal10n/LocLoggerFactory.java
index 5ba4f7b..d744104 100644
--- a/slf4j-ext/src/main/java/org/slf4j/cal10n/LLoggerFactory.java
+++ b/slf4j-ext/src/main/java/org/slf4j/cal10n/LocLoggerFactory.java
@@ -21,29 +21,53 @@
  */
 package org.slf4j.cal10n;
 
+import java.util.Locale;
+
+import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class LLoggerFactory {
+/**
+ * 
+ * This class is essentially a wrapper around an {@link LoggerFactory} producing
+ * {@link LocLogger} instances.
+ * 
+ * <p>
+ * Contrary to {@link LoggerFactory#getLogger(String)} method of
+ * {@link LoggerFactory}, each call to {@link getLocLogger} produces a new
+ * instance of {@link LocLogger}. This should not matter because an XLogger
+ * instance does have any state beyond that of the {@link Logger} instance
+ * it wraps and its locale.
+ * 
+ * @author Ceki Gulcu
+ * 
+ */
+public class LocLoggerFactory {
+
+  final Locale locale;
+
+  public LocLoggerFactory(Locale locale) {
+    this.locale = locale;
+  }
 
   /**
-   * Get an LLogger instance by name.
+   * Get an LocLogger instance by name.
    * 
    * @param name
    * @return
    */
-  public static LLogger getLLogger(String name) {
-    return new LLogger(LoggerFactory.getLogger(name));
+  public LocLogger getLocLogger(String name) {
+    return new LocLogger(LoggerFactory.getLogger(name), locale);
   }
 
   /**
-   * Get a new LLogger instance by class. The returned XLogger
-   * will be named after the class.
+   * Get a new LocLogger instance by class. The returned LocLogger will be named
+   * after the class.
    * 
    * @param clazz
    * @return
    */
   @SuppressWarnings("unchecked")
-  public static LLogger getLLogger(Class clazz) {
-    return getLLogger(clazz.getName());
+  public LocLogger getLocLogger(Class clazz) {
+    return getLocLogger(clazz.getName());
   }
 }
diff --git a/slf4j-ext/src/main/java/org/slf4j/ext/LoggerWrapper.java b/slf4j-ext/src/main/java/org/slf4j/ext/LoggerWrapper.java
index 6204d08..8d42297 100644
--- a/slf4j-ext/src/main/java/org/slf4j/ext/LoggerWrapper.java
+++ b/slf4j-ext/src/main/java/org/slf4j/ext/LoggerWrapper.java
@@ -22,10 +22,10 @@ public class LoggerWrapper implements Logger {
   // fqcn depend on the caller, but its value would not be different
   // between successive invocations of a factory class
   
-  final Logger logger;
+  protected final Logger logger;
   final String fqcn;
   // is this logger instance a LocationAwareLogger
-  final boolean instanceofLAL;
+  protected final boolean instanceofLAL;
   
   public LoggerWrapper(Logger logger, String fqcn) {
     this.logger = logger;
diff --git a/slf4j-ext/src/test/java/org/slf4j/cal10n_dummy/LocLoggerTest.java b/slf4j-ext/src/test/java/org/slf4j/cal10n_dummy/LocLoggerTest.java
new file mode 100644
index 0000000..48e4c51
--- /dev/null
+++ b/slf4j-ext/src/test/java/org/slf4j/cal10n_dummy/LocLoggerTest.java
@@ -0,0 +1,75 @@
+/* 
+ * Copyright (c) 2004-2009 QOS.ch
+ * All rights reserved.
+ * 
+ * Permission is hereby granted, free  of charge, to any person obtaining
+ * a  copy  of this  software  and  associated  documentation files  (the
+ * "Software"), to  deal in  the Software without  restriction, including
+ * without limitation  the rights to  use, copy, modify,  merge, publish,
+ * distribute,  sublicense, and/or sell  copies of  the Software,  and to
+ * permit persons to whom the Software  is furnished to do so, subject to
+ * the following conditions:
+ * 
+ * The  above  copyright  notice  and  this permission  notice  shall  be
+ * included in all copies or substantial portions of the Software.
+ * 
+ * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+ * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+ * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package org.slf4j.cal10n_dummy;
+
+import java.util.Locale;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.spi.LoggingEvent;
+import org.slf4j.cal10n.LocLogger;
+import org.slf4j.cal10n.LocLoggerFactory;
+import org.slf4j.dummyExt.ListAppender;
+
+public class LocLoggerTest extends TestCase {
+
+  ListAppender listAppender;
+  org.apache.log4j.Logger log4jRoot;
+
+  LocLoggerFactory llFactory_uk = new LocLoggerFactory(Locale.UK);
+
+  final static String EXPECTED_FILE_NAME = "LocLoggerTest.java";
+
+  public LocLoggerTest(String name) {
+    super(name);
+  }
+
+  public void setUp() throws Exception {
+    super.setUp();
+
+    // start from a clean slate for each test
+
+    listAppender = new ListAppender();
+    listAppender.extractLocationInfo = true;
+    log4jRoot = org.apache.log4j.Logger.getRootLogger();
+    log4jRoot.addAppender(listAppender);
+    log4jRoot.setLevel(org.apache.log4j.Level.TRACE);
+  }
+
+  void verify(LoggingEvent le, String expectedMsg) {
+    assertEquals(expectedMsg, le.getMessage());
+    assertEquals(EXPECTED_FILE_NAME, le.getLocationInformation().getFileName());
+  }
+  
+  public void tearDown() throws Exception {
+    super.tearDown();
+  }
+
+  public void testSmoke() {
+    LocLogger locLogger = llFactory_uk.getLocLogger(this.getClass());
+    locLogger.info(Months.JAN);
+    verify((LoggingEvent) listAppender.list.get(0), "January");
+    
+  }
+}
diff --git a/slf4j-ext/src/test/java/org/slf4j/cal10n_dummy/Months.java b/slf4j-ext/src/test/java/org/slf4j/cal10n_dummy/Months.java
new file mode 100644
index 0000000..679e7c4
--- /dev/null
+++ b/slf4j-ext/src/test/java/org/slf4j/cal10n_dummy/Months.java
@@ -0,0 +1,10 @@
+package org.slf4j.cal10n_dummy;
+
+import ch.qos.cal10n.ResourceBundleName;
+
+ at ResourceBundleName("months")
+public enum Months {
+
+  JAN, FEB, MAR, APR, MAY, JUN;
+
+}
diff --git a/slf4j-ext/src/test/resources/months_en.properties b/slf4j-ext/src/test/resources/months_en.properties
new file mode 100644
index 0000000..e3e20a1
--- /dev/null
+++ b/slf4j-ext/src/test/resources/months_en.properties
@@ -0,0 +1,6 @@
+JAN=January
+FEB=February
+MAR=March
+APR=April
+MAY=May
+JUN=June

-----------------------------------------------------------------------

Summary of changes:
 .../src/main/java/org/slf4j/cal10n/LLogger.java    |   40 -----
 .../src/main/java/org/slf4j/cal10n/LocLogger.java  |  177 ++++++++++++++++++++
 .../{LLoggerFactory.java => LocLoggerFactory.java} |   40 ++++-
 .../src/main/java/org/slf4j/ext/LoggerWrapper.java |    4 +-
 .../LocLoggerTest.java}                            |   62 +++++---
 .../test/java/org/slf4j/cal10n_dummy/Months.java   |   10 +
 slf4j-ext/src/test/resources/months_en.properties  |    6 +
 7 files changed, 267 insertions(+), 72 deletions(-)
 delete mode 100644 slf4j-ext/src/main/java/org/slf4j/cal10n/LLogger.java
 create mode 100644 slf4j-ext/src/main/java/org/slf4j/cal10n/LocLogger.java
 rename slf4j-ext/src/main/java/org/slf4j/cal10n/{LLoggerFactory.java => LocLoggerFactory.java} (55%)
 copy slf4j-ext/src/test/java/org/slf4j/{NDCTest.java => cal10n_dummy/LocLoggerTest.java} (50%)
 create mode 100644 slf4j-ext/src/test/java/org/slf4j/cal10n_dummy/Months.java
 create mode 100644 slf4j-ext/src/test/resources/months_en.properties


hooks/post-receive
-- 
SLF4J: Simple Logging Facade for Java



More information about the slf4j-dev mailing list