From 42810107b0ec38ec568e0501f4ab20e01a153eef Mon Sep 17 00:00:00 2001 From: Ceki Gulcu Date: Mon, 5 Aug 2024 22:10:08 +0200 Subject: [PATCH] LoggerFactory emits 'SLF4J(I): Connected with provider of type' Signed-off-by: Ceki Gulcu --- .../org/slf4j/CompatibilityAssertionTest.java | 8 ++- .../org/slf4j/MultiBindingAssertionTest.java | 2 +- .../main/java/org/slf4j/LoggerFactory.java | 9 ++- .../MultithreadedInitializationTest.java | 4 +- .../test/SLF4JPlatformLoggingTest.java | 12 ++-- slf4j-nop/pom.xml | 8 +++ .../nop/MultithreadedInitializationTest.java | 58 ++++++++++--------- ...LoggerMultithreadedInitializationTest.java | 4 +- 8 files changed, 63 insertions(+), 42 deletions(-) diff --git a/integration/src/test/java/org/slf4j/CompatibilityAssertionTest.java b/integration/src/test/java/org/slf4j/CompatibilityAssertionTest.java index af804406..59855a7a 100644 --- a/integration/src/test/java/org/slf4j/CompatibilityAssertionTest.java +++ b/integration/src/test/java/org/slf4j/CompatibilityAssertionTest.java @@ -56,9 +56,13 @@ public class CompatibilityAssertionTest { Logger logger = LoggerFactory.getLogger(this.getClass()); String msg = "hello world " + diff; logger.info(msg); - assertEquals(1, sps.stringList.size()); + assertEquals(2, sps.stringList.size()); + String s0 = (String) sps.stringList.get(0); - assertTrue(s0.contains(msg)); + assertTrue(s0.startsWith("SLF4J(I): Connected with provider of type [org.slf4j.simple.SimpleServiceProvider]")); + + String s1 = (String) sps.stringList.get(1); + assertTrue(s1.contains(msg)); } } diff --git a/integration/src/test/java/org/slf4j/MultiBindingAssertionTest.java b/integration/src/test/java/org/slf4j/MultiBindingAssertionTest.java index 052faab2..cec7940f 100644 --- a/integration/src/test/java/org/slf4j/MultiBindingAssertionTest.java +++ b/integration/src/test/java/org/slf4j/MultiBindingAssertionTest.java @@ -59,7 +59,7 @@ public class MultiBindingAssertionTest { assertMsgContains(list, 1, "Found provider"); assertMsgContains(list, 2, "Found provider"); assertMsgContains(list, 3, "See https://www.slf4j.org/codes.html#multiple_bindings for an explanation."); - assertMsgContains(list, 4, "Actual provider is of type ["); + assertMsgContains(list, 4, "SLF4J(I): Connected with provider of type ["); } void assertMsgContains(List strList, int index, String msg) { diff --git a/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java b/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java index 4e1f0b0d..4fb847f1 100755 --- a/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java +++ b/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java @@ -82,6 +82,9 @@ public final class LoggerFactory { static final String UNSUCCESSFUL_INIT_URL = CODES_PREFIX + "#unsuccessfulInit"; static final String UNSUCCESSFUL_INIT_MSG = "org.slf4j.LoggerFactory in failed state. Original exception was thrown EARLIER. See also " + UNSUCCESSFUL_INIT_URL; + + static final String CONNECTED_WITH_MSG = "Connected with provider of type ["; + /** * System property for explicitly setting the provider class. If set and the provider could be instantiated, * then the service loading mechanism will be bypassed. @@ -403,9 +406,9 @@ public final class LoggerFactory { } private static void reportActualBinding(List providerList) { - // binderPathSet can be null under Android - if (!providerList.isEmpty() && isAmbiguousProviderList(providerList)) { - Reporter.info("Actual provider is of type [" + providerList.get(0) + "]"); + if (!providerList.isEmpty()) { + SLF4JServiceProvider provider = providerList.get(0); + Reporter.info(CONNECTED_WITH_MSG + provider.getClass().getName() + "]"); } } diff --git a/slf4j-api/src/test/java/org/slf4j/testHarness/MultithreadedInitializationTest.java b/slf4j-api/src/test/java/org/slf4j/testHarness/MultithreadedInitializationTest.java index 81eedc8b..eff6671e 100644 --- a/slf4j-api/src/test/java/org/slf4j/testHarness/MultithreadedInitializationTest.java +++ b/slf4j-api/src/test/java/org/slf4j/testHarness/MultithreadedInitializationTest.java @@ -40,11 +40,11 @@ abstract public class MultithreadedInitializationTest { long expectedEventCount = eventCount.get() + extraLogEvents(); - assertTrue(expectedEventCount + " >= " + recordedEventCount, expectedEventCount >= recordedEventCount); + assertTrue("unmet condition: " + expectedEventCount + " >= " + recordedEventCount, expectedEventCount >= recordedEventCount); assertTrue("unmet condition: " + expectedEventCount + " < " + recordedEventCount + "+" + LENIENCY_COUNT, expectedEventCount < (recordedEventCount + LENIENCY_COUNT)); } abstract protected long getRecordedEventCount(); - + protected int extraLogEvents() { return 0; } diff --git a/slf4j-jdk-platform-logging/src/test/java/org/slf4j/jdk/platform/logging/test/SLF4JPlatformLoggingTest.java b/slf4j-jdk-platform-logging/src/test/java/org/slf4j/jdk/platform/logging/test/SLF4JPlatformLoggingTest.java index 7a662b96..b2f62ddd 100644 --- a/slf4j-jdk-platform-logging/src/test/java/org/slf4j/jdk/platform/logging/test/SLF4JPlatformLoggingTest.java +++ b/slf4j-jdk-platform-logging/src/test/java/org/slf4j/jdk/platform/logging/test/SLF4JPlatformLoggingTest.java @@ -39,6 +39,7 @@ import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; +import org.slf4j.LoggerFactory; /** * The present test is fragile in the sense that it sets up SimpleLogger @@ -108,11 +109,12 @@ public class SLF4JPlatformLoggingTest { //INFO throwTest - a problem //java.lang.Exception // at org.slf4j.jdk.platform.logging/org.slf4j.jdk.platform.logging.SLF4JPlatformLoggingTest.throwTest(SLF4JPlatformLoggingTest.java:92) - - assertEquals("INFO throwTest - we have a problem", results.get(0)); - assertEquals(Exception.class.getName(), results.get(1)); - assertTrue(results.get(2).contains("at ")); - assertTrue(results.get(2).contains(this.getClass().getName())); + + assertTrue(results.get(0).startsWith("SLF4J(I): Connected with provider of type [")); + assertEquals("INFO throwTest - we have a problem", results.get(1)); + assertEquals(Exception.class.getName(), results.get(2)); + assertTrue(results.get(3).contains("at ")); + assertTrue(results.get(3).contains(this.getClass().getName())); } diff --git a/slf4j-nop/pom.xml b/slf4j-nop/pom.xml index c190cc4a..e3c1f10e 100755 --- a/slf4j-nop/pom.xml +++ b/slf4j-nop/pom.xml @@ -29,6 +29,14 @@ org.slf4j slf4j-api + + + org.slf4j + slf4j-api + test-jar + ${project.version} + test + diff --git a/slf4j-nop/src/test/java/org/slf4j/nop/MultithreadedInitializationTest.java b/slf4j-nop/src/test/java/org/slf4j/nop/MultithreadedInitializationTest.java index 9cd0bc0c..e1c7398e 100755 --- a/slf4j-nop/src/test/java/org/slf4j/nop/MultithreadedInitializationTest.java +++ b/slf4j-nop/src/test/java/org/slf4j/nop/MultithreadedInitializationTest.java @@ -40,9 +40,11 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactoryFriend; +import org.slf4j.helpers.StringPrintStream; public class MultithreadedInitializationTest { + static int NUM_LINES_IN_SLF4J_CONNECTED_WITH_PROVIDER_INFO = 1; final static int THREAD_COUNT = 4 + Runtime.getRuntime().availableProcessors() * 2; private static final AtomicLong EVENT_COUNT = new AtomicLong(0); @@ -52,7 +54,7 @@ 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); + StringPrintStream sps = new StringPrintStream(oldErr, false); @Before public void setup() { @@ -80,7 +82,7 @@ public class MultithreadedInitializationTest { logger.info("hello"); EVENT_COUNT.getAndIncrement(); - assertEquals(0, sps.stringList.size()); + assertEquals(NUM_LINES_IN_SLF4J_CONNECTED_WITH_PROVIDER_INFO, sps.stringList.size()); } private static LoggerAccessingThread[] harness() throws InterruptedException, BrokenBarrierException { @@ -120,31 +122,31 @@ 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()); - } - }; +// 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()); +// } +// }; } diff --git a/slf4j-simple/src/test/java/org/slf4j/simple/SimpleLoggerMultithreadedInitializationTest.java b/slf4j-simple/src/test/java/org/slf4j/simple/SimpleLoggerMultithreadedInitializationTest.java index 3abcb639..96c98852 100644 --- a/slf4j-simple/src/test/java/org/slf4j/simple/SimpleLoggerMultithreadedInitializationTest.java +++ b/slf4j-simple/src/test/java/org/slf4j/simple/SimpleLoggerMultithreadedInitializationTest.java @@ -41,6 +41,8 @@ public class SimpleLoggerMultithreadedInitializationTest extends MultithreadedIn // // final int diff = new Random().nextInt(10000); static int NUM_LINES_IN_SLF4J_REPLAY_WARNING = 3; + static int NUM_LINES_IN_SLF4J_CONNECTED_WITH_PROVIDER_INFO = 1; + private final PrintStream oldErr = System.err; final String loggerName = this.getClass().getName(); StringPrintStream sps = new StringPrintStream(oldErr, false); @@ -67,7 +69,7 @@ public class SimpleLoggerMultithreadedInitializationTest extends MultithreadedIn @Override protected int extraLogEvents() { - return NUM_LINES_IN_SLF4J_REPLAY_WARNING; + return NUM_LINES_IN_SLF4J_REPLAY_WARNING + NUM_LINES_IN_SLF4J_CONNECTED_WITH_PROVIDER_INFO; } }