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

gyogal pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/livy.git


The following commit(s) were added to refs/heads/master by this push:
     new e5accb98 [LIVY-1040] Migrate logging framework from Reload4j to Log4j2
e5accb98 is described below

commit e5accb9830627959b829c3025d3dc907d3e70e1b
Author: Gabor Roczei <[email protected]>
AuthorDate: Wed Jun 17 18:19:12 2026 +0200

    [LIVY-1040] Migrate logging framework from Reload4j to Log4j2
    
    ## What changes were proposed in this pull request?
    
    Replaced the reload4j dependency with the Log4j2 library across all modules.
    
    Co-authored by Peter Toth and Gyorgy Gal:
    
    - Added log4j-api, log4j-core, log4j-slf4j-impl and log4j-1.2-api 
(backward-compat bridge) to dependencies
    - Removed ch.qos.reload4j:reload4j from all module poms
    - Migrated all log4j.properties test config files to log4j2.properties 
using the new Log4j2 property-file syntax (rootLogger, appender.* keys)
    
    ## How was this patch tested?
    
    It has been manually tested with the existing unit tests.
    
    ## Was this patch authored or co-authored using generative AI tooling?
    
    No
    
    Co-authored-by: Peter Toth <[email protected]>
    Co-authored-by: Gyorgy Gal <[email protected]>
---
 .../src/test/resources/log4j2.properties           |  32 ++++---
 client-common/pom.xml                              |   2 +-
 .../src/test/resources/log4j2.properties           |  33 ++++---
 ...perties.template => log4j2.properties.template} |  16 ++--
 core/pom.xml                                       |  18 +++-
 .../livy-dev-cluster/conf/livy/log4j.properties    |  33 -------
 .../livy-dev-cluster/conf/livy/log4j2.properties   |  43 +++++++++
 .../livy-dev-cluster/conf/master/log4j.properties  |  35 -------
 .../livy-dev-cluster/conf/master/log4j2.properties |  42 ++++++++
 .../livy-dev-cluster/conf/worker/log4j.properties  |  35 -------
 .../livy-dev-cluster/conf/worker/log4j2.properties |  43 +++++++++
 integration-test/pom.xml                           |   8 ++
 .../{log4j.properties => log4j2.properties}        |  45 +++++----
 pom.xml                                            | 106 ++++++++++++++++++++-
 repl/pom.xml                                       |  21 +++-
 .../src/test/resources/log4j2.properties           |  32 ++++---
 .../org/apache/livy/repl/ReplDriverSuite.scala     |   2 +-
 rsc/pom.xml                                        |  21 +++-
 rsc/src/test/resources/log4j.properties            |  26 -----
 .../src/test/resources/log4j2.properties           |  28 +++---
 scala-api/pom.xml                                  |   2 +-
 .../src/test/resources/log4j2.properties           |  28 +++---
 .../org/apache/livy/scalaapi/ScalaClientTest.scala |   2 +-
 server/pom.xml                                     |  10 +-
 .../{log4j.properties => log4j2.properties}        |  35 ++++---
 thriftserver/client/pom.xml                        |  12 +++
 thriftserver/server/pom.xml                        |   6 +-
 .../{log4j.properties => log4j2.properties}        |  36 ++++---
 thriftserver/session/pom.xml                       |   2 +-
 29 files changed, 485 insertions(+), 269 deletions(-)

diff --git a/client-http/src/test/resources/log4j.properties 
b/api/src/test/resources/log4j2.properties
similarity index 59%
copy from client-http/src/test/resources/log4j.properties
copy to api/src/test/resources/log4j2.properties
index 9a1c19f2..93de5793 100644
--- a/client-http/src/test/resources/log4j.properties
+++ b/api/src/test/resources/log4j2.properties
@@ -16,22 +16,28 @@
 #
 
 # Set everything to be logged to the file target/unit-tests.log
-test.appender=file
-log4j.rootCategory=INFO, ${test.appender}
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.append=true
-log4j.appender.file.file=target/unit-tests.log
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t %p 
%c{1}: %m%n
+rootLogger.level = info
+rootLogger.appenderRef.file.ref = ${sys:test.appender:-File}
+
+appender.file.type = File
+appender.file.name = File
+appender.file.fileName = target/unit-tests.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m%n%ex
 
 # Tests that launch java subprocesses can set the "test.appender" system 
property to
 # "console" to avoid having the child process's logs overwrite the unit test's
 # log file.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%t: %m%n
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_ERR
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: 
%m%n%ex
 
 # Ignore messages below warning level from Jetty, because it's a bit verbose
