Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/qos-ch/slf4j
Browse files Browse the repository at this point in the history
  • Loading branch information
korzha committed Feb 3, 2014
2 parents 647de40 + f56ee2e commit 8055ebe
Show file tree
Hide file tree
Showing 8 changed files with 574 additions and 65 deletions.
25 changes: 16 additions & 9 deletions slf4j-api/src/main/java/org/slf4j/LoggerFactory.java
Expand Up @@ -29,6 +29,7 @@
import java.util.*;

import org.slf4j.helpers.NOPLoggerFactory;
import org.slf4j.helpers.SubstituteLogger;
import org.slf4j.helpers.SubstituteLoggerFactory;
import org.slf4j.helpers.Util;
import org.slf4j.impl.StaticLoggerBinder;
Expand Down Expand Up @@ -128,7 +129,7 @@ private final static void bind() {
StaticLoggerBinder.getSingleton();
INITIALIZATION_STATE = SUCCESSFUL_INITIALIZATION;
reportActualBinding(staticLoggerBinderPathSet);
emitSubstituteLoggerWarning();
fixSubstitutedLoggers();
} catch (NoClassDefFoundError ncde) {
String msg = ncde.getMessage();
if (messageContainsOrgSlf4jImplStaticLoggerBinder(msg)) {
Expand Down Expand Up @@ -161,18 +162,24 @@ static void failedBinding(Throwable t) {
Util.report("Failed to instantiate SLF4J LoggerFactory", t);
}

private final static void emitSubstituteLoggerWarning() {
List loggerNameList = TEMP_FACTORY.getLoggerNameList();
if (loggerNameList.size() == 0) {
private final static void fixSubstitutedLoggers() {
List<SubstituteLogger> loggers = TEMP_FACTORY.getLoggers();

if(loggers.isEmpty()){
return;
}
Util.report("The following loggers will not work because they were created");
Util.report("during the default configuration phase of the underlying logging system.");

Util.report("The following set of substitute loggers may have been accessed");
Util.report("during the initialization phase. Logging calls during this");
Util.report("phase were not honored. However, subsequent logging calls to these");
Util.report("loggers will work as normally expected.");
Util.report("See also " + SUBSTITUTE_LOGGER_URL);
for (int i = 0; i < loggerNameList.size(); i++) {
String loggerName = (String) loggerNameList.get(i);
Util.report(loggerName);
for(SubstituteLogger subLogger : loggers){
subLogger.setDelegate(getLogger(subLogger.getName()));
Util.report(subLogger.getName());
}

TEMP_FACTORY.clear();
}

private final static void versionSanityCheck() {
Expand Down
325 changes: 325 additions & 0 deletions slf4j-api/src/main/java/org/slf4j/helpers/SubstituteLogger.java
@@ -0,0 +1,325 @@
/**
* Copyright (c) 2004-2011 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.helpers;

import org.slf4j.Logger;
import org.slf4j.Marker;

/**
* A logger implementation which logs via a delegate logger. By default, the delegate is a
* {@link NOPLogger}. However, a different delegate can be set at anytime.
* <p/>
* See also the <a href="http://www.slf4j.org/codes.html#substituteLogger">relevant
* error code</a> documentation.
*
* @author Chetan Mehrotra
*/
public class SubstituteLogger implements Logger {

private final String name;

private volatile Logger _delegate;

public SubstituteLogger(String name) {
this.name = name;
}

public String getName() {
return name;
}

public boolean isTraceEnabled() {
return delegate().isTraceEnabled();
}

public void trace(String msg) {
delegate().trace(msg);
}

public void trace(String format, Object arg) {
delegate().trace(format, arg);
}

public void trace(String format, Object arg1, Object arg2) {
delegate().trace(format, arg1, arg2);
}

public void trace(String format, Object... arguments) {
delegate().trace(format, arguments);
}

public void trace(String msg, Throwable t) {
delegate().trace(msg, t);
}

public boolean isTraceEnabled(Marker marker) {
return delegate().isTraceEnabled(marker);
}

public void trace(Marker marker, String msg) {
delegate().trace(marker, msg);
}

public void trace(Marker marker, String format, Object arg) {
delegate().trace(marker, format, arg);
}

public void trace(Marker marker, String format, Object arg1, Object arg2) {
delegate().trace(marker, format, arg1, arg2);
}

public void trace(Marker marker, String format, Object... arguments) {
delegate().trace(marker, format, arguments);
}

public void trace(Marker marker, String msg, Throwable t) {
delegate().trace(marker, msg, t);
}

public boolean isDebugEnabled() {
return delegate().isDebugEnabled();
}

public void debug(String msg) {
delegate().debug(msg);
}

public void debug(String format, Object arg) {
delegate().debug(format, arg);
}

public void debug(String format, Object arg1, Object arg2) {
delegate().debug(format, arg1, arg2);
}

public void debug(String format, Object... arguments) {
delegate().debug(format, arguments);
}

public void debug(String msg, Throwable t) {
delegate().debug(msg, t);
}

public boolean isDebugEnabled(Marker marker) {
return delegate().isDebugEnabled(marker);
}

public void debug(Marker marker, String msg) {
delegate().debug(marker, msg);
}

public void debug(Marker marker, String format, Object arg) {
delegate().debug(marker, format, arg);
}

public void debug(Marker marker, String format, Object arg1, Object arg2) {
delegate().debug(marker, format, arg1, arg2);
}

public void debug(Marker marker, String format, Object... arguments) {
delegate().debug(marker, format, arguments);
}

public void debug(Marker marker, String msg, Throwable t) {
delegate().debug(marker, msg, t);
}

public boolean isInfoEnabled() {
return delegate().isInfoEnabled();
}

public void info(String msg) {
delegate().info(msg);
}

public void info(String format, Object arg) {
delegate().info(format, arg);
}

public void info(String format, Object arg1, Object arg2) {
delegate().info(format, arg1, arg2);
}

public void info(String format, Object... arguments) {
delegate().info(format, arguments);
}

public void info(String msg, Throwable t) {
delegate().info(msg, t);
}

public boolean isInfoEnabled(Marker marker) {
return delegate().isInfoEnabled(marker);
}

public void info(Marker marker, String msg) {
delegate().info(marker, msg);
}

public void info(Marker marker, String format, Object arg) {
delegate().info(marker, format, arg);
}

public void info(Marker marker, String format, Object arg1, Object arg2) {
delegate().info(marker, format, arg1, arg2);
}

public void info(Marker marker, String format, Object... arguments) {
delegate().info(marker, format, arguments);
}

public void info(Marker marker, String msg, Throwable t) {
delegate().info(marker, msg, t);
}

public boolean isWarnEnabled() {
return delegate().isWarnEnabled();
}

public void warn(String msg) {
delegate().warn(msg);
}

public void warn(String format, Object arg) {
delegate().warn(format, arg);
}

public void warn(String format, Object arg1, Object arg2) {
delegate().warn(format, arg1, arg2);
}

public void warn(String format, Object... arguments) {
delegate().warn(format, arguments);
}

public void warn(String msg, Throwable t) {
delegate().warn(msg, t);
}

public boolean isWarnEnabled(Marker marker) {
return delegate().isWarnEnabled(marker);
}

public void warn(Marker marker, String msg) {
delegate().warn(marker, msg);
}

public void warn(Marker marker, String format, Object arg) {
delegate().warn(marker, format, arg);
}

public void warn(Marker marker, String format, Object arg1, Object arg2) {
delegate().warn(marker, format, arg1, arg2);
}

public void warn(Marker marker, String format, Object... arguments) {
delegate().warn(marker, format, arguments);
}

public void warn(Marker marker, String msg, Throwable t) {
delegate().warn(marker, msg, t);
}

public boolean isErrorEnabled() {
return delegate().isErrorEnabled();
}

public void error(String msg) {
delegate().error(msg);
}

public void error(String format, Object arg) {
delegate().error(format, arg);
}

public void error(String format, Object arg1, Object arg2) {
delegate().error(format, arg1, arg2);
}

public void error(String format, Object... arguments) {
delegate().error(format, arguments);
}

public void error(String msg, Throwable t) {
delegate().error(msg, t);
}

public boolean isErrorEnabled(Marker marker) {
return delegate().isErrorEnabled(marker);
}

public void error(Marker marker, String msg) {
delegate().error(marker, msg);
}

public void error(Marker marker, String format, Object arg) {
delegate().error(marker, format, arg);
}

public void error(Marker marker, String format, Object arg1, Object arg2) {
delegate().error(marker, format, arg1, arg2);
}

public void error(Marker marker, String format, Object... arguments) {
delegate().error(marker, format, arguments);
}

public void error(Marker marker, String msg, Throwable t) {
delegate().error(marker, msg, t);
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

SubstituteLogger that = (SubstituteLogger) o;

if (!name.equals(that.name)) return false;

return true;
}

@Override
public int hashCode() {
return name.hashCode();
}

/**
* Return the delegate logger instance if set. Otherwise, return a {@link NOPLogger}
* instance.
*/
Logger delegate() {
return _delegate != null ? _delegate : NOPLogger.NOP_LOGGER;
}

/**
* Typically called after the {@link org.slf4j.LoggerFactory} initialization phase is completed.
* @param delegate
*/
public void setDelegate(Logger delegate) {
this._delegate = delegate;
}
}

0 comments on commit 8055ebe

Please sign in to comment.