From 7a23ca74ae94f87675b25414d6c67a9e9ba9d98f Mon Sep 17 00:00:00 2001 From: Frans Orsel Date: Tue, 15 Dec 2015 17:11:48 +0100 Subject: [PATCH] Move delegation loop check from log4j-over-slf4j.jar to slf4j-log4j12.jar, see also SLF4J-345 --- .../org/apache/log4j/Log4jLoggerFactory.java | 18 ------------------ .../java/org/slf4j/impl/JCLLoggerFactory.java | 2 +- .../org/slf4j/impl/Log4jLoggerFactory.java | 18 ++++++++++++++++++ 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/log4j-over-slf4j/src/main/java/org/apache/log4j/Log4jLoggerFactory.java b/log4j-over-slf4j/src/main/java/org/apache/log4j/Log4jLoggerFactory.java index 738b6a6cd..30b352213 100644 --- a/log4j-over-slf4j/src/main/java/org/apache/log4j/Log4jLoggerFactory.java +++ b/log4j-over-slf4j/src/main/java/org/apache/log4j/Log4jLoggerFactory.java @@ -17,7 +17,6 @@ package org.apache.log4j; import org.apache.log4j.spi.LoggerFactory; -import org.slf4j.helpers.Util; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -36,23 +35,6 @@ class Log4jLoggerFactory { // String, Logger private static ConcurrentMap log4jLoggers = new ConcurrentHashMap(); - private static final String LOG4J_DELEGATION_LOOP_URL = "http://www.slf4j.org/codes.html#log4jDelegationLoop"; - - // check for delegation loops - static { - try { - Class.forName("org.slf4j.impl.Log4jLoggerFactory"); - String part1 = "Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError. "; - String part2 = "See also " + LOG4J_DELEGATION_LOOP_URL + " for more details."; - - Util.report(part1); - Util.report(part2); - throw new IllegalStateException(part1 + part2); - } catch (ClassNotFoundException e) { - // this is the good case - } - } - public static Logger getLogger(String name) { org.apache.log4j.Logger instance = log4jLoggers.get(name); if (instance != null) { diff --git a/slf4j-jcl/src/main/java/org/slf4j/impl/JCLLoggerFactory.java b/slf4j-jcl/src/main/java/org/slf4j/impl/JCLLoggerFactory.java index 77ea88ecb..db1014b00 100644 --- a/slf4j-jcl/src/main/java/org/slf4j/impl/JCLLoggerFactory.java +++ b/slf4j-jcl/src/main/java/org/slf4j/impl/JCLLoggerFactory.java @@ -46,7 +46,7 @@ public class JCLLoggerFactory implements ILoggerFactory { static { try { Class.forName("org.apache.commons.logging.impl.SLF4JLogFactory"); - String part1 = "Detected both jcl-over-slf4j.jar AND slf4j-jcl.jar on the class path, preempting StackOverflowError. "; + String part1 = "Detected both jcl-over-slf4j.jar AND bound slf4j-jcl.jar on the class path, preempting StackOverflowError. "; String part2 = "See also " + JCL_DELEGATION_LOOP_URL + " for more details."; Util.report(part1); diff --git a/slf4j-log4j12/src/main/java/org/slf4j/impl/Log4jLoggerFactory.java b/slf4j-log4j12/src/main/java/org/slf4j/impl/Log4jLoggerFactory.java index e801f9ccf..991bddbe1 100644 --- a/slf4j-log4j12/src/main/java/org/slf4j/impl/Log4jLoggerFactory.java +++ b/slf4j-log4j12/src/main/java/org/slf4j/impl/Log4jLoggerFactory.java @@ -30,6 +30,7 @@ import org.apache.log4j.LogManager; import org.slf4j.ILoggerFactory; import org.slf4j.Logger; +import org.slf4j.helpers.Util; /** * Log4jLoggerFactory is an implementation of {@link ILoggerFactory} returning @@ -42,6 +43,23 @@ public class Log4jLoggerFactory implements ILoggerFactory { // key: name (String), value: a Log4jLoggerAdapter; ConcurrentMap loggerMap; + private static final String LOG4J_DELEGATION_LOOP_URL = "http://www.slf4j.org/codes.html#log4jDelegationLoop"; + + // check for delegation loops + static { + try { + Class.forName("org.apache.log4j.Log4jLoggerFactory"); + String part1 = "Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError. "; + String part2 = "See also " + LOG4J_DELEGATION_LOOP_URL + " for more details."; + + Util.report(part1); + Util.report(part2); + throw new IllegalStateException(part1 + part2); + } catch (ClassNotFoundException e) { + // this is the good case + } + } + public Log4jLoggerFactory() { loggerMap = new ConcurrentHashMap(); }