-log4j.logger.org.apache.livy.shaded=INFO
-log4j.logger.org.eclipse.jetty=WARN
+logger.jetty.name = org.sparkproject.jetty
+logger.jetty.level = warn
+logger.livy_shaded.name = org.apache.livy.shaded
+logger.livy_shaded.value = info
+logger.eclipse_jetty.name = org.eclipse.jetty
+logger.eclipse_jetty.value = warn
diff --git a/client-common/pom.xml b/client-common/pom.xml
index 0337d379..8ee6927b 100644
--- a/client-common/pom.xml
+++ b/client-common/pom.xml
@@ -46,7 +46,7 @@
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-reload4j</artifactId>
+      <artifactId>slf4j-api</artifactId>
       <scope>provided</scope>
     </dependency>
   </dependencies>
diff --git a/scala-api/src/test/resources/log4j.properties 
b/client-http/src/test/resources/log4j2.properties
similarity index 61%
rename from scala-api/src/test/resources/log4j.properties
rename to client-http/src/test/resources/log4j2.properties
index 7f24092f..84b98e17 100644
--- a/scala-api/src/test/resources/log4j.properties
+++ b/client-http/src/test/resources/log4j2.properties
@@ -14,21 +14,28 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+
 # Set everything to be logged to the file target/unit-tests.log
-test.appender=file
-log4j.rootCategory=INFO, ${test.appender}
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.append=true
-log4j.appender.file.file=target/unit-tests.log
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t %p 
%c{1}: %m%n
+rootLogger.level = info
+rootLogger.appenderRef.file.ref = ${sys:test.appender:-File}
+
+appender.file.type = File
+appender.file.name = File
+appender.file.fileName = target/unit-tests.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m%n%ex
+
 # Tests that launch java subprocesses can set the "test.appender" system 
property to
 # "console" to avoid having the child process's logs overwrite the unit test's
 # log file.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%t: %m%n
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_ERR
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: 
%m%n%ex
+
 # Ignore messages below warning level from Jetty, because it's a bit verbose
-log4j.logger.org.spark-project.jetty=WARN
-org.spark-project.jetty.LEVEL=WARN
+logger.sparkproject.name = org.apache.livy.shaded
+logger.sparkproject.level = info
+logger.jetty.name = org.eclipse.jetty
+logger.jetty.level = warn
diff --git a/conf/log4j.properties.template b/conf/log4j2.properties.template
similarity index 70%
rename from conf/log4j.properties.template
rename to conf/log4j2.properties.template
index 70b67a6d..b4fbf0e7 100644
--- a/conf/log4j.properties.template
+++ b/conf/log4j2.properties.template
@@ -15,10 +15,14 @@
 # limitations under the License.
 #
 # The default Livy logging configuration.
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
 
-log4j.logger.org.eclipse.jetty=WARN
+rootLogger.level = info
+rootLogger.appenderRef.stdout.ref = console
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_ERR
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
+
+logger.jetty.name = org.eclipse.jetty
+logger.jetty.level = warn
diff --git a/core/pom.xml b/core/pom.xml
index 56774c2d..8bbe4b7e 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -38,8 +38,20 @@
     </dependency>
 
     <dependency>
-      <groupId>ch.qos.reload4j</groupId>
-      <artifactId>reload4j</artifactId>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-1.2-api</artifactId>
     </dependency>
 
     <dependency>
@@ -59,7 +71,7 @@
 
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-reload4j</artifactId>
+      <artifactId>slf4j-api</artifactId>
     </dependency>
 
     <dependency>
