This is an automated email from the ASF dual-hosted git repository.

pkarwasz pushed a commit to branch fix/rebase-on-log4j-api-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 67b0fefa7a108324a49c315c7ad488b5b5ad2e4d
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Fri Mar 22 16:49:06 2024 +0100

    Rebase `log4j-to-slf4j` upon Log4j API 2.24.0
---
 log4j-to-slf4j/pom.xml                             | 10 +++---
 .../slf4j/{SLF4JProvider.java => Activator.java}   | 20 +++++------
 .../org/apache/logging/slf4j/MDCContextMap.java    |  4 +--
 .../java/org/apache/logging/slf4j/SLF4JLogger.java | 14 ++++----
 .../org/apache/logging/slf4j/SLF4JProvider.java    | 18 +++++++++-
 .../org/apache/logging/slf4j/package-info.java     |  2 +-
 .../services/org.apache.logging.log4j.spi.Provider |  1 +
 .../java/org/apache/logging/slf4j/LoggerTest.java  | 40 ++++++++++++++++------
 8 files changed, 73 insertions(+), 36 deletions(-)

diff --git a/log4j-to-slf4j/pom.xml b/log4j-to-slf4j/pom.xml
index f92ff4d06d..bac9e64a9d 100644
--- a/log4j-to-slf4j/pom.xml
+++ b/log4j-to-slf4j/pom.xml
@@ -37,13 +37,13 @@
       <!-- This bridge also support SLF4J 2.x -->
       org.slf4j.*;version="${slf4j.support.range}"
     </bnd-extra-package-options>
-    <bnd-extra-module-options>
-      <!-- The module descriptor is in `META-INF/versions/9`
-           BND 6.x can not find it -->
-      org.slf4j;substitute="slf4j-api"
-    </bnd-extra-module-options>
   </properties>
   <dependencies>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.framework</artifactId>
+      <scope>provided</scope>
+    </dependency>
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
diff --git 
a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JProvider.java 
b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/Activator.java
similarity index 66%
copy from 
log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JProvider.java
copy to log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/Activator.java
index c340d30c40..5080869f5d 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JProvider.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/Activator.java
@@ -16,16 +16,16 @@
  */
 package org.apache.logging.slf4j;
 
-import aQute.bnd.annotation.Resolution;
-import aQute.bnd.annotation.spi.ServiceProvider;
-import org.apache.logging.log4j.spi.Provider;
+import org.apache.logging.log4j.util.ProviderActivator;
+import org.osgi.annotation.bundle.Header;
 
