[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ülcü
+ */
+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