diff --git a/dev/docker/livy-dev-cluster/conf/livy/log4j.properties 
b/dev/docker/livy-dev-cluster/conf/livy/log4j.properties
deleted file mode 100644
index c3a2d09b..00000000
--- a/dev/docker/livy-dev-cluster/conf/livy/log4j.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-log4j.rootCategory=INFO, console, DRFA
-
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d %p %c{1} [%t]: %m%n
-
-log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.DRFA.File=/logs/livy-server.log
-# Rollver at midnight
-log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
-log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
-# Pattern format: Date LogLevel LoggerName LogMessage
-log4j.appender.DRFA.layout.ConversionPattern=%d %p %c{1} [%t]: %m%n
-
-log4j.logger.org.eclipse.jetty=WARN
diff --git a/dev/docker/livy-dev-cluster/conf/livy/log4j2.properties 
b/dev/docker/livy-dev-cluster/conf/livy/log4j2.properties
new file mode 100644
index 00000000..5025fab2
--- /dev/null
+++ b/dev/docker/livy-dev-cluster/conf/livy/log4j2.properties
@@ -0,0 +1,43 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+property.livy.log.dir = /logs
+property.livy.log.file = livy-server.log
+
+rootLogger.level = info
+rootLogger.appenderRefs = stdout, drfa
+rootLogger.appenderRef.stdout.ref = stdout
+rootLogger.appenderRef.drfa.ref = drfa
+
+appender.stdout.type = Console
+appender.stdout.name = stdout
+appender.stdout.layout.type = PatternLayout
+appender.stdout.layout.pattern = %d %p %c{1} [%t]: %m%n
+
+appender.drfa.type = RollingFile
+appender.drfa.name = drfa
+appender.drfa.fileName = ${livy.log.dir}/${livy.log.file}
+appender.drfa.filePattern = ${livy.log.dir}/${livy.log.file}.%d{yyyy-MM-dd}
+appender.drfa.layout.type = PatternLayout
+appender.drfa.layout.pattern = %d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+appender.drfa.policies.type = Policies
+appender.drfa.policies.time.type = TimeBasedTriggeringPolicy
+appender.drfa.policies.time.interval = 1
+
+logger.jetty.name = org.eclipse.jetty
+logger.jetty.level = warn
+
diff --git a/dev/docker/livy-dev-cluster/conf/master/log4j.properties 
b/dev/docker/livy-dev-cluster/conf/master/log4j.properties
deleted file mode 100644
index 644032d2..00000000
--- a/dev/docker/livy-dev-cluster/conf/master/log4j.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-log4j.rootCategory=INFO, console, DRFA
-log4jspark.log.dir=/logs
-log4jspark.log.file=spark-master.log
-
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d %p %c{1} [%t]: %m%n
-
-log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.DRFA.File=${log4jspark.log.dir}/${log4jspark.log.file}
-# Rollver at midnight
-log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
-log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
-# Pattern format: Date LogLevel LoggerName LogMessage
-log4j.appender.DRFA.layout.ConversionPattern=%d %p %c{1} [%t]: %m%n
-
-log4j.logger.org.eclipse.jetty=WARN
diff --git a/dev/docker/livy-dev-cluster/conf/master/log4j2.properties 
b/dev/docker/livy-dev-cluster/conf/master/log4j2.properties
new file mode 100644
index 00000000..70db369b
--- /dev/null
+++ b/dev/docker/livy-dev-cluster/conf/master/log4j2.properties
@@ -0,0 +1,42 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+property.spark.log.dir = /logs
+property.spark.log.file = spark-master.log
+
+rootLogger.level = info
+rootLogger.appenderRefs = stdout, drfa
+rootLogger.appenderRef.stdout.ref = stdout
+rootLogger.appenderRef.drfa.ref = drfa
+
+appender.stdout.type = Console
+appender.stdout.name = stdout
+appender.stdout.layout.type = PatternLayout
+appender.stdout.layout.pattern = %d %p %c{1} [%t]: %m%n
+
+appender.drfa.type = RollingFile
+appender.drfa.name = drfa
+appender.drfa.fileName = ${spark.log.dir}/${spark.log.file}
+appender.drfa.filePattern = ${spark.log.dir}/${spark.log.file}.%d{yyyy-MM-dd}
+appender.drfa.layout.type = PatternLayout
+appender.drfa.layout.pattern = %d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+appender.drfa.policies.type = Policies
+appender.drfa.policies.time.type = TimeBasedTriggeringPolicy
+appender.drfa.policies.time.interval = 1
+
+logger.jetty.name = org.eclipse.jetty
+logger.jetty.level = warn
diff --git a/dev/docker/livy-dev-cluster/conf/worker/log4j.properties 
b/dev/docker/livy-dev-cluster/conf/worker/log4j.properties
deleted file mode 100644
index 23c5ee5d..00000000
--- a/dev/docker/livy-dev-cluster/conf/worker/log4j.properties
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-log4j.rootCategory=INFO, console, DRFA
-log4jspark.log.dir=/logs
-log4jspark.log.file=spark-worker.log
-
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d %p %c{1} [%t]: %m%n
-
-log4j.appender.DRFA=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.DRFA.File=${log4jspark.log.dir}/${log4jspark.log.file}
-# Rollver at midnight
-log4j.appender.DRFA.DatePattern=.yyyy-MM-dd
-log4j.appender.DRFA.layout=org.apache.log4j.PatternLayout
-# Pattern format: Date LogLevel LoggerName LogMessage
-log4j.appender.DRFA.layout.ConversionPattern=%d %p %c{1} [%t]: %m%n
-
-log4j.logger.org.eclipse.jetty=WARN
diff --git a/dev/docker/livy-dev-cluster/conf/worker/log4j2.properties 
b/dev/docker/livy-dev-cluster/conf/worker/log4j2.properties
new file mode 100644
index 00000000..8003e403
--- /dev/null
+++ b/dev/docker/livy-dev-cluster/conf/worker/log4j2.properties
@@ -0,0 +1,43 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+property.spark.log.dir = /logs
+property.spark.log.file = spark-worker.log
+
+rootLogger.level = info
+rootLogger.appenderRefs = stdout, drfa
+rootLogger.appenderRef.stdout.ref = stdout
+rootLogger.appenderRef.drfa.ref = drfa
+
+appender.stdout.type = Console
+appender.stdout.name = stdout
+appender.stdout.layout.type = PatternLayout
+appender.stdout.layout.pattern = %d %p %c{1} [%t]: %m%n
+
+appender.drfa.type = RollingFile
+appender.drfa.name = drfa
+appender.drfa.fileName = ${spark.log.dir}/${spark.log.file}
+appender.drfa.filePattern = ${spark.log.dir}/${spark.log.file}.%d{yyyy-MM-dd}
+appender.drfa.layout.type = PatternLayout
+appender.drfa.layout.pattern = %d{ISO8601} %-5p %c{2} (%F:%M(%L)) - %m%n
+appender.drfa.policies.type = Policies
+appender.drfa.policies.time.type = TimeBasedTriggeringPolicy
+appender.drfa.policies.time.interval = 1
+
+logger.jetty.name = org.eclipse.jetty
+logger.jetty.level = warn
+
diff --git a/integration-test/pom.xml b/integration-test/pom.xml
index 1f9d67a9..a71e2afd 100644
--- a/integration-test/pom.xml
+++ b/integration-test/pom.xml
@@ -215,6 +215,10 @@
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+        </exclusion>
         <exclusion>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-log4j12</artifactId>