-/**
- * Bind the Log4j API to SLF4J.
- */
-@ServiceProvider(value = Provider.class, resolution = Resolution.OPTIONAL)
-public class SLF4JProvider extends Provider {
-    public SLF4JProvider() {
-        super(15, "3.0.0", SLF4JLoggerContextFactory.class, 
MDCContextMap.class);
+@Header(name = org.osgi.framework.Constants.BUNDLE_ACTIVATOR, value = 
"${@class}")
+@Header(
+        name = org.osgi.framework.Constants.BUNDLE_ACTIVATIONPOLICY,
+        value = org.osgi.framework.Constants.ACTIVATION_LAZY)
+public class Activator extends ProviderActivator {
+
+    public Activator() {
+        super(new SLF4JProvider());
     }
 }
diff --git 
a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java 
b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
index f2e3463e7e..4f2ef190bb 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
@@ -19,7 +19,7 @@ package org.apache.logging.slf4j;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-import org.apache.logging.log4j.spi.ThreadContextMap;
+import org.apache.logging.log4j.spi.CleanableThreadContextMap;
 import org.apache.logging.log4j.util.SortedArrayStringMap;
 import org.apache.logging.log4j.util.StringMap;
 import org.slf4j.MDC;
@@ -27,7 +27,7 @@ import org.slf4j.MDC;
 /**
  * Bind the ThreadContextMap to the SLF4J MDC.
  */
-public class MDCContextMap implements ThreadContextMap {
+public class MDCContextMap implements CleanableThreadContextMap {
 
     private static final StringMap EMPTY_CONTEXT_DATA = new 
SortedArrayStringMap(1);
 
diff --git 
a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java 
b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java
index 919cf2dee5..26e94c67b3 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java
@@ -23,14 +23,14 @@ import 
org.apache.logging.log4j.message.LoggerNameAwareMessage;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.MessageFactory;
 import org.apache.logging.log4j.spi.AbstractLogger;
-import org.apache.logging.log4j.spi.LoggingSystem;
-import org.apache.logging.log4j.spi.recycler.Recycler;
+import org.apache.logging.log4j.util.Constants;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MarkerFactory;
 import org.slf4j.spi.LocationAwareLogger;
 
 public class SLF4JLogger extends AbstractLogger {
 
+    private static final long serialVersionUID = 1L;
     /**
      * Logback supports turbo filters, that can override the logger's level.
      * Therefore we can never return a no-op builder.
@@ -38,11 +38,9 @@ public class SLF4JLogger extends AbstractLogger {
     private static final boolean LAZY_LEVEL_CHECK = 
"ch.qos.logback.classic.LoggerContext"
             .equals(LoggerFactory.getILoggerFactory().getClass().getName());
 
-    private static final Recycler<SLF4JLogBuilder> LOG_BUILDER_RECYCLER =
-            LoggingSystem.getRecyclerFactory().create(SLF4JLogBuilder::new);
+    private static final ThreadLocal<SLF4JLogBuilder> logBuilder = 
ThreadLocal.withInitial(SLF4JLogBuilder::new);
 
     private final org.slf4j.Logger logger;
-
     private final LocationAwareLogger locationAwareLogger;
 
     public SLF4JLogger(final String name, final MessageFactory messageFactory, 
final org.slf4j.Logger logger) {
@@ -366,8 +364,10 @@ public class SLF4JLogger extends AbstractLogger {
 
     @Override
     protected LogBuilder getLogBuilder(final Level level) {
-        final SLF4JLogBuilder builder = LOG_BUILDER_RECYCLER.acquire();
-        return builder.reset(this, level);
+        final SLF4JLogBuilder builder = logBuilder.get();
+        return Constants.ENABLE_THREADLOCALS && !builder.isInUse()
+                ? builder.reset(this, level)
+                : new SLF4JLogBuilder(this, level);
     }
 
     @Override
diff --git 
a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JProvider.java 
b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JProvider.java
index c340d30c40..318d7937f6 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JProvider.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JProvider.java
@@ -18,14 +18,30 @@ package org.apache.logging.slf4j;
 
 import aQute.bnd.annotation.Resolution;
 import aQute.bnd.annotation.spi.ServiceProvider;
+import org.apache.logging.log4j.spi.LoggerContextFactory;
 import org.apache.logging.log4j.spi.Provider;
+import org.apache.logging.log4j.spi.ThreadContextMap;
 
 /**
  * Bind the Log4j API to SLF4J.
  */
 @ServiceProvider(value = Provider.class, resolution = Resolution.OPTIONAL)
 public class SLF4JProvider extends Provider {
+
+    private static final LoggerContextFactory CONTEXT_FACTORY = new 
SLF4JLoggerContextFactory();
+    private static final ThreadContextMap THREAD_CONTEXT_MAP = new 
MDCContextMap();
+
     public SLF4JProvider() {
-        super(15, "3.0.0", SLF4JLoggerContextFactory.class, 
MDCContextMap.class);
+        super(15, CURRENT_VERSION);
+    }
+
+    @Override
+    public LoggerContextFactory getLoggerContextFactory() {
+        return CONTEXT_FACTORY;
+    }
+
+    @Override
+    public ThreadContextMap getThreadContextMapInstance() {
+        return THREAD_CONTEXT_MAP;
     }
 }
diff --git 
a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/package-info.java 
b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/package-info.java
index e354601ca7..ba4cb130be 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/package-info.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/package-info.java
@@ -18,7 +18,7 @@
  * SLF4J support.
  */
 @Export
-@Version("2.20.1")
+@Version("2.24.0")
 package org.apache.logging.slf4j;
 
 import org.osgi.annotation.bundle.Export;
diff --git 
a/log4j-to-slf4j/src/main/resources/META-INF/services/org.apache.logging.log4j.spi.Provider
 
b/log4j-to-slf4j/src/main/resources/META-INF/services/org.apache.logging.log4j.spi.Provider
new file mode 100644
index 0000000000..c66b5c946a
--- /dev/null
+++ 
b/log4j-to-slf4j/src/main/resources/META-INF/services/org.apache.logging.log4j.spi.Provider
@@ -0,0 +1 @@
+org.apache.logging.slf4j.SLF4JProvider
\ No newline at end of file
diff --git 
a/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java 
b/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java
index ad14d17aed..5f89d5a526 100644
--- a/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java
+++ b/log4j-to-slf4j/src/test/java/org/apache/logging/slf4j/LoggerTest.java
@@ -25,7 +25,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -41,9 +40,10 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.message.MessageFactory;
-import org.apache.logging.log4j.message.ReusableMessageFactory;
+import org.apache.logging.log4j.message.ParameterizedMessageFactory;
 import org.apache.logging.log4j.message.StringFormatterMessageFactory;
-import org.apache.logging.log4j.spi.LoggingSystem;
+import org.apache.logging.log4j.spi.AbstractLogger;
+import org.apache.logging.log4j.spi.MessageFactory2Adapter;
 import org.apache.logging.log4j.test.junit.UsingStatusListener;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -53,6 +53,7 @@ import org.slf4j.MDC;
 @LoggerContextSource
 public class LoggerTest {
 
+    private static final Object OBJ = new Object();
     // Log4j objects
     private Logger logger;
     // Logback objects
@@ -79,9 +80,23 @@ public class LoggerTest {
         assertThat(list.strList, hasSize(2));
     }
 
+    @Test
+    public void basicFlowDepreacted() {
+        logger.entry();
+        logger.exit();
+        assertThat(list.strList, hasSize(2));
+    }
+
+    @Test
+    public void simpleFlowDeprecated() {
+        logger.entry(OBJ);
+        logger.exit(0);
+        assertThat(list.strList, hasSize(2));
+    }
+
     @Test
     public void simpleFlow() {
-        logger.traceEntry("foo");
+        logger.entry(OBJ);
         logger.traceExit(0);
         assertThat(list.strList, hasSize(2));
     }
@@ -113,7 +128,7 @@ public class LoggerTest {
         final Logger testLogger = testMessageFactoryMismatch(
                 "getLogger_String_MessageFactoryMismatch",
                 StringFormatterMessageFactory.INSTANCE,
-                new ReusableMessageFactory());
+                ParameterizedMessageFactory.INSTANCE);
         testLogger.debug("%,d", Integer.MAX_VALUE);
         assertThat(list.strList, hasSize(1));
         assertThat(list.strList, hasItem(String.format("%,d", 
Integer.MAX_VALUE)));
@@ -138,12 +153,17 @@ public class LoggerTest {
         return testLogger;
     }
 
-    private static void checkMessageFactory(final MessageFactory 
messageFactory, final Logger testLogger) {
-        if (messageFactory == null) {
-            assertSame(LoggingSystem.getMessageFactory(), 
testLogger.getMessageFactory());
+    private static void checkMessageFactory(final MessageFactory 
messageFactory1, final Logger testLogger1) {
+        if (messageFactory1 == null) {
+            assertEquals(
+                    AbstractLogger.DEFAULT_MESSAGE_FACTORY_CLASS,
+                    testLogger1.getMessageFactory().getClass());
         } else {
-            final MessageFactory actual = testLogger.getMessageFactory();
-            assertEquals(messageFactory, actual);
+            MessageFactory actual = testLogger1.getMessageFactory();
+            if (actual instanceof MessageFactory2Adapter) {
+                actual = ((MessageFactory2Adapter) actual).getOriginal();
+            }
+            assertEquals(messageFactory1, actual);
         }
     }
 

Reply via email to