diff --git a/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java b/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java index 67f44275..e1257080 100755 --- a/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java +++ b/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java @@ -187,7 +187,9 @@ public final class LoggerFactory { for (int i = 0; i < events.size(); i++) { SubstituteLoggingEvent event = events.get(i); SubstituteLogger substLogger = event.getLogger(); - if (substLogger.isDelegateEventAware()) { + if( substLogger.isDelegateNOP()) { + break; + } else if (substLogger.isDelegateEventAware()) { if (i == 0) emitReplayWarning(events.size()); substLogger.log(event); 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 b042871f..7be67d78 100644 --- a/slf4j-api/src/main/java/org/slf4j/helpers/SubstituteLogger.java +++ b/slf4j-api/src/main/java/org/slf4j/helpers/SubstituteLogger.java @@ -372,4 +372,8 @@ public class SubstituteLogger implements Logger { } } } + + public boolean isDelegateNOP() { + return _delegate instanceof NOPLogger; + } } diff --git a/slf4j-nop/src/test/java/org/slf4j/impl/MultithreadedInitializationTest.java b/slf4j-nop/src/test/java/org/slf4j/impl/MultithreadedInitializationTest.java index 1a2353a1..954755b7 100755 --- a/slf4j-nop/src/test/java/org/slf4j/impl/MultithreadedInitializationTest.java +++ b/slf4j-nop/src/test/java/org/slf4j/impl/MultithreadedInitializationTest.java @@ -24,6 +24,11 @@ */ package org.slf4j.impl; +import static org.junit.Assert.assertEquals; + +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; import java.util.Random; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; @@ -46,15 +51,19 @@ public class MultithreadedInitializationTest { int diff = new Random().nextInt(10000); String loggerName = "org.slf4j.impl.MultithreadedInitializationTest"; - + private final PrintStream oldErr = System.err; + StringPrintStream sps = new StringPrintStream(oldErr); + @Before public void setup() { LoggerFactoryFriend.reset(); + System.setErr(sps); } @After public void tearDown() throws Exception { LoggerFactoryFriend.reset(); + System.setErr(oldErr); } @Test @@ -71,8 +80,7 @@ public class MultithreadedInitializationTest { logger.info("hello"); EVENT_COUNT.getAndIncrement(); - int NUM_LINES_IN_SLF4J_REPLAY_WARNING=3; - //assertEquals(EVENT_COUNT.get()+NUM_LINES_IN_SLF4J_REPLAY_WARNING, sps.stringList.size()); + assertEquals(0, sps.stringList.size()); } private static LoggerAccessingThread[] harness() throws InterruptedException, BrokenBarrierException { @@ -112,6 +120,32 @@ public class MultithreadedInitializationTest { } }; + public static class StringPrintStream extends PrintStream { + + public static final String LINE_SEP = System.getProperty("line.separator"); + PrintStream other; + List stringList = new ArrayList(); + + public StringPrintStream(PrintStream ps) { + super(ps); + other = ps; + } + + public void print(String s) { + other.print(s); + stringList.add(s); + } + + public void println(String s) { + other.println(s); + stringList.add(s); + } + + public void println(Object o) { + other.println(o); + stringList.add(o.toString()); + } + }; }