diff --git a/slf4j-api/src/main/java/org/slf4j/helpers/SubstituteLogger.java b/slf4j-api/src/main/java/org/slf4j/helpers/SubstituteLogger.java index 64d142a2..65fb97d3 100644 --- a/slf4j-api/src/main/java/org/slf4j/helpers/SubstituteLogger.java +++ b/slf4j-api/src/main/java/org/slf4j/helpers/SubstituteLogger.java @@ -31,8 +31,10 @@ import java.util.Queue; import org.slf4j.Logger; import org.slf4j.Marker; import org.slf4j.event.EventRecodingLogger; +import org.slf4j.event.Level; import org.slf4j.event.LoggingEvent; import org.slf4j.event.SubstituteLoggingEvent; +import org.slf4j.spi.LoggingEventBuilder; /** * A logger implementation which logs via a delegate logger. By default, the delegate is a @@ -61,174 +63,242 @@ public class SubstituteLogger implements Logger { this.createdPostInitialization = createdPostInitialization; } + @Override public String getName() { return name; } - + + @Override + public LoggingEventBuilder makeLoggingEventBuilder(Level level) { + return delegate().makeLoggingEventBuilder(level); + } + + @Override + public boolean isEnabledForLevel(Level level) { + return delegate().isEnabledForLevel(level); + } + + @Override public boolean isTraceEnabled() { return delegate().isTraceEnabled(); } - + + @Override public void trace(String msg) { delegate().trace(msg); } - + + @Override public void trace(String format, Object arg) { delegate().trace(format, arg); } - + + @Override public void trace(String format, Object arg1, Object arg2) { delegate().trace(format, arg1, arg2); } - + + @Override public void trace(String format, Object... arguments) { delegate().trace(format, arguments); - } - + } + + @Override public void trace(String msg, Throwable t) { delegate().trace(msg, t); } - + + @Override public boolean isTraceEnabled(Marker marker) { return delegate().isTraceEnabled(marker); } - + + @Override public void trace(Marker marker, String msg) { delegate().trace(marker, msg); } - + + @Override public void trace(Marker marker, String format, Object arg) { delegate().trace(marker, format, arg); } - + + @Override public void trace(Marker marker, String format, Object arg1, Object arg2) { delegate().trace(marker, format, arg1, arg2); } - + @Override public void trace(Marker marker, String format, Object... arguments) { delegate().trace(marker, format, arguments); } - + @Override public void trace(Marker marker, String msg, Throwable t) { delegate().trace(marker, msg, t); } - + + @Override + public LoggingEventBuilder atTrace() { + return delegate().atTrace(); + } + + @Override public boolean isDebugEnabled() { return delegate().isDebugEnabled(); } - + + @Override public void debug(String msg) { delegate().debug(msg); } - + + @Override public void debug(String format, Object arg) { delegate().debug(format, arg); } - + + @Override public void debug(String format, Object arg1, Object arg2) { delegate().debug(format, arg1, arg2); } - + + @Override public void debug(String format, Object... arguments) { delegate().debug(format, arguments); } - + + @Override public void debug(String msg, Throwable t) { delegate().debug(msg, t); } - + + @Override public boolean isDebugEnabled(Marker marker) { return delegate().isDebugEnabled(marker); } - + + @Override public void debug(Marker marker, String msg) { delegate().debug(marker, msg); } - + + @Override public void debug(Marker marker, String format, Object arg) { delegate().debug(marker, format, arg); } - + + @Override public void debug(Marker marker, String format, Object arg1, Object arg2) { delegate().debug(marker, format, arg1, arg2); } - + + @Override public void debug(Marker marker, String format, Object... arguments) { delegate().debug(marker, format, arguments); } - + + @Override public void debug(Marker marker, String msg, Throwable t) { delegate().debug(marker, msg, t); } - + + @Override + public LoggingEventBuilder atDebug() { + return delegate().atDebug(); + } + + @Override public boolean isInfoEnabled() { return delegate().isInfoEnabled(); } + + @Override public void info(String msg) { delegate().info(msg); } - + + @Override public void info(String format, Object arg) { delegate().info(format, arg); } - + + @Override public void info(String format, Object arg1, Object arg2) { delegate().info(format, arg1, arg2); } - + + @Override public void info(String format, Object... arguments) { delegate().info(format, arguments); } - + + @Override public void info(String msg, Throwable t) { delegate().info(msg, t); } - + + @Override public boolean isInfoEnabled(Marker marker) { return delegate().isInfoEnabled(marker); } - + + @Override public void info(Marker marker, String msg) { delegate().info(marker, msg); } - + + @Override public void info(Marker marker, String format, Object arg) { delegate().info(marker, format, arg); } - + + @Override public void info(Marker marker, String format, Object arg1, Object arg2) { delegate().info(marker, format, arg1, arg2); } - + + @Override public void info(Marker marker, String format, Object... arguments) { delegate().info(marker, format, arguments); } - + + @Override public void info(Marker marker, String msg, Throwable t) { delegate().info(marker, msg, t); } + + @Override + public LoggingEventBuilder atInfo() { + return delegate().atInfo(); + } + + @Override public boolean isWarnEnabled() { return delegate().isWarnEnabled(); } - + + @Override public void warn(String msg) { delegate().warn(msg); } - + + @Override public void warn(String format, Object arg) { delegate().warn(format, arg); } - + + @Override public void warn(String format, Object arg1, Object arg2) { delegate().warn(format, arg1, arg2); } - + + @Override public void warn(String format, Object... arguments) { delegate().warn(format, arguments); } - + + @Override public void warn(String msg, Throwable t) { delegate().warn(msg, t); } @@ -236,75 +306,104 @@ public class SubstituteLogger implements Logger { public boolean isWarnEnabled(Marker marker) { return delegate().isWarnEnabled(marker); } - + + @Override public void warn(Marker marker, String msg) { delegate().warn(marker, msg); } - + + @Override public void warn(Marker marker, String format, Object arg) { delegate().warn(marker, format, arg); } - + + @Override public void warn(Marker marker, String format, Object arg1, Object arg2) { delegate().warn(marker, format, arg1, arg2); } - + + @Override public void warn(Marker marker, String format, Object... arguments) { delegate().warn(marker, format, arguments); } - + + @Override public void warn(Marker marker, String msg, Throwable t) { delegate().warn(marker, msg, t); } + + @Override + public LoggingEventBuilder atWarn() { + return delegate().atWarn(); + } + + + @Override public boolean isErrorEnabled() { return delegate().isErrorEnabled(); } - + + @Override public void error(String msg) { delegate().error(msg); } - + + @Override public void error(String format, Object arg) { delegate().error(format, arg); } - + + @Override public void error(String format, Object arg1, Object arg2) { delegate().error(format, arg1, arg2); } - + + @Override public void error(String format, Object... arguments) { delegate().error(format, arguments); } - + + @Override public void error(String msg, Throwable t) { delegate().error(msg, t); } - + + @Override public boolean isErrorEnabled(Marker marker) { return delegate().isErrorEnabled(marker); } - + + @Override public void error(Marker marker, String msg) { delegate().error(marker, msg); } - + + @Override public void error(Marker marker, String format, Object arg) { delegate().error(marker, format, arg); } - + + @Override public void error(Marker marker, String format, Object arg1, Object arg2) { delegate().error(marker, format, arg1, arg2); } - + + @Override public void error(Marker marker, String format, Object... arguments) { delegate().error(marker, format, arguments); } - + + @Override public void error(Marker marker, String msg, Throwable t) { delegate().error(marker, msg, t); } + @Override + public LoggingEventBuilder atError() { + return delegate().atError(); + } + @Override public boolean equals(Object o) { if (this == o) @@ -367,7 +466,7 @@ public class SubstituteLogger implements Logger { } return delegateEventAware; } - + public void log(LoggingEvent event) { if (isDelegateEventAware()) { try { diff --git a/slf4j-api/src/test/java/org/slf4j/basicTests/FluentAPIUsage.java b/slf4j-api/src/test/java/org/slf4j/basicTests/FluentAPIUsage.java index fd8d930b..9f605010 100755 --- a/slf4j-api/src/test/java/org/slf4j/basicTests/FluentAPIUsage.java +++ b/slf4j-api/src/test/java/org/slf4j/basicTests/FluentAPIUsage.java @@ -1,13 +1,27 @@ -package org.slf4j; +package org.slf4j.basicTests; + +import static org.junit.Assert.assertFalse; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.event.Level; -public class LoggerUsage { +public class FluentAPIUsage { @Test - public void test() { - org.slf4j.Logger logger = LoggerFactory.getLogger("aa"); - logger.atTrace().addKeyValue("a", "n").setCause(new Throwable()).log("aa"); + public void smoke() { + String name = "smoke"; + Logger logger = LoggerFactory.getLogger(name); + logger.atTrace().addKeyValue("a", "n").setCause(new Throwable()).log("hello"); + } + + + @Test + public void smokxce() { + String name = "smoke"; + Logger logger = LoggerFactory.getLogger("aa"); + assertFalse(logger.isEnabledForLevel(Level.DEBUG)); } } diff --git a/slf4j-api/src/test/java/org/slf4j/helpers/SubstitutableLoggerTest.java b/slf4j-api/src/test/java/org/slf4j/helpers/SubstitutableLoggerTest.java index 80fc8097..71b8a241 100644 --- a/slf4j-api/src/test/java/org/slf4j/helpers/SubstitutableLoggerTest.java +++ b/slf4j-api/src/test/java/org/slf4j/helpers/SubstitutableLoggerTest.java @@ -31,10 +31,8 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; -import java.util.List; import java.util.Set; import org.junit.Test; @@ -43,15 +41,24 @@ import org.slf4j.event.EventRecodingLogger; /** * @author Chetan Mehrotra + * @author Ceki Gülcü */ public class SubstitutableLoggerTest { - // atTrace excluded during development of 2.0 API + // NOTE: previous implementations of this class performed a hand crafted conversion of + // a method to a string. In this implementation we just invoke method.toString(). + + // WARNING: if you need to add an excluded method to have tests pass, ask yourself whether you + // forgot to implement the said method with delegation in SubstituteLogger. You probably did. private static final Set EXCLUDED_METHODS = new HashSet( - Arrays.asList("getName", "makeLoggingEventBuilder", "isEnabledForLevel", "atTrace", "atDebug", "atInfo", "atWarn", "atError")); + Arrays.asList("getName")); + + /** + * Test that all SubstituteLogger methods invoke the delegate, except for explicitly excluded methods. + */ @Test - public void testDelegate() throws Exception { + public void delegateIsInvokedTest() throws Exception { SubstituteLogger substituteLogger = new SubstituteLogger("foo", null, false); assertTrue(substituteLogger.delegate() instanceof EventRecodingLogger); @@ -60,7 +67,7 @@ public class SubstitutableLoggerTest { Logger proxyLogger = (Logger) Proxy.newProxyInstance(getClass().getClassLoader(), new Class[] { Logger.class }, ih); substituteLogger.setDelegate(proxyLogger); - invokeMethods(substituteLogger); + invokeAllMethodsOf(substituteLogger); // Assert that all methods are delegated expectedMethodSignatures.removeAll(ih.getInvokedMethodSignatures()); @@ -69,19 +76,32 @@ public class SubstitutableLoggerTest { } } - private void invokeMethods(Logger proxyLogger) throws InvocationTargetException, IllegalAccessException { + private void invokeAllMethodsOf(Logger logger) throws InvocationTargetException, IllegalAccessException { for (Method m : Logger.class.getDeclaredMethods()) { if (!EXCLUDED_METHODS.contains(m.getName())) { - m.invoke(proxyLogger, new Object[m.getParameterTypes().length]); + m.invoke(logger, new Object[m.getParameterTypes().length]); } } } + private static Set determineMethodSignatures(Class loggerClass) { + Set methodSignatures = new HashSet(); + // Note: Class.getDeclaredMethods() does not include inherited methods + for (Method m : loggerClass.getDeclaredMethods()) { + if (!EXCLUDED_METHODS.contains(m.getName())) { + methodSignatures.add(m.toString()); + } + } + return methodSignatures; + } + + + // implements InvocationHandler private class LoggerInvocationHandler implements InvocationHandler { private final Set invokedMethodSignatures = new HashSet(); public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - invokedMethodSignatures.add(getMethodSignature(method)); + invokedMethodSignatures.add(method.toString()); if (method.getName().startsWith("is")) { return true; } @@ -92,23 +112,4 @@ public class SubstitutableLoggerTest { return invokedMethodSignatures; } } - - private static Set determineMethodSignatures(Class loggerClass) { - Set methodSignatures = new HashSet(); - for (Method m : loggerClass.getDeclaredMethods()) { - if (!EXCLUDED_METHODS.contains(m.getName())) { - methodSignatures.add(getMethodSignature(m)); - } - } - return methodSignatures; - } - - private static String getMethodSignature(Method m) { - List result = new ArrayList(); - result.add(m.getName()); - for (Class clazz : m.getParameterTypes()) { - result.add(clazz.getSimpleName()); - } - return result.toString(); - } } diff --git a/slf4j-site/src/main/resources/META-INF/MANIFEST.MF b/slf4j-site/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index e69de29b..00000000 diff --git a/slf4j-site/src/site/pages/templates/footer.js b/slf4j-site/src/site/pages/templates/footer.js index 1bdaaf72..74c2d252 100755 --- a/slf4j-site/src/site/pages/templates/footer.js +++ b/slf4j-site/src/site/pages/templates/footer.js @@ -3,7 +3,7 @@ document.write('') document.write('') -document.write(' ') +document.write(' ') //document.write('