[slf4j-dev] svn commit: r1190 - in slf4j/trunk/slf4j-api/src/main/java/org/slf4j: . helpers
ceki at slf4j.org
ceki at slf4j.org
Wed Oct 15 23:57:04 CEST 2008
Author: ceki
Date: Wed Oct 15 23:57:03 2008
New Revision: 1190
Added:
slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers/NOPLoggerFactory.java
Modified:
slf4j/trunk/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java
Log:
Fixing bug 106
Essentially, loggerFactory is now momentarily set to NOPLoggerFactory while the
underlying logging system auto-configures itself.
http://bugzilla.slf4j.org/show_bug.cgi?id=106
Modified: slf4j/trunk/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java
==============================================================================
--- slf4j/trunk/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java (original)
+++ slf4j/trunk/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java Wed Oct 15 23:57:03 2008
@@ -24,6 +24,7 @@
package org.slf4j;
+import org.slf4j.helpers.NOPLoggerFactory;
import org.slf4j.helpers.Util;
import org.slf4j.impl.StaticLoggerBinder;
@@ -58,28 +59,18 @@
}
static {
- try {
- String actualVer = StaticLoggerBinder.VERSION;
- if (!EXPECTED_VERSION.equals(actualVer)) {
- Util.reportFailure("The version " + actualVer
- + " of your slf4j-binding differs from " + EXPECTED_VERSION
- + ", the expected version.");
- Util.reportFailure("See " + VERSION_MISMATCH + " for further details.");
- }
- } catch (java.lang.NoSuchFieldError nsfe) {
- Util
- .reportFailure("The version of your slf4j-binding is probably older than 1.5.4, and differs from "
- + EXPECTED_VERSION + ", the expected version.");
- Util.reportFailure("See " + VERSION_MISMATCH + " for further details.");
- } catch (Throwable e) {
- Util
- .reportFailure("An unexpected problem occured while checking the version of your slf4j-binding");
- e.printStackTrace();
- }
+ staticInitialize();
+ versionSanityCheck();
+ }
+ private final static void staticInitialize() {
try {
+ // support re-entrant behavior.
+ // See also http://bugzilla.slf4j.org/show_bug.cgi?id=106
+ loggerFactory = new NOPLoggerFactory();
loggerFactory = StaticLoggerBinder.SINGLETON.getLoggerFactory();
} catch (NoClassDefFoundError ncde) {
+ loggerFactory = null; // undo NOPLoggerFactory
String msg = ncde.getMessage();
if (msg != null && msg.indexOf("org/slf4j/impl/StaticLoggerBinder") != -1) {
Util
@@ -90,12 +81,35 @@
}
throw ncde;
} catch (Exception e) {
+ loggerFactory = null; // undo NOPLoggerFactory
// we should never get here
Util.reportFailure("Failed to instantiate logger ["
+ StaticLoggerBinder.SINGLETON.getLoggerFactoryClassStr() + "]", e);
}
}
+ private final static void versionSanityCheck() {
+ try {
+ String actualVer = StaticLoggerBinder.VERSION;
+ if (!EXPECTED_VERSION.equals(actualVer)) {
+ Util.reportFailure("The version " + actualVer
+ + " of your slf4j-binding differs from " + EXPECTED_VERSION
+ + ", the expected version.");
+ Util.reportFailure("See " + VERSION_MISMATCH + " for further details.");
+ }
+ } catch (java.lang.NoSuchFieldError nsfe) {
+ Util
+ .reportFailure("The version of your slf4j-binding is probably older than 1.5.4, and differs from "
+ + EXPECTED_VERSION + ", the expected version.");
+ Util.reportFailure("See " + VERSION_MISMATCH + " for further details.");
+ } catch (Throwable e) {
+ Util
+ .reportFailure("An unexpected problem occured while checking the version of your slf4j-binding");
+ e.printStackTrace();
+ }
+ }
+
+
/**
* Return a logger named according to the name parameter using the statically
* bound {@link ILoggerFactory} instance.
Added: slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers/NOPLoggerFactory.java
==============================================================================
--- (empty file)
+++ slf4j/trunk/slf4j-api/src/main/java/org/slf4j/helpers/NOPLoggerFactory.java Wed Oct 15 23:57:03 2008
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2004-2005 SLF4J.ORG
+ * Copyright (c) 2004-2005 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, and/or sell copies of the Software, and to permit persons
+ * to whom the Software is furnished to do so, provided that the above
+ * copyright notice(s) and this permission notice appear in all copies of
+ * the Software and that both the above copyright notice(s) and this
+ * permission notice appear in supporting documentation.
+ *
+ * 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
+ * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
+ * SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+ * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder
+ * shall not be used in advertising or otherwise to promote the sale, use
+ * or other dealings in this Software without prior written authorization
+ * of the copyright holder.
+ *
+ */
+
+package org.slf4j.helpers;
+
+import org.slf4j.ILoggerFactory;
+import org.slf4j.Logger;
+import org.slf4j.helpers.NOPLogger;
+
+
+/**
+ * NOPLoggerFactory is an trivial implementation of {@link
+ * ILoggerFactory} which always returns the unique instance of
+ * NOPLogger.
+ *
+ * @author Ceki Gülcü
+ */
+public class NOPLoggerFactory implements ILoggerFactory {
+
+ public NOPLoggerFactory() {
+ // nothing to do
+ }
+
+ public Logger getLogger(String name) {
+ return NOPLogger.NOP_LOGGER;
+ }
+
+}
More information about the slf4j-dev
mailing list