@@ -337,6 +341,10 @@
               <groupId>org.apache.logging.log4j</groupId>
               <artifactId>log4j-slf4j-impl</artifactId>
             </exclusion>
+            <exclusion>
+              <groupId>log4j</groupId>
+              <artifactId>log4j</artifactId>
+            </exclusion>
             <exclusion>
               <groupId>org.slf4j</groupId>
               <artifactId>slf4j-log4j12</artifactId>
diff --git a/integration-test/src/test/resources/log4j.properties 
b/integration-test/src/test/resources/log4j2.properties
similarity index 50%
rename from integration-test/src/test/resources/log4j.properties
rename to integration-test/src/test/resources/log4j2.properties
index 295df53b..e7db7e08 100644
--- a/integration-test/src/test/resources/log4j.properties
+++ b/integration-test/src/test/resources/log4j2.properties
@@ -16,27 +16,36 @@
 #
 
 # Set everything to be logged to the file target/unit-tests.log
-test.appender=file
-log4j.rootCategory=DEBUG, ${test.appender}
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.append=true
-log4j.appender.file.file=target/unit-tests.log
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t %p 
%c{1}: %m%n
+rootLogger.level = debug
+rootLogger.appenderRef.file.ref = ${sys:test.appender:-File}
+
+appender.file.type = File
+appender.file.name = File
+appender.file.fileName = target/unit-tests.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m%n%ex
 
 # Tests that launch java subprocesses can set the "test.appender" system 
property to
 # "console" to avoid having the child process's logs overwrite the unit test's
 # log file.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t: 
%m%n
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_ERR
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: 
%m%n%ex
 
 # Silence 3rd party libraries.
-log4j.logger.org.apache.livy.rsc=INFO
-log4j.logger.org.apache.livy.shaded=INFO
-log4j.logger.com.decodified=WARN
-log4j.logger.com.ning.http=WARN
-log4j.logger.org.apache.hadoop=WARN
-log4j.logger.org.eclipse.jetty=WARN
-log4j.logger.net.schmizz=WARN
+logger.livy_rsc.name = org.apache.livy.rsc
+logger.livy_rsc.level = info
+logger.livy_shaded.name = org.apache.livy.shaded
+logger.livy_shaded.level = info
+logger.decodified.name = com.decodified
+logger.decodified.level = warn
+logger.ning_http.name = com.ning.http
+logger.ning_http.level = warn
+logger.hadoop.name = org.apache.hadoop
+logger.hadoop.level = warn
+logger.schmizz.name = net.schmizz
+logger.schmizz.level = warn
+logger.jetty.name = org.eclipse.jetty
+logger.jetty.level = warn
diff --git a/pom.xml b/pom.xml
index 3ba2d405..218b4315 100644
--- a/pom.xml
+++ b/pom.xml
@@ -81,7 +81,6 @@
     <asynchttpclient.version>2.10.1</asynchttpclient.version>
     <hadoop.scope>compile</hadoop.scope>
     <slf4j.version>1.7.36</slf4j.version>
