diff --git a/bookkeeper-common/build.gradle b/bookkeeper-common/build.gradle
index 27a9a063ff9..94b5b36d63c 100644
--- a/bookkeeper-common/build.gradle
+++ b/bookkeeper-common/build.gradle
@@ -41,9 +41,10 @@ dependencies {
testImplementation depLibs.commonsLang3
testImplementation depLibs.hamcrest
testImplementation depLibs.junit
- testImplementation depLibs.log4j
+ testImplementation depLibs.log4jSlf4jImpl
+ testImplementation depLibs.log4j12api
+ testImplementation depLibs.log4jCore
testImplementation depLibs.mockito
- testImplementation depLibs.slf4jLog4j
annotationProcessor depLibs.lombok
testAnnotationProcessor depLibs.lombok
diff --git a/bookkeeper-common/pom.xml b/bookkeeper-common/pom.xml
index 82a6792f61c..c1065c975be 100644
--- a/bookkeeper-common/pom.xml
+++ b/bookkeeper-common/pom.xml
@@ -74,6 +74,26 @@
commons-lang3
test
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-1.2-api
+ ${log4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-core
+ ${log4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ ${log4j.version}
+
diff --git a/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/util/OrderedExecutor.java b/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/util/OrderedExecutor.java
index 4330340cc1d..2c892115014 100644
--- a/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/util/OrderedExecutor.java
+++ b/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/util/OrderedExecutor.java
@@ -410,7 +410,7 @@ protected OrderedExecutor(String baseName, int numThreads, ThreadFactory threadF
try {
CpuAffinity.acquireCore();
} catch (Throwable t) {
- log.warn("Failed to acquire CPU core for thread {}", Thread.currentThread().getName(),
+ log.warn("Failed to acquire CPU core for thread {}: {}", Thread.currentThread().getName(),
t.getMessage(), t);
}
}
diff --git a/bookkeeper-common/src/test/java/org/apache/bookkeeper/common/util/TestOrderedExecutorDecorators.java b/bookkeeper-common/src/test/java/org/apache/bookkeeper/common/util/TestOrderedExecutorDecorators.java
index f03b24df950..f8d53b496d8 100644
--- a/bookkeeper-common/src/test/java/org/apache/bookkeeper/common/util/TestOrderedExecutorDecorators.java
+++ b/bookkeeper-common/src/test/java/org/apache/bookkeeper/common/util/TestOrderedExecutorDecorators.java
@@ -27,18 +27,18 @@
import static org.mockito.AdditionalAnswers.answerVoid;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.spy;
import java.util.Queue;
+import java.util.UUID;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.TimeUnit;
-import org.apache.log4j.Appender;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
import org.apache.log4j.MDC;
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.NullAppender;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -53,7 +53,7 @@ public class TestOrderedExecutorDecorators {
private static final Logger log = LoggerFactory.getLogger(TestOrderedExecutorDecorators.class);
private static final String MDC_KEY = "mdc-key";
- private Appender mockAppender;
+ private NullAppender mockAppender;
private final Queue capturedEvents = new ConcurrentLinkedQueue<>();
public static String mdcFormat(Object mdc, String message) {
@@ -63,21 +63,25 @@ public static String mdcFormat(Object mdc, String message) {
@Before
public void setUp() throws Exception {
MDC.clear();
- mockAppender = mock(Appender.class);
- when(mockAppender.getName()).thenReturn("MockAppender");
-
- LogManager.getRootLogger().addAppender(mockAppender);
- LogManager.getRootLogger().setLevel(Level.INFO);
-
- doAnswer(answerVoid((LoggingEvent event) -> {
- capturedEvents.add(mdcFormat(event.getMDC(MDC_KEY),
- event.getRenderedMessage()));
- })).when(mockAppender).doAppend(any());
+ LoggerContext lc = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
+ mockAppender = spy(NullAppender.createAppender(UUID.randomUUID().toString()));
+ mockAppender.start();
+ lc.getConfiguration().addAppender(mockAppender);
+ lc.getRootLogger().addAppender(lc.getConfiguration().getAppender(mockAppender.getName()));
+ lc.getConfiguration().getRootLogger().setLevel(Level.INFO);
+ lc.updateLoggers();
+
+ doAnswer(answerVoid((LogEvent event) -> {
+ capturedEvents.add(mdcFormat(event.getContextData().getValue(MDC_KEY),
+ event.getMessage().getFormattedMessage()));
+ })).when(mockAppender).append(any());
}
@After
public void tearDown() throws Exception {
- LogManager.getRootLogger().removeAppender(mockAppender);
+ LoggerContext lc = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
+ lc.getRootLogger().removeAppender(lc.getConfiguration().getAppender(mockAppender.getName()));
+ lc.updateLoggers();
capturedEvents.clear();
MDC.clear();
}
diff --git a/bookkeeper-dist/all/build.gradle b/bookkeeper-dist/all/build.gradle
index 2ad37192cb1..343f01a7111 100644
--- a/bookkeeper-dist/all/build.gradle
+++ b/bookkeeper-dist/all/build.gradle
@@ -40,7 +40,7 @@ dependencies {
compileOnly depLibs.lombok
compileOnly depLibs.spotbugsAnnotations
- implementation depLibs.slf4jLog4j
+ implementation depLibs.log4j12api
testCompileOnly depLibs.lombok
diff --git a/bookkeeper-dist/all/pom.xml b/bookkeeper-dist/all/pom.xml
index c337e99a12b..146dafa3271 100644
--- a/bookkeeper-dist/all/pom.xml
+++ b/bookkeeper-dist/all/pom.xml
@@ -99,8 +99,16 @@
- org.slf4j
- slf4j-log4j12
+ org.apache.logging.log4j
+ log4j-1.2-api
+
+
+ org.apache.logging.log4j
+ log4j-core
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
diff --git a/bookkeeper-dist/bkctl/pom.xml b/bookkeeper-dist/bkctl/pom.xml
index a4ab31f4ed5..8ac6545851e 100644
--- a/bookkeeper-dist/bkctl/pom.xml
+++ b/bookkeeper-dist/bkctl/pom.xml
@@ -47,8 +47,16 @@
- org.slf4j
- slf4j-log4j12
+ org.apache.logging.log4j
+ log4j-1.2-api
+
+
+ org.apache.logging.log4j
+ log4j-core
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
diff --git a/bookkeeper-dist/server/build.gradle b/bookkeeper-dist/server/build.gradle
index a3264f7875d..6ce817ddf9f 100644
--- a/bookkeeper-dist/server/build.gradle
+++ b/bookkeeper-dist/server/build.gradle
@@ -42,7 +42,7 @@ dependencies {
compileOnly depLibs.lombok
compileOnly depLibs.spotbugsAnnotations
- implementation depLibs.slf4jLog4j
+ implementation depLibs.log4j12api
testCompileOnly depLibs.lombok
diff --git a/bookkeeper-dist/server/pom.xml b/bookkeeper-dist/server/pom.xml
index 41edb48a290..83777f5f342 100644
--- a/bookkeeper-dist/server/pom.xml
+++ b/bookkeeper-dist/server/pom.xml
@@ -85,8 +85,16 @@
- org.slf4j
- slf4j-log4j12
+ org.apache.logging.log4j
+ log4j-1.2-api
+
+
+ org.apache.logging.log4j
+ log4j-core
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
diff --git a/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt b/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt
index 91cd5acbaf8..037fde5aae5 100644
--- a/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt
+++ b/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt
@@ -241,7 +241,10 @@ Apache Software License, Version 2.
- lib/io.vertx-vertx-core-3.9.8.jar [15]
- lib/io.vertx-vertx-web-3.9.8.jar [16]
- lib/io.vertx-vertx-web-common-3.9.8.jar [16]
-- lib/log4j-log4j-1.2.17.jar [17]
+- lib/org.apache.logging.log4j-log4j-1.2-api-2.14.1.jar [17]
+- lib/org.apache.logging.log4j-log4j-api-2.14.1.jar [17]
+- lib/org.apache.logging.log4j-log4j-core-2.14.1.jar [17]
+- lib/org.apache.logging.log4j-log4j-slf4j-impl-2.14.1.jar [17]
- lib/net.java.dev.jna-jna-3.2.7.jar [18]
- lib/org.apache.commons-commons-collections4-4.1.jar [19]
- lib/org.apache.commons-commons-lang3-3.6.jar [20]
@@ -318,7 +321,7 @@ Apache Software License, Version 2.
[14] Source available at https://github.com/vert-x3/vertx-bridge-common/tree/3.9.8
[15] Source available at https://github.com/eclipse/vert.x/tree/3.9.8
[16] Source available at https://github.com/vert-x3/vertx-web/tree/3.9.8
-[17] Source available at http://logging.apache.org/log4j/1.2/download.html
+[17] Source available at https://github.com/apache/logging-log4j2/tree/rel/2.14.1
[18] Source available at https://github.com/java-native-access/jna/tree/3.2.7
[19] Source available at https://git-wip-us.apache.org/repos/asf?p=commons-collections.git;a=tag;h=a3a5ad
[20] Source available at https://git-wip-us.apache.org/repos/asf?p=commons-lang.git;a=shortlog;h=refs/tags/LANG_3_6
@@ -639,7 +642,6 @@ MIT license. For details, see deps/slf4j-1.7.32/LICENSE.txt.
Bundled as
- lib/org.slf4j-slf4j-api-1.7.32.jar
- - lib/org.slf4j-slf4j-log4j12-1.7.32.jar
Source available at https://github.com/qos-ch/slf4j/tree/v_1.7.32
------------------------------------------------------------------------------------
This product bundles the Google Auth Library, which is available under a "3-clause BSD"
diff --git a/bookkeeper-dist/src/main/resources/LICENSE-bkctl.bin.txt b/bookkeeper-dist/src/main/resources/LICENSE-bkctl.bin.txt
index 7cf5559cb55..75a7285dfec 100644
--- a/bookkeeper-dist/src/main/resources/LICENSE-bkctl.bin.txt
+++ b/bookkeeper-dist/src/main/resources/LICENSE-bkctl.bin.txt
@@ -230,7 +230,10 @@ Apache Software License, Version 2.
- lib/io.netty-netty-transport-4.1.68.Final.jar [11]
- lib/io.netty-netty-transport-native-epoll-4.1.68.Final-linux-x86_64.jar [11]
- lib/io.netty-netty-transport-native-unix-common-4.1.68.Final.jar [11]
-- lib/log4j-log4j-1.2.17.jar [16]
+- lib/org.apache.logging.log4j-log4j-1.2-api-2.14.1.jar [16]
+- lib/org.apache.logging.log4j-log4j-api-2.14.1.jar [16]
+- lib/org.apache.logging.log4j-log4j-core-2.14.1.jar [16]
+- lib/org.apache.logging.log4j-log4j-slf4j-impl-2.14.1.jar [16]
- lib/net.java.dev.jna-jna-3.2.7.jar [17]
- lib/org.apache.commons-commons-collections4-4.1.jar [18]
- lib/org.apache.commons-commons-lang3-3.6.jar [19]
@@ -290,7 +293,7 @@ Apache Software License, Version 2.
[9] Source available at https://git-wip-us.apache.org/repos/asf?p=commons-lang.git;a=tag;h=375459
[10] Source available at http://svn.apache.org/viewvc/commons/proper/logging/tags/commons-logging-1.1.1/
[11] Source available at https://github.com/netty/netty/tree/netty-4.1.68.Final
-[16] Source available at http://logging.apache.org/log4j/1.2/download.html
+[16] Source available at https://github.com/apache/logging-log4j2/tree/rel/2.14.1
[17] Source available at https://github.com/java-native-access/jna/tree/3.2.7
[18] Source available at https://git-wip-us.apache.org/repos/asf?p=commons-collections.git;a=tag;h=a3a5ad
[19] Source available at https://git-wip-us.apache.org/repos/asf?p=commons-lang.git;a=shortlog;h=refs/tags/LANG_3_6
@@ -565,7 +568,6 @@ MIT license. For details, see deps/slf4j-1.7.32/LICENSE.txt.
Bundled as
- lib/org.slf4j-slf4j-api-1.7.32.jar
- - lib/org.slf4j-slf4j-log4j12-1.7.32.jar
Source available at https://github.com/qos-ch/slf4j/tree/v_1.7.32
------------------------------------------------------------------------------------
This product bundles the Google Auth Library, which is available under a "3-clause BSD"
diff --git a/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt b/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt
index fa667e832b3..978f10413a7 100644
--- a/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt
+++ b/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt
@@ -241,7 +241,10 @@ Apache Software License, Version 2.
- lib/io.vertx-vertx-core-3.9.8.jar [15]
- lib/io.vertx-vertx-web-3.9.8.jar [16]
- lib/io.vertx-vertx-web-common-3.9.8.jar [16]
-- lib/log4j-log4j-1.2.17.jar [17]
+- lib/org.apache.logging.log4j-log4j-1.2-api-2.14.1.jar [17]
+- lib/org.apache.logging.log4j-log4j-api-2.14.1.jar [17]
+- lib/org.apache.logging.log4j-log4j-core-2.14.1.jar [17]
+- lib/org.apache.logging.log4j-log4j-slf4j-impl-2.14.1.jar [17]
- lib/net.java.dev.jna-jna-3.2.7.jar [18]
- lib/org.apache.commons-commons-collections4-4.1.jar [19]
- lib/org.apache.commons-commons-lang3-3.6.jar [20]
@@ -316,7 +319,7 @@ Apache Software License, Version 2.
[14] Source available at https://github.com/vert-x3/vertx-bridge-common/tree/3.9.8
[15] Source available at https://github.com/eclipse/vert.x/tree/3.9.8
[16] Source available at https://github.com/vert-x3/vertx-web/tree/3.9.8
-[17] Source available at http://logging.apache.org/log4j/1.2/download.html
+[17] Source available at https://github.com/apache/logging-log4j2/tree/rel/2.14.1
[18] Source available at https://github.com/java-native-access/jna/tree/3.2.7
[19] Source available at https://git-wip-us.apache.org/repos/asf?p=commons-collections.git;a=tag;h=a3a5ad
[20] Source available at https://git-wip-us.apache.org/repos/asf?p=commons-lang.git;a=shortlog;h=refs/tags/LANG_3_6
@@ -631,7 +634,6 @@ MIT license. For details, see deps/slf4j-1.7.32/LICENSE.txt.
Bundled as
- lib/org.slf4j-slf4j-api-1.7.32.jar
- - lib/org.slf4j-slf4j-log4j12-1.7.32.jar
Source available at https://github.com/qos-ch/slf4j/tree/v_1.7.32
------------------------------------------------------------------------------------
This product bundles the Google Auth Library, which is available under a "3-clause BSD"
diff --git a/bookkeeper-server/build.gradle b/bookkeeper-server/build.gradle
index b413c340902..b18ed013032 100644
--- a/bookkeeper-server/build.gradle
+++ b/bookkeeper-server/build.gradle
@@ -72,7 +72,9 @@ dependencies {
testImplementation depLibs.zookeeperTest
annotationProcessor depLibs.lombok
testAnnotationProcessor depLibs.lombok
- testImplementation depLibs.slf4jLog4j
+ testImplementation depLibs.log4jSlf4jImpl
+ testImplementation depLibs.log4j12api
+ testImplementation depLibs.log4jCore
}
test {
diff --git a/bookkeeper-server/pom.xml b/bookkeeper-server/pom.xml
index 6c5e0258904..07004c8770a 100644
--- a/bookkeeper-server/pom.xml
+++ b/bookkeeper-server/pom.xml
@@ -50,8 +50,16 @@
rocksdbjni
- org.slf4j
- slf4j-log4j12
+ org.apache.logging.log4j
+ log4j-1.2-api
+
+
+ org.apache.logging.log4j
+ log4j-core
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
org.apache.zookeeper
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/FileSystemUpgrade.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/FileSystemUpgrade.java
index 3ba3675e7b5..b009eae38ca 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/FileSystemUpgrade.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/FileSystemUpgrade.java
@@ -52,6 +52,7 @@
import org.apache.commons.cli.Options;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.io.FileUtils;
+import org.apache.log4j.ConsoleAppender;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -335,8 +336,9 @@ private static void printHelp(Options opts) {
public static void main(String[] args) throws Exception {
org.apache.log4j.Logger root = org.apache.log4j.Logger.getRootLogger();
- root.addAppender(new org.apache.log4j.ConsoleAppender(
- new org.apache.log4j.PatternLayout("%-5p [%t]: %m%n")));
+ ConsoleAppender console = new org.apache.log4j.ConsoleAppender();
+ console.setLayout(new org.apache.log4j.PatternLayout("%-5p [%t]: %m%n"));
+ root.addAppender(console);
root.setLevel(org.apache.log4j.Level.ERROR);
org.apache.log4j.Logger.getLogger(FileSystemUpgrade.class).setLevel(
org.apache.log4j.Level.INFO);
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MdcContextTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MdcContextTest.java
index 54cfaa593c4..51d66d84059 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MdcContextTest.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MdcContextTest.java
@@ -28,11 +28,11 @@
import static org.mockito.AdditionalAnswers.answerVoid;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.spy;
import java.io.File;
import java.util.Queue;
+import java.util.UUID;
import java.util.concurrent.ConcurrentLinkedQueue;
import lombok.extern.slf4j.Slf4j;
@@ -43,12 +43,10 @@
import org.apache.bookkeeper.bookie.LedgerDirsManager;
import org.apache.bookkeeper.conf.ClientConfiguration;
import org.apache.bookkeeper.test.BookKeeperClusterTestCase;
-import org.apache.log4j.Appender;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
import org.apache.log4j.MDC;
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.NullAppender;
import org.hamcrest.CoreMatchers;
import org.junit.After;
import org.junit.Assert;
@@ -69,9 +67,8 @@ public class MdcContextTest extends BookKeeperClusterTestCase {
BookKeeper bkc;
LedgerHandle lh;
- private Appender mockAppender;
+ private NullAppender mockAppender;
private Queue capturedEvents;
- private Logger rootLogger = LogManager.getRootLogger();
public MdcContextTest() {
super(3);
@@ -118,23 +115,28 @@ public void setUp() throws Exception {
lh = bkc.createLedgerAdv(3, 3, 3, BookKeeper.DigestType.CRC32, new byte[] {});
MDC.clear();
- mockAppender = mock(Appender.class);
- when(mockAppender.getName()).thenReturn("MockAppender");
+ LoggerContext lc = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
+ mockAppender = spy(NullAppender.createAppender(UUID.randomUUID().toString()));
+ mockAppender.start();
+ lc.getConfiguration().addAppender(mockAppender);
+ lc.getRootLogger().addAppender(lc.getConfiguration().getAppender(mockAppender.getName()));
+ lc.getConfiguration().getRootLogger().setLevel(org.apache.logging.log4j.Level.INFO);
+ lc.updateLoggers();
- rootLogger.addAppender(mockAppender);
- rootLogger.setLevel(Level.INFO);
capturedEvents = new ConcurrentLinkedQueue<>();
- doAnswer(answerVoid((LoggingEvent event) -> capturedEvents.add(
- mdcFormat(event.getMDC(MDC_REQUEST_ID), event.getRenderedMessage())
- ))).when(mockAppender).doAppend(any());
+ doAnswer(answerVoid((LogEvent event) -> capturedEvents.add(
+ mdcFormat(event.getContextData().getValue(MDC_REQUEST_ID), event.getMessage().getFormattedMessage())
+ ))).when(mockAppender).append(any());
}
@After
public void tearDown() throws Exception {
lh.close();
bkc.close();
- rootLogger.removeAppender(mockAppender);
+ LoggerContext lc = (LoggerContext) org.apache.logging.log4j.LogManager.getContext(false);
+ lc.getRootLogger().removeAppender(lc.getConfiguration().getAppender(mockAppender.getName()));
+ lc.updateLoggers();
capturedEvents = null;
MDC.clear();
super.tearDown();
diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/util/LoggerOutput.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/util/LoggerOutput.java
index eeb161e9ffd..610997cba91 100644
--- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/util/LoggerOutput.java
+++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/util/LoggerOutput.java
@@ -21,16 +21,18 @@
package org.apache.bookkeeper.util;
import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
import java.util.function.Consumer;
import java.util.stream.Collectors;
-import org.apache.log4j.Appender;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.NullAppender;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
@@ -44,13 +46,13 @@
*/
public class LoggerOutput implements TestRule {
- private Appender logAppender;
- private ArgumentCaptor logEventCaptor;
- private List>> logEventExpectations = new ArrayList<>();
+ private NullAppender logAppender;
+ private ArgumentCaptor logEventCaptor;
+ private final List>> logEventExpectations = new ArrayList<>();
public void expect(Consumer> expectation) {
if (logEventCaptor == null) {
- logEventCaptor = ArgumentCaptor.forClass(org.apache.log4j.spi.LoggingEvent.class);
+ logEventCaptor = ArgumentCaptor.forClass(LogEvent.class);
}
logEventExpectations.add(expectation);
}
@@ -61,13 +63,16 @@ public Statement apply(final Statement base, Description description) {
@Override
public void evaluate() throws Throwable {
- logAppender = mock(Appender.class);
- Logger rootLogger = LogManager.getRootLogger();
- rootLogger.addAppender(logAppender);
+ LoggerContext lc = (LoggerContext) LogManager.getContext(false);
+ logAppender = spy(NullAppender.createAppender(UUID.randomUUID().toString()));
+ logAppender.start();
+ lc.getConfiguration().addAppender(logAppender);
+ lc.getRootLogger().addAppender(lc.getConfiguration().getAppender(logAppender.getName()));
+ lc.updateLoggers();
try {
base.evaluate();
if (!logEventExpectations.isEmpty()) {
- verify(logAppender, atLeastOnce()).doAppend(logEventCaptor.capture());
+ verify(logAppender, atLeastOnce()).append(logEventCaptor.capture());
List logEvents = logEventCaptor.getAllValues().stream()
.map(LoggerOutput::toSlf4j)
.collect(Collectors.toList());
@@ -76,7 +81,8 @@ public void evaluate() throws Throwable {
}
}
} finally {
- rootLogger.removeAppender(logAppender);
+ lc.getRootLogger().removeAppender(lc.getConfiguration().getAppender(logAppender.getName()));
+ lc.updateLoggers();
logEventExpectations.clear();
logEventCaptor = null;
}
@@ -84,7 +90,7 @@ public void evaluate() throws Throwable {
};
}
- private static LoggingEvent toSlf4j(org.apache.log4j.spi.LoggingEvent log4jEvent) {
+ private static LoggingEvent toSlf4j(LogEvent log4jEvent) {
return new LoggingEvent() {
@Override
public Level getLevel() {
@@ -113,7 +119,7 @@ public String getLoggerName() {
@Override
public String getMessage() {
- return log4jEvent.getRenderedMessage();
+ return log4jEvent.getMessage().getFormattedMessage();
}
@Override
@@ -128,7 +134,7 @@ public Object[] getArgumentArray() {
@Override
public long getTimeStamp() {
- return log4jEvent.getTimeStamp();
+ return log4jEvent.getTimeMillis();
}
@Override
diff --git a/dependencies.gradle b/dependencies.gradle
index 6806a42135c..a7bc5bf66bb 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -59,7 +59,7 @@ depVersions = [
junit: "4.12",
junitFoundation: "11.0.0",
kerby: "1.1.1",
- log4j: "1.2.27",
+ log4j: "2.14.1",
lombok: "1.18.20",
lz4: "1.3.0",
mockito: "3.0.0",
@@ -126,7 +126,9 @@ depLibs = [
junit: "junit:junit:${depVersions.junit}",
junitFoundation: "com.nordstrom.tools:junit-foundation:${depVersions.junitFoundation}",
kerbySimpleKdc: "org.apache.kerby:kerb-simplekdc:${depVersions.kerby}",
- log4j: "log4j:log4j:${depVersions.log4j}",
+ log4jSlf4jImpl: "org.apache.logging.log4j:log4j-slf4j-impl:${depVersions.log4j}",
+ log4j12api: "org.apache.logging.log4j:log4j-1.2-api:${depVersions.log4j}",
+ log4jCore: "org.apache.logging.log4j:log4j-core:${depVersions.log4j}",
lombok: "org.projectlombok:lombok:${depVersions.lombok}",
lz4: "net.jpountz.lz4:lz4:${depVersions.lz4}",
metricsCore: "io.dropwizard.metrics:metrics-core:${depVersions.dropwizard}",
@@ -151,7 +153,6 @@ depLibs = [
rocksDb: "org.rocksdb:rocksdbjni:${depVersions.rocksDb}",
slf4j: "org.slf4j:slf4j-api:${depVersions.slf4j}",
slf4jSimple: "org.slf4j:slf4j-simple:${depVersions.slf4j}",
- slf4jLog4j: "org.slf4j:slf4j-log4j12:${depVersions.slf4j}",
shrinkwrapImpl: "org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-impl-maven:${depVersions.shrinkwrap}",
shrinkwrapApi: "org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-api:${depVersions.shrinkwrap}",
snappy: "org.xerial.snappy:snappy-java:${depVersions.snappy}",
diff --git a/microbenchmarks/pom.xml b/microbenchmarks/pom.xml
index c0cfedd73ad..dc0093954db 100644
--- a/microbenchmarks/pom.xml
+++ b/microbenchmarks/pom.xml
@@ -43,8 +43,16 @@
slf4j-api
- org.slf4j
- log4j-over-slf4j
+ org.apache.logging.log4j
+ log4j-1.2-api
+
+
+ org.apache.logging.log4j
+ log4j-core
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
org.apache.bookkeeper
diff --git a/pom.xml b/pom.xml
index e5cac7a1926..20daf01ee38 100644
--- a/pom.xml
+++ b/pom.xml
@@ -145,6 +145,7 @@
4.12
0.14.2
1.18.20
+ 2.14.1
1.3.0
3.0.0
4.1.68.Final
@@ -242,14 +243,19 @@
${slf4j.version}
- org.slf4j
- slf4j-log4j12
- ${slf4j.version}
+ org.apache.logging.log4j
+ log4j-1.2-api
+ ${log4j.version}
- org.slf4j
- log4j-over-slf4j
- ${slf4j.version}
+ org.apache.logging.log4j
+ log4j-core
+ ${log4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ ${log4j.version}
@@ -790,8 +796,13 @@
test
- org.slf4j
- slf4j-log4j12
+ org.apache.logging.log4j
+ log4j-core
+ test
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
test
diff --git a/stats/utils/build.gradle b/stats/utils/build.gradle
index b03ced38162..39ff187fbf5 100644
--- a/stats/utils/build.gradle
+++ b/stats/utils/build.gradle
@@ -33,7 +33,7 @@ dependencies {
implementation depLibs.jacksonAnnotations
implementation depLibs.jcommander
implementation depLibs.reflections
- implementation depLibs.slf4jLog4j
+ implementation depLibs.log4j12api
implementation depLibs.snakeyaml
diff --git a/stream/distributedlog/io/dlfs/pom.xml b/stream/distributedlog/io/dlfs/pom.xml
index 7818d45b76d..31366ed9fc0 100644
--- a/stream/distributedlog/io/dlfs/pom.xml
+++ b/stream/distributedlog/io/dlfs/pom.xml
@@ -50,6 +50,14 @@
com.google.guava
guava
+
+ org.slf4j
+ slf4j-log4j12
+
+
+ log4j
+ log4j
+
diff --git a/stream/server/build.gradle b/stream/server/build.gradle
index 7eb3510848e..76f966abc2d 100644
--- a/stream/server/build.gradle
+++ b/stream/server/build.gradle
@@ -50,7 +50,7 @@ dependencies {
implementation depLibs.zookeeper
runtimeOnly depLibs.metricsCore
runtimeOnly depLibs.snappy
- runtimeOnly depLibs.slf4jLog4j
+ runtimeOnly depLibs.log4j12api
runtimeOnly depLibs.commonsBeanutils
runtimeOnly depLibs.vertxCore
runtimeOnly depLibs.vertxWeb
diff --git a/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java b/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java
index 3c83f565a77..2404f21a210 100644
--- a/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java
+++ b/tests/integration-tests-utils/src/main/java/org/apache/bookkeeper/tests/integration/utils/MavenClassLoader.java
@@ -71,14 +71,13 @@ private static MavenClassLoader createClassLoader(ConfigurableMavenResolverSyste
Optional slf4jVersion = Arrays.stream(resolver.resolve(mainArtifact)
.withTransitivity().asResolvedArtifact())
.filter((a) -> a.getCoordinate().getGroupId().equals("org.slf4j")
- && a.getCoordinate().getArtifactId().equals("slf4j-log4j12"))
+ && a.getCoordinate().getArtifactId().equals("slf4j-1.2-api"))
.map((a) -> a.getCoordinate().getVersion())
.findFirst();
List deps = Lists.newArrayList(
MavenDependencies.createDependency(
mainArtifact, ScopeType.COMPILE, false,
- MavenDependencies.createExclusion("org.slf4j:slf4j-log4j12"),
MavenDependencies.createExclusion("log4j:log4j")));
if (slf4jVersion.isPresent()) {
deps.add(MavenDependencies.createDependency("org.slf4j:slf4j-simple:" + slf4jVersion.get(),
diff --git a/tests/integration/cluster/build.gradle b/tests/integration/cluster/build.gradle
index f90ff2052c0..16e8fe6855f 100644
--- a/tests/integration/cluster/build.gradle
+++ b/tests/integration/cluster/build.gradle
@@ -37,7 +37,7 @@ dependencies {
testImplementation project(':stream:clients:java:kv')
testCompileOnly depLibs.lombok
- testImplementation depLibs.slf4jLog4j
+ testImplementation depLibs.log4j12api
testImplementation depLibs.testcontainers
testImplementation depLibs.commonsConfiguration
testAnnotationProcessor depLibs.lombok
diff --git a/tools/ledger/pom.xml b/tools/ledger/pom.xml
index 8a5f074f85e..8becea1f281 100644
--- a/tools/ledger/pom.xml
+++ b/tools/ledger/pom.xml
@@ -36,8 +36,18 @@
${project.parent.version}
- org.slf4j
- slf4j-log4j12
+ org.apache.logging.log4j
+ log4j-1.2-api
+ runtime
+
+
+ org.apache.logging.log4j
+ log4j-core
+ runtime
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
runtime
diff --git a/tools/perf/build.gradle b/tools/perf/build.gradle
index b3a68c36e69..b7d659e6853 100644
--- a/tools/perf/build.gradle
+++ b/tools/perf/build.gradle
@@ -43,7 +43,7 @@ dependencies {
implementation depLibs.commonsConfiguration
implementation depLibs.guava
implementation depLibs.jcommander
- implementation depLibs.slf4jLog4j
+ implementation depLibs.log4j12api
implementation depLibs.zookeeper
implementation depLibs.curatorFramework
implementation depLibs.protobuf
diff --git a/tools/stream/build.gradle b/tools/stream/build.gradle
index 6f232895ad6..223f27ed4dc 100644
--- a/tools/stream/build.gradle
+++ b/tools/stream/build.gradle
@@ -41,7 +41,7 @@ dependencies {
implementation depLibs.commonsConfiguration
implementation depLibs.guava
implementation depLibs.jcommander
- implementation depLibs.slf4jLog4j
+ implementation depLibs.log4j12api
implementation depLibs.zookeeper
implementation depLibs.curatorFramework
implementation depLibs.protobuf