diff --git a/src/main/java/org/apache/commons/logging/LogFactory.java b/src/main/java/org/apache/commons/logging/LogFactory.java index d3f5e6e..8889aae 100644 --- a/src/main/java/org/apache/commons/logging/LogFactory.java +++ b/src/main/java/org/apache/commons/logging/LogFactory.java @@ -94,9 +94,7 @@ public abstract class LogFactory { private static final String FACTORY_LOG4J_API = "org.apache.commons.logging.impl.Log4jApiLogFactory"; private static final String LOG4J_API_LOGGER = "org.apache.logging.log4j.Logger"; - private static final String LOG4J_TO_SLF4J_BRIDGE = "org.apache.logging.slf4j.SLF4JProvider"; - private static final String FACTORY_SLF4J = "org.apache.commons.logging.impl.Slf4jLogFactory"; private static final String SLF4J_API_LOGGER = "org.slf4j.Logger"; /** @@ -918,21 +916,10 @@ public abstract class LogFactory { try { // We prefer Log4j API, since it does not stringify objects. if (factory == null && isClassAvailable(LOG4J_API_LOGGER, baseClassLoader)) { - // If the Log4j API is redirected to SLF4J, we use SLF4J directly. - if (isClassAvailable(LOG4J_TO_SLF4J_BRIDGE, baseClassLoader)) { - logDiagnostic( - "[LOOKUP] Log4j API to SLF4J redirection detected. Loading the SLF4J LogFactory implementation '" + FACTORY_SLF4J + "'."); - factory = newFactory(FACTORY_SLF4J, baseClassLoader, contextClassLoader); - } else { - logDiagnostic("[LOOKUP] Log4j API detected. Loading the Log4j API LogFactory implementation '" + FACTORY_LOG4J_API + "'."); - factory = newFactory(FACTORY_LOG4J_API, baseClassLoader, contextClassLoader); - } + logDiagnostic("[LOOKUP] Log4j API detected. Loading the Log4j API LogFactory implementation '" + FACTORY_LOG4J_API + "'."); + factory = newFactory(FACTORY_LOG4J_API, baseClassLoader, contextClassLoader); } - if (factory == null && isClassAvailable(SLF4J_API_LOGGER, baseClassLoader)) { - logDiagnostic("[LOOKUP] SLF4J detected. Loading the SLF4J LogFactory implementation '" + FACTORY_SLF4J + "'."); - factory = newFactory(FACTORY_SLF4J, baseClassLoader, contextClassLoader); - } } catch (final Exception e) { logDiagnostic("[LOOKUP] An exception occurred while creating LogFactory: " + e.getMessage()); } diff --git a/src/main/java/org/apache/commons/logging/impl/Slf4jLogFactory.java b/src/main/java/org/apache/commons/logging/impl/Slf4jLogFactory.java deleted file mode 100644 index adb8f81..0000000 --- a/src/main/java/org/apache/commons/logging/impl/Slf4jLogFactory.java +++ /dev/null @@ -1,322 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.commons.logging.impl; - -import static org.slf4j.spi.LocationAwareLogger.DEBUG_INT; -import static org.slf4j.spi.LocationAwareLogger.ERROR_INT; -import static org.slf4j.spi.LocationAwareLogger.INFO_INT; -import static org.slf4j.spi.LocationAwareLogger.TRACE_INT; -import static org.slf4j.spi.LocationAwareLogger.WARN_INT; - -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogConfigurationException; -import org.apache.commons.logging.LogFactory; -import org.slf4j.ILoggerFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.slf4j.Marker; -import org.slf4j.MarkerFactory; -import org.slf4j.spi.LocationAwareLogger; - -/** - * Logger factory hardcoded to send everything to SLF4J. - * - * @since 1.3.0 - */ -public final class Slf4jLogFactory extends LogFactory { - - private static final class Slf4jLocationAwareLog implements Log { - - private static final String FQCN = Slf4jLocationAwareLog.class.getName(); - - private final LocationAwareLogger logger; - - public Slf4jLocationAwareLog(final LocationAwareLogger logger) { - this.logger = logger; - } - - @Override - public void debug(Object message) { - log(DEBUG_INT, message, null); - } - - @Override - public void debug(Object message, Throwable t) { - log(DEBUG_INT, message, t); - } - - @Override - public void error(Object message) { - log(ERROR_INT, message, null); - } - - @Override - public void error(Object message, Throwable t) { - log(ERROR_INT, message, t); - } - - @Override - public void fatal(Object message) { - error(message); - } - - @Override - public void fatal(Object message, Throwable t) { - error(message, t); - } - - @Override - public void info(Object message) { - log(INFO_INT, message, null); - } - - @Override - public void info(Object message, Throwable t) { - log(INFO_INT, message, t); - } - - @Override - public boolean isDebugEnabled() { - return logger.isDebugEnabled(MARKER); - } - - @Override - public boolean isErrorEnabled() { - return logger.isErrorEnabled(MARKER); - } - - @Override - public boolean isFatalEnabled() { - return isErrorEnabled(); - } - - @Override - public boolean isInfoEnabled() { - return logger.isInfoEnabled(MARKER); - } - - @Override - public boolean isTraceEnabled() { - return logger.isTraceEnabled(MARKER); - } - - @Override - public boolean isWarnEnabled() { - return logger.isWarnEnabled(MARKER); - } - - private void log(final int level, final Object message, final Throwable t) { - logger.log(MARKER, FQCN, level, String.valueOf(message), EMPTY_OBJECT_ARRAY, t); - } - - @Override - public void trace(Object message) { - log(TRACE_INT, message, null); - } - - @Override - public void trace(Object message, Throwable t) { - log(TRACE_INT, message, t); - } - - @Override - public void warn(Object message) { - log(WARN_INT, message, null); - } - - @Override - public void warn(Object message, Throwable t) { - log(WARN_INT, message, t); - } - } - private static class Slf4jLog implements Log { - - private final Logger logger; - - public Slf4jLog(final Logger logger) { - this.logger = logger; - } - - @Override - public void debug(Object message) { - logger.debug(MARKER, String.valueOf(message)); - } - - @Override - public void debug(Object message, Throwable t) { - logger.debug(MARKER, String.valueOf(message), t); - } - - @Override - public void error(Object message) { - logger.error(MARKER, String.valueOf(message)); - } - - @Override - public void error(Object message, Throwable t) { - logger.debug(MARKER, String.valueOf(message), t); - } - - @Override - public void fatal(Object message) { - error(message); - } - - @Override - public void fatal(Object message, Throwable t) { - error(message, t); - } - - @Override - public void info(Object message) { - logger.info(MARKER, String.valueOf(message)); - } - - @Override - public void info(Object message, Throwable t) { - logger.info(MARKER, String.valueOf(message), t); - } - - @Override - public boolean isDebugEnabled() { - return logger.isDebugEnabled(MARKER); - } - - @Override - public boolean isErrorEnabled() { - return logger.isErrorEnabled(MARKER); - } - - @Override - public boolean isFatalEnabled() { - return isErrorEnabled(); - } - - @Override - public boolean isInfoEnabled() { - return logger.isInfoEnabled(MARKER); - } - - @Override - public boolean isTraceEnabled() { - return logger.isTraceEnabled(MARKER); - } - - @Override - public boolean isWarnEnabled() { - return logger.isWarnEnabled(MARKER); - } - - @Override - public void trace(Object message) { - logger.trace(MARKER, String.valueOf(message)); - } - - @Override - public void trace(Object message, Throwable t) { - logger.trace(MARKER, String.valueOf(message), t); - } - - @Override - public void warn(Object message) { - logger.warn(MARKER, String.valueOf(message)); - } - - @Override - public void warn(Object message, Throwable t) { - logger.warn(MARKER, String.valueOf(message), t); - } - } - - private static final Object[] EMPTY_OBJECT_ARRAY = {}; - - private static final String[] EMPTY_STRING_ARRAY = {}; - - /** - * Marker used by all messages coming from Apache Commons Logging. - */ - private static final Marker MARKER = MarkerFactory.getMarker("COMMONS-LOGGING"); - - /** - * Caches Log instances. - *
- * The SLF4J reference implementation (Logback) has a single logger context, so each call to - * {@link #getInstance(String)} - * should give the same result. - *
- */ - private final ConcurrentMap- * In this implementation it calls a "stop" method if the logger factory supports it. This is the case of - * Logback. - *
- */ - @Override - public void release() { - final ILoggerFactory factory = LoggerFactory.getILoggerFactory(); - try { - factory.getClass().getMethod("stop").invoke(factory); - } catch (final ReflectiveOperationException ignored) { - } - } - - @Override - public void removeAttribute(final String name) { - attributes.remove(name); - } - - @Override - public void setAttribute(final String name, final Object value) { - if (value != null) { - attributes.put(name, value); - } else { - removeAttribute(name); - } - } -} diff --git a/src/test/java/org/apache/commons/logging/slf4j/CallerInformationTestCase.java b/src/test/java/org/apache/commons/logging/slf4j/CallerInformationTestCase.java deleted file mode 100644 index cb61211..0000000 --- a/src/test/java/org/apache/commons/logging/slf4j/CallerInformationTestCase.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.commons.logging.slf4j; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.commons.logging.impl.Slf4jLogFactory; -import org.slf4j.LoggerFactory; -import org.slf4j.Marker; -import org.slf4j.MarkerFactory; - -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.classic.spi.ThrowableProxy; -import ch.qos.logback.core.filter.Filter; -import ch.qos.logback.core.read.ListAppender; -import ch.qos.logback.core.spi.FilterReply; -import junit.framework.TestCase; - -public class CallerInformationTestCase extends TestCase { - - private static final String STRING = "String"; - private static final Throwable T = new RuntimeException(); - private static final List