-    <reload4j.version>1.2.26</reload4j.version>
     <spark.scala-2.12.version>3.3.4</spark.scala-2.12.version>
     <spark.version>${spark.scala-2.12.version}</spark.version>
     <kubernetes.client.version>5.6.0</kubernetes.client.version>
@@ -97,6 +96,7 @@
     <jetty.version>9.4.56.v20240826</jetty.version>
     <junit.version>4.13.1</junit.version>
     <libthrift.version>0.9.3</libthrift.version>
+    <log4j.version>2.26.0</log4j.version>
     <kryo.version>4.0.2</kryo.version>
     <metrics.version>3.1.0</metrics.version>
     <mockito.version>1.10.19</mockito.version>
@@ -282,9 +282,25 @@
     <dependencies>
 
       <dependency>
-        <groupId>ch.qos.reload4j</groupId>
-        <artifactId>reload4j</artifactId>
-        <version>${reload4j.version}</version>
+        <groupId>org.apache.logging.log4j</groupId>
+        <artifactId>log4j-slf4j-impl</artifactId>
+        <version>${log4j.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.logging.log4j</groupId>
+        <artifactId>log4j-api</artifactId>
+        <version>${log4j.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.logging.log4j</groupId>
+        <artifactId>log4j-core</artifactId>
+        <version>${log4j.version}</version>
+      </dependency>
+      <dependency>
+        <!-- API bridge between log4j 1 and 2 -->
+        <groupId>org.apache.logging.log4j</groupId>
+        <artifactId>log4j-1.2-api</artifactId>
+        <version>${log4j.version}</version>
       </dependency>
 
       <dependency>
@@ -378,6 +394,14 @@
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>ch.qos.reload4j</groupId>
+            <artifactId>reload4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-reload4j</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
 
@@ -414,6 +438,14 @@
             <groupId>com.sun.jersey</groupId>
             <artifactId>jersey-server</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>ch.qos.reload4j</groupId>
+            <artifactId>reload4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-reload4j</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
 
@@ -443,6 +475,14 @@
             <groupId>com.sun.jersey</groupId>
             <artifactId>jersey-server</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>ch.qos.reload4j</groupId>
+            <artifactId>reload4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-reload4j</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
 
@@ -483,6 +523,14 @@
             <groupId>org.codehaus.jackson</groupId>
             <artifactId>jackson-xc</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>ch.qos.reload4j</groupId>
+            <artifactId>reload4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-reload4j</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
 
@@ -495,6 +543,18 @@
             <groupId>log4j</groupId>
             <artifactId>log4j</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>ch.qos.reload4j</groupId>
+            <artifactId>reload4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-reload4j</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
 
@@ -512,6 +572,18 @@
             <groupId>com.sun.jersey</groupId>
             <artifactId>jersey-core</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>ch.qos.reload4j</groupId>
+            <artifactId>reload4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-reload4j</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
 
@@ -566,6 +638,18 @@
             <groupId>org.codehaus.jackson</groupId>
             <artifactId>jackson-jaxrs</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>ch.qos.reload4j</groupId>
+            <artifactId>reload4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-reload4j</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
 
@@ -593,6 +677,18 @@
             <groupId>com.sun.jersey</groupId>
             <artifactId>jersey-client</artifactId>
           </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>ch.qos.reload4j</groupId>
+            <artifactId>reload4j</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-reload4j</artifactId>
+          </exclusion>
         </exclusions>
       </dependency>
 
@@ -857,7 +953,7 @@
 
       <dependency>
         <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-reload4j</artifactId>
+        <artifactId>slf4j-api</artifactId>
         <version>${slf4j.version}</version>
       </dependency>
 
diff --git a/repl/pom.xml b/repl/pom.xml
index 890a6780..2c950a2b 100644
--- a/repl/pom.xml
+++ b/repl/pom.xml
@@ -84,8 +84,23 @@
     </dependency>
 
     <dependency>
-      <groupId>ch.qos.reload4j</groupId>
-      <artifactId>reload4j</artifactId>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-1.2-api</artifactId>
       <scope>provided</scope>
     </dependency>
 
@@ -158,7 +173,7 @@
 
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-reload4j</artifactId>
+      <artifactId>slf4j-api</artifactId>
       <scope>provided</scope>
     </dependency>
 
diff --git a/client-http/src/test/resources/log4j.properties 
b/repl/src/test/resources/log4j2.properties
similarity index 59%
copy from client-http/src/test/resources/log4j.properties
copy to repl/src/test/resources/log4j2.properties
index 9a1c19f2..93de5793 100644
--- a/client-http/src/test/resources/log4j.properties
+++ b/repl/src/test/resources/log4j2.properties
@@ -16,22 +16,28 @@
 #
 
 # Set everything to be logged to the file target/unit-tests.log
-test.appender=file
-log4j.rootCategory=INFO, ${test.appender}
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.append=true
-log4j.appender.file.file=target/unit-tests.log
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t %p 
%c{1}: %m%n
+rootLogger.level = info
+rootLogger.appenderRef.file.ref = ${sys:test.appender:-File}
+
+appender.file.type = File
+appender.file.name = File
+appender.file.fileName = target/unit-tests.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m%n%ex
 
 # Tests that launch java subprocesses can set the "test.appender" system 
property to
 # "console" to avoid having the child process's logs overwrite the unit test's
 # log file.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%t: %m%n
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_ERR
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: 
%m%n%ex
 
 # Ignore messages below warning level from Jetty, because it's a bit verbose
-log4j.logger.org.apache.livy.shaded=INFO
-log4j.logger.org.eclipse.jetty=WARN
+logger.jetty.name = org.sparkproject.jetty
+logger.jetty.level = warn
+logger.livy_shaded.name = org.apache.livy.shaded
+logger.livy_shaded.value = info
+logger.eclipse_jetty.name = org.eclipse.jetty
+logger.eclipse_jetty.value = warn
diff --git a/repl/src/test/scala/org/apache/livy/repl/ReplDriverSuite.scala 
b/repl/src/test/scala/org/apache/livy/repl/ReplDriverSuite.scala
index da64577e..e2a753af 100644
--- a/repl/src/test/scala/org/apache/livy/repl/ReplDriverSuite.scala
+++ b/repl/src/test/scala/org/apache/livy/repl/ReplDriverSuite.scala
@@ -39,7 +39,7 @@ class ReplDriverSuite extends FunSuite with 
LivyBaseUnitTestSuite {
 
   test("start a repl session using the rsc") {
     val client = new LivyClientBuilder()
-      .setConf(SparkLauncher.DRIVER_MEMORY, "512m")
+      .setConf(SparkLauncher.DRIVER_MEMORY, "1024m")
       .setConf(SparkLauncher.DRIVER_EXTRA_CLASSPATH, 
sys.props("java.class.path"))
       .setConf(SparkLauncher.EXECUTOR_EXTRA_CLASSPATH, 
sys.props("java.class.path"))
       .setConf(RSCConf.Entry.LIVY_JARS.key(), "")
diff --git a/rsc/pom.xml b/rsc/pom.xml
index 76f79de1..4c2ab144 100644
--- a/rsc/pom.xml
+++ b/rsc/pom.xml
@@ -87,8 +87,23 @@
       <scope>provided</scope>
     </dependency>
     <dependency>
-      <groupId>ch.qos.reload4j</groupId>
-      <artifactId>reload4j</artifactId>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-1.2-api</artifactId>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -118,7 +133,7 @@
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-reload4j</artifactId>
+      <artifactId>slf4j-api</artifactId>
       <scope>provided</scope>
     </dependency>
   </dependencies>
diff --git a/rsc/src/test/resources/log4j.properties 
b/rsc/src/test/resources/log4j.properties
deleted file mode 100644
index 6143ee57..00000000
--- a/rsc/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Set everything to be logged to the file target/unit-tests.log
-log4j.rootCategory=WARN, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
-
-# Silence some verbose logs.
-log4j.logger.org.spark-project.jetty=WARN
diff --git a/client-http/src/test/resources/log4j.properties 
b/rsc/src/test/resources/log4j2.properties
similarity index 63%
rename from client-http/src/test/resources/log4j.properties
rename to rsc/src/test/resources/log4j2.properties
index 9a1c19f2..09f50048 100644
--- a/client-http/src/test/resources/log4j.properties
+++ b/rsc/src/test/resources/log4j2.properties
@@ -16,22 +16,24 @@
 #
 
 # Set everything to be logged to the file target/unit-tests.log
-test.appender=file
-log4j.rootCategory=INFO, ${test.appender}
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.append=true
-log4j.appender.file.file=target/unit-tests.log
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t %p 
%c{1}: %m%n
+rootLogger.level = info
+rootLogger.appenderRef.file.ref = ${sys:test.appender:-File}
+
+appender.file.type = File
+appender.file.name = File
+appender.file.fileName = target/unit-tests.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m%n%ex
 
 # Tests that launch java subprocesses can set the "test.appender" system 
property to
 # "console" to avoid having the child process's logs overwrite the unit test's
 # log file.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%t: %m%n
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_ERR
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: 
%m%n%ex
 
 # Ignore messages below warning level from Jetty, because it's a bit verbose
-log4j.logger.org.apache.livy.shaded=INFO
-log4j.logger.org.eclipse.jetty=WARN
+logger.jetty.name = org.sparkproject.jetty
+logger.jetty.level = warn
diff --git a/scala-api/pom.xml b/scala-api/pom.xml
index 73d1e6ad..5eabc63f 100644
--- a/scala-api/pom.xml
+++ b/scala-api/pom.xml
@@ -90,7 +90,7 @@
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-reload4j</artifactId>
+      <artifactId>slf4j-api</artifactId>
       <scope>provided</scope>
     </dependency>
   </dependencies>
diff --git a/repl/src/test/resources/log4j.properties 
b/scala-api/src/test/resources/log4j2.properties
similarity index 63%
rename from repl/src/test/resources/log4j.properties
rename to scala-api/src/test/resources/log4j2.properties
index a54d27de..74fbe6d0 100644
--- a/repl/src/test/resources/log4j.properties
+++ b/scala-api/src/test/resources/log4j2.properties
@@ -16,22 +16,24 @@
 #
 
 # Set everything to be logged to the file target/unit-tests.log
-test.appender=file
-log4j.rootCategory=INFO, ${test.appender}
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.append=true
-log4j.appender.file.file=target/unit-tests.log
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t %p 
%c{1}: %m%n
+rootLogger.level = info
+rootLogger.appenderRef.file.ref = ${sys:test.appender:-File}
+
+appender.file.type = File
+appender.file.name = File
+appender.file.fileName = target/unit-tests.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m%n
 
 # Tests that launch java subprocesses can set the "test.appender" system 
property to
 # "console" to avoid having the child process's logs overwrite the unit test's
 # log file.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%t: %m%n
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_ERR
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: 
%m%n%ex
 
 # Ignore messages below warning level from Jetty, because it's a bit verbose
-log4j.logger.org.spark-project.jetty=WARN
-org.spark-project.jetty.LEVEL=WARN
+logger.jetty.name = org.sparkproject.jetty
+logger.jetty.level = warn
diff --git 
a/scala-api/src/test/scala/org/apache/livy/scalaapi/ScalaClientTest.scala 
b/scala-api/src/test/scala/org/apache/livy/scalaapi/ScalaClientTest.scala
index a716f585..48c80d07 100644
--- a/scala-api/src/test/scala/org/apache/livy/scalaapi/ScalaClientTest.scala
+++ b/scala-api/src/test/scala/org/apache/livy/scalaapi/ScalaClientTest.scala
@@ -182,7 +182,7 @@ object ScalaClientTest {
     } else {
       val classpath: String = System.getProperty("java.class.path")
       conf.put("spark.app.name", "SparkClientSuite Remote App")
-      conf.put(SparkLauncher.DRIVER_MEMORY, "512m")
+      conf.put(SparkLauncher.DRIVER_MEMORY, "1024m")
       conf.put(SparkLauncher.DRIVER_EXTRA_CLASSPATH, classpath)
       conf.put(SparkLauncher.EXECUTOR_EXTRA_CLASSPATH, classpath)
     }
diff --git a/server/pom.xml b/server/pom.xml
index 3408769e..82da034c 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -164,10 +164,18 @@
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+        </exclusion>
         <exclusion>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-log4j12</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>log4j</groupId>
+          <artifactId>log4j</artifactId>
+        </exclusion>
       </exclusions>
     </dependency>
 
@@ -231,7 +239,7 @@
 
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-reload4j</artifactId>
+      <artifactId>slf4j-api</artifactId>
     </dependency>
 
     <dependency>
diff --git a/server/src/test/resources/log4j.properties 
b/server/src/test/resources/log4j2.properties
similarity index 59%
rename from server/src/test/resources/log4j.properties
rename to server/src/test/resources/log4j2.properties
index 9195bd93..347f5dff 100644
--- a/server/src/test/resources/log4j.properties
+++ b/server/src/test/resources/log4j2.properties
@@ -16,24 +16,29 @@
 #
 
 # Set everything to be logged to the file target/unit-tests.log
-test.appender=file
-log4j.rootCategory=INFO, ${test.appender}
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.append=true
-log4j.appender.file.file=target/unit-tests.log
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t %p 
%c{1}: %m%n
+rootLogger.level = info
+rootLogger.appenderRef.file.ref = ${sys:test.appender:-File}
+
+appender.file.type = File
+appender.file.name = File
+appender.file.fileName = target/unit-tests.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m%n%ex
 
 # Tests that launch java subprocesses can set the "test.appender" system 
property to
 # "console" to avoid having the child process's logs overwrite the unit test's
 # log file.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%t: %m%n
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_ERR
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: 
%m%n%ex
 
 # Silence some noisy libraries.
-log4j.logger.org.apache.http=WARN
-log4j.logger.org.apache.spark=INFO
-log4j.logger.org.eclipse.jetty=WARN
-log4j.logger.org.spark-project.jetty=WARN
+logger.http.name = org.apache.http
+logger.http.level = warn
+logger.spark.name = org.apache.spark
+logger.spark.level = info
+logger.jetty.name = org.sparkproject.jetty
+logger.jetty.level = warn
+
diff --git a/thriftserver/client/pom.xml b/thriftserver/client/pom.xml
index 581c9aa0..de5c7b51 100644
--- a/thriftserver/client/pom.xml
+++ b/thriftserver/client/pom.xml
@@ -39,6 +39,18 @@
           <groupId>org.apache.hbase</groupId>
           <artifactId>*</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>org.eclipse.jetty</groupId>
+          <artifactId>apache-jsp</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>log4j</groupId>
+          <artifactId>log4j</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
+        </exclusion>
       </exclusions>
     </dependency>
     <dependency>
diff --git a/thriftserver/server/pom.xml b/thriftserver/server/pom.xml
index ce628461..964e28a0 100644
--- a/thriftserver/server/pom.xml
+++ b/thriftserver/server/pom.xml
@@ -103,7 +103,7 @@
 
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-reload4j</artifactId>
+      <artifactId>slf4j-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.thrift</groupId>
@@ -141,6 +141,10 @@
           <groupId>org.apache.logging.log4j</groupId>
           <artifactId>log4j-slf4j-impl</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>log4j</groupId>
+          <artifactId>log4j</artifactId>
+        </exclusion>
         <exclusion>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-log4j12</artifactId>
diff --git a/thriftserver/server/src/test/resources/log4j.properties 
b/thriftserver/server/src/test/resources/log4j2.properties
similarity index 55%
rename from thriftserver/server/src/test/resources/log4j.properties
rename to thriftserver/server/src/test/resources/log4j2.properties
index 72bab705..5ed335a8 100644
--- a/thriftserver/server/src/test/resources/log4j.properties
+++ b/thriftserver/server/src/test/resources/log4j2.properties
@@ -16,24 +16,30 @@
 #
 
 # Set everything to be logged to the file target/unit-tests.log
-test.appender=file
-log4j.rootCategory=WARN, ${test.appender}
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.append=true
-log4j.appender.file.file=target/unit-tests.log
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t %p 
%c{1}: %m%n
+rootLogger.level = warn
+rootLogger.appenderRef.file.ref = ${sys:test.appender:-File}
+
+appender.file.type = File
+appender.file.name = File
+appender.file.fileName = target/unit-tests.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: %m%n%ex
 
 # Tests that launch java subprocesses can set the "test.appender" system 
property to
 # "console" to avoid having the child process's logs overwrite the unit test's
 # log file.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss.SSS} %t: 
%m%n
+appender.console.type = Console
+appender.console.name = console
+appender.console.target = SYSTEM_ERR
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d{yy/MM/dd HH:mm:ss.SSS} %t %p %c{1}: 
%m%n%ex
 
 # Enable DEBUG logs for Livy classes (with some exceptions).
-log4j.logger.org.apache.livy=DEBUG
-log4j.logger.org.apache.livy.rsc=INFO
-log4j.logger.org.apache.livy.shaded=INFO
-log4j.logger.org.apache.livy.thriftserver.LivyCLIService=INFO
+logger.livy.name = org.apache.livy
+logger.livy.level = debug
+logger.livy_rsc.name = org.apache.livy.rsc
+logger.livy_rsc.level = info
+logger.livy_shaded.name = org.apache.livy.shaded
+logger.livy_shaded.level = info
+logger.livy_cli_service.name = org.apache.livy.thriftserver.LivyCLIService
+logger.livy_cli_service.level = info
diff --git a/thriftserver/session/pom.xml b/thriftserver/session/pom.xml
index 5dbde855..f54475ba 100644
--- a/thriftserver/session/pom.xml
+++ b/thriftserver/session/pom.xml
@@ -38,7 +38,7 @@
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-reload4j</artifactId>
+      <artifactId>slf4j-api</artifactId>
       <scope>provided</scope>
     </dependency>
     <dependency>

Reply via email to