You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by zr...@apache.org on 2021/12/17 20:08:58 UTC

[trafficcontrol] 02/02: Updated log4j from version 1.2.17 to version 2.16.0 (#6390)

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

zrhoffman pushed a commit to branch 6.0.x
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git

commit 79f49d9d70cfb9e91689ec63313c96709242f6a1
Author: Rima Shah <22...@users.noreply.github.com>
AuthorDate: Thu Dec 16 12:59:55 2021 -0700

    Updated log4j from version 1.2.17 to version 2.16.0 (#6390)
    
    * updated log4j from version 1 to 2
    
    * Updated pom.xml to include pom type tag
    
    * Updated pom.xml to remove pom type tag and use log4j-core artifactID.
    Also added LogManager class.
    
    * Updated java files to use LogManager class instead of logger class for ver 2.14.1
    
    * Updated java files to use LogManager class instead of logger class for ver 2.14.1-1
    
    * Un-optimized import statements
    
    * Updated setLevel class for getLogger and getRootLogger.
    
    * Updated setLevel class for getLogger and getRootLogger-1
    
    * Imported Record class from Maven to remove ambiguity.
    
    * Revert "Imported Record class from Maven to remove ambiguity."
    
    This reverts commit 22289f13a5b9b2e9722f2c4e53e8c9ecce349e3c.
    
    * Fixed when clause with LogManager.
    
    * Fixed when clause with LogManager-1
    
    * updated CHANGELOG.md
    
    * Fixed based on review comments
    
    * Fixed based on review comments - 1
    
    * updated import path for ConsoleAppender, PatternLayout, RollingFileAppender classes.
    
    * updated log4j version to 2.15.0
    
    * Added slf4j-simple dependency.
    
    * removed file:// to log INFO level messages.
    
    * removed file:// to log INFO level messages-1
    
    * Migrated log4j properties to log4j2.xml
    
    * Updated log4j to version 2.16.0
    
    * added fileName property
    
    * Updated date format based on review comments.
    
    * Added new line for xml files.
    
    * Added AppenderRef for traffic_router.log, access.log and console.
    
    * Removed typo character and fixed xml tags.
    
    * Updated log4j in ansible.
    
    * Updated based on review comments.
    
    * Added threshold level to main.yml and log4j2.xml
    
    * Added PatternLayout level to main.yml
    
    * Added additivity="false" to avoid printing logs twice
    
    (cherry picked from commit 070df30363152ce63aa4111e7ad7678ca6c1d280)
---
 CHANGELOG.md                                       |  4 ++
 docs/source/admin/traffic_router.rst               | 10 +--
 docs/source/development/traffic_router.rst         |  2 +-
 .../ansible/roles/traffic-router/README.md         |  2 +-
 .../ansible/roles/traffic-router/defaults/main.yml | 71 ++++++++++++----------
 .../roles/traffic-router/tasks/traffic_router.yml  |  2 +-
 .../conf/{log4j.properties.j2 => log4j2.xml.j2}    |  4 +-
 infrastructure/cdn-in-a-box/traffic_router/run.sh  |  2 +-
 infrastructure/docker/traffic_router/starttr.sh    |  2 +-
 .../traffic_router/protocol/LanguidPoller.java     |  7 ++-
 .../traffic_router/protocol/LanguidProtocol.java   |  5 +-
 .../traffic_router/protocol/RouterNioEndpoint.java |  5 +-
 .../secure/CertificateDataConverter.java           |  5 +-
 .../secure/CertificateDataListener.java            |  5 +-
 .../traffic_router/secure/CertificateDecoder.java  |  5 +-
 .../traffic_router/secure/CertificateRegistry.java |  5 +-
 .../traffic_router/secure/KeyManager.java          |  5 +-
 .../tomcat/TomcatLifecycleListener.java            |  5 +-
 .../traffic_router/utils/HttpsProperties.java      |  5 +-
 .../java/protocol/RouterSslImplementationTest.java |  2 +
 .../java/secure/CertificateDataListenerTest.java   |  2 +
 .../src/test/java/secure/KeyManagerTest.java       |  2 +
 .../java/secure/TomcatLifecycleListenerTest.java   |  2 +
 traffic_router/core/pom.xml                        |  4 +-
 traffic_router/core/src/main/conf/log4j.properties | 44 --------------
 traffic_router/core/src/main/conf/log4j2.xml       | 52 ++++++++++++++++
 .../core/src/main/conf/startup.properties          |  2 +-
 .../core/config/CertificateChecker.java            |  5 +-
 .../traffic_router/core/config/ConfigHandler.java  |  5 +-
 .../traffic_router/core/dns/DnsSecKeyPairImpl.java |  5 +-
 .../traffic_router/core/dns/NameServer.java        |  5 +-
 .../traffic_router/core/dns/NameServerMain.java    |  5 +-
 .../traffic_router/core/dns/SignatureManager.java  |  5 +-
 .../traffic_router/core/dns/SignedZoneKey.java     |  5 +-
 .../traffic_router/core/dns/ZoneManager.java       |  5 +-
 .../traffic_router/core/dns/ZoneSignerImpl.java    |  5 +-
 .../traffic_router/core/dns/ZoneUtils.java         |  5 +-
 .../core/dns/protocol/AbstractProtocol.java        |  7 ++-
 .../traffic_router/core/dns/protocol/TCP.java      |  5 +-
 .../traffic_router/core/dns/protocol/UDP.java      |  5 +-
 .../traffic_router/core/ds/DeliveryService.java    |  5 +-
 .../core/ds/LetsEncryptDnsChallengeWatcher.java    |  5 +-
 .../traffic_router/core/ds/SteeringRegistry.java   |  5 +-
 .../traffic_router/core/ds/SteeringWatcher.java    |  5 +-
 .../traffic_router/core/edge/CacheLocation.java    |  6 +-
 .../traffic_router/core/edge/Node.java             |  5 +-
 .../traffic_router/core/edge/Resolver.java         |  7 ++-
 .../traffic_router/core/http/RouterFilter.java     |  5 +-
 .../core/loc/AbstractServiceUpdater.java           |  5 +-
 .../traffic_router/core/loc/AnonymousIp.java       |  8 +--
 .../core/loc/AnonymousIpConfigUpdater.java         |  7 ++-
 .../core/loc/AnonymousIpDatabaseService.java       |  5 +-
 .../core/loc/AnonymousIpDatabaseUpdater.java       |  7 ++-
 .../core/loc/AnonymousIpWhitelist.java             |  5 +-
 .../core/loc/FederationMappingBuilder.java         |  5 +-
 .../core/loc/FederationsWatcher.java               |  5 +-
 .../core/loc/MaxmindGeolocationService.java        |  5 +-
 .../traffic_router/core/loc/NetworkNode.java       |  5 +-
 .../traffic_router/core/loc/RegionalGeo.java       |  5 +-
 .../traffic_router/core/loc/RegionalGeoRule.java   |  5 +-
 .../core/loc/RegionalGeoUpdater.java               |  5 +-
 .../core/monitor/TrafficMonitorWatcher.java        |  7 ++-
 .../traffic_router/core/router/TrafficRouter.java  |  5 +-
 .../core/router/TrafficRouterManager.java          |  5 +-
 .../core/secure/CertificatesClient.java            |  5 +-
 .../core/secure/CertificatesPoller.java            |  5 +-
 .../core/secure/CertificatesPublisher.java         |  5 +-
 .../core/util/AbstractResourceWatcher.java         |  5 +-
 .../traffic_router/core/util/DataExporter.java     | 12 ++--
 .../traffic_router/core/util/Fetcher.java          |  6 +-
 .../traffic_router/core/util/LanguidState.java     |  5 +-
 .../core/util/PeriodicResourceUpdater.java         |  5 +-
 traffic_router/core/src/test/conf/log4j.properties | 47 --------------
 traffic_router/core/src/test/conf/log4j2.xml       | 52 ++++++++++++++++
 .../traffic_router/core/TestBase.java              | 19 +++---
 .../traffic_router/core/TrafficRouterStart.java    | 18 +++---
 .../core/dns/DNSAccessEventBuilderTest.java        |  2 +
 .../traffic_router/core/dns/NameServerTest.java    |  2 +
 .../core/dns/ZoneManagerUnitTest.java              |  2 +
 .../core/dns/ZoneSignerImplTest.java               |  2 +
 .../core/dns/protocol/AbstractProtocolTest.java    | 11 ++--
 .../traffic_router/core/dns/protocol/TCPTest.java  |  2 +
 .../traffic_router/core/dns/protocol/UDPTest.java  |  2 +
 .../core/ds/DeliveryServiceMatcherTest.java        |  2 +
 .../core/external/CoverageZoneTest.java            |  2 +
 .../core/external/ExternalTestSuite.java           | 19 +++---
 .../core/external/HttpDataServer.java              |  2 +-
 .../core/http/HTTPAccessEventBuilderTest.java      |  2 +
 .../core/loc/AbstractServiceUpdaterTest.java       |  2 +
 .../traffic_router/core/loc/CoverageZoneTest.java  |  2 +
 .../traffic_router/core/loc/GeoTest.java           |  5 +-
 .../core/loc/MaxmindGeolocationServiceTest.java    |  2 +
 .../traffic_router/core/loc/NetworkNodeTest.java   |  5 +-
 .../core/loc/NetworkNodeUnitTest.java              |  1 -
 .../core/router/DNSRoutingMissesTest.java          |  2 +
 .../core/router/GeoSortSteeringResultsTest.java    |  3 +
 .../core/router/StatelessTrafficRouterTest.java    |  4 +-
 .../core/util/AbstractResourceWatcherTest.java     |  5 +-
 .../traffic_router/core/util/FetcherTest.java      |  2 +-
 traffic_router/neustar/pom.xml                     |  4 +-
 .../neustar/NeustarGeolocationService.java         |  5 +-
 .../configuration/NeustarConfiguration.java        |  5 +-
 .../neustar/configuration/ServiceRefresher.java    |  5 +-
 .../TrafficRouterConfigurationListener.java        |  5 +-
 .../traffic_router/neustar/data/HttpClient.java    |  5 +-
 .../neustar/data/NeustarDatabaseUpdater.java       |  5 +-
 .../traffic_router/neustar/data/TarExtractor.java  |  5 +-
 .../traffic_router/neustar/files/FilesMover.java   |  5 +-
 .../test/java/data/NeustarDatabaseUpdaterTest.java |  8 +--
 .../src/test/java/data/TarExtractorTest.java       |  7 ++-
 .../geolocation/NeustarGeolocationServiceTest.java |  5 +-
 .../java/neustar/GPDatabaseReaderBuilderTest.java  |  1 +
 traffic_router/pom.xml                             |  2 +-
 traffic_router/shared/pom.xml                      |  8 +--
 .../traffic_router/secure/BindPrivateKey.java      |  5 +-
 .../traffic_router/secure/Pkcs1KeySpecDecoder.java |  7 ++-
 .../traffic_router/secure/Pkcs8.java               |  5 +-
 .../traffic_router/shared/SigningData.java         |  4 ++
 .../src/test/java/secure/BindPrivateKeyTest.java   |  2 +
 119 files changed, 484 insertions(+), 341 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1748eb3..2f4fad7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file.
 
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
 
+## Unreleased
+### Changed
+- Updated `log4j` module in Traffic Router from version 1.2.17 to 2.16.0
+
 ## [6.0.1] - 2021-11-04
 ### Added
 - [#2770](https://github.com/apache/trafficcontrol/issues/2770) Added validation for httpBypassFqdn as hostname in Traffic Ops
diff --git a/docs/source/admin/traffic_router.rst b/docs/source/admin/traffic_router.rst
index 8b30389..f914441 100644
--- a/docs/source/admin/traffic_router.rst
+++ b/docs/source/admin/traffic_router.rst
@@ -164,7 +164,7 @@ For the most part, the configuration files and :term:`Parameters` used by Traffi
 	|                            |                                           | when the ``traffic_router`` service is started. It primarily consists of command |                                                    |
 	|                            |                                           | line settings for the Java process                                               |                                                    |
 	+----------------------------+-------------------------------------------+----------------------------------------------------------------------------------+----------------------------------------------------+
-	| log4j.properties           | various parameters                        | Configuration of ``log4j`` is documented on                                      | N/A                                                |
+	| log4j2.xml                 | various parameters                        | Configuration of ``log4j`` is documented on                                      | N/A                                                |
 	|                            |                                           | `their site <http://logging.apache.org/log4j/2.x/index.html>`_; adjust as needed |                                                    |
 	+----------------------------+-------------------------------------------+----------------------------------------------------------------------------------+----------------------------------------------------+
 	| server.xml                 | various parameters                        | Traffic Router specific configuration for Apache Tomcat. See the Apache Tomcat   | N/A                                                |
@@ -189,11 +189,11 @@ Much of a Traffic Router's configuration can be obtained through the :term:`Para
 	+=========================================+==============================+=======================================================================================================================================+
 	| location                                | dns.zone                     | Location to store the DNS zone files in the local file system of Traffic Router.                                                      |
 	+-----------------------------------------+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+
-	| location                                | http-log4j.properties        | Location to find the log4j.properties file for Traffic Router.                                                                        |
+	| location                                | http-log4j2.xml              | Location to find the log4j2.xml file for Traffic Router.                                                                              |
 	+-----------------------------------------+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+
-	| location                                | dns-log4j.properties         | Location to find the dns-log4j.properties file for Traffic Router.                                                                    |
+	| location                                | dns-log4j2.xml               | Location to find the dns-log4j2.xml file for Traffic Router.                                                                          |
 	+-----------------------------------------+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+
-	| location                                | geolocation.properties       | Location to find the log4j.properties file for Traffic Router.                                                                        |
+	| location                                | geolocation.properties       | Location to find the log4j2.xml file for Traffic Router.                                                                              |
 	+-----------------------------------------+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+
 	| CDN_name                                | rascal-config.txt            | The human readable name of the CDN for this :term:`Profile`.                                                                          |
 	+-----------------------------------------+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------+
@@ -944,7 +944,7 @@ The following is an example of the command line parameters set in :file:`/opt/tr
 
 	CATALINA_OPTS="\
 	-server -Xms2g -Xmx8g \
-	-Dlog4j.configuration=file://$CATALINA_BASE/conf/log4j.properties \
+	-Dlog4j.configurationFile=$CATALINA_BASE/conf/log4j2.xml \
 	-Djava.library.path=/usr/lib64 \
 	-XX:+UseG1GC \
 	-XX:+UnlockExperimentalVMOptions \
diff --git a/docs/source/development/traffic_router.rst b/docs/source/development/traffic_router.rst
index 9c11f8d..9f49b1b 100644
--- a/docs/source/development/traffic_router.rst
+++ b/docs/source/development/traffic_router.rst
@@ -110,7 +110,7 @@ To install the Traffic Router Developer environment:
 
 	* copy :file:`core/src/main/conf/dns.properties` to :file:`core/src/test/conf/`
 	* copy :file:`core/src/main/conf/http.properties` to :file:`core/src/test/conf/`
-	* copy :file:`core/src/main/conf/log4j.properties` to :file:`core/src/test/conf/`
+	* copy :file:`core/src/main/conf/log4j2.xml` to :file:`core/src/test/conf/`
 	* copy :file:`core/src/main/conf/traffic_monitor.properties` to :file:`core/src/test/conf/` and then edit the ``traffic_monitor.bootstrap.hosts`` property
 	* copy :file:`core/src/main/conf/traffic_ops.properties` to :file:`core/src/test/conf/` and then edit the credentials as appropriate for the Traffic Ops instance you will be using.
 	* Default configuration values now reside in :file:`core/src/main/webapp/WEB-INF/applicationContext.xml`
diff --git a/infrastructure/ansible/roles/traffic-router/README.md b/infrastructure/ansible/roles/traffic-router/README.md
index 0076ba8..299a10b 100644
--- a/infrastructure/ansible/roles/traffic-router/README.md
+++ b/infrastructure/ansible/roles/traffic-router/README.md
@@ -53,7 +53,7 @@ Example Playbook
         - "-server"
         - "-Xms2g"
         - "-Xmx{{ [(ansible_memtotal_mb * (tr_java_heap_max_percent/100))|int, tr_java_heap_max_mb]|min }}m"
-        - "-Dlog4j.configuration=file://$CATALINA_BASE/conf/log4j.properties"
+        - "-Dlog4j.configurationFile=$CATALINA_BASE/conf/log4j2.xml"
         - "-Djava.library.path=/usr/lib64"
         - "-Dorg.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER=false"
         - "-XX:+UseG1GC"
diff --git a/infrastructure/ansible/roles/traffic-router/defaults/main.yml b/infrastructure/ansible/roles/traffic-router/defaults/main.yml
index 7689e12..8e0353f 100644
--- a/infrastructure/ansible/roles/traffic-router/defaults/main.yml
+++ b/infrastructure/ansible/roles/traffic-router/defaults/main.yml
@@ -55,7 +55,7 @@ tr_catalina_opts:
   - "-server"
   - "-Xms2g"
   - "-Xmx{{ [(ansible_memtotal_mb * (tr_java_heap_max_percent/100))|int, tr_java_heap_max_mb]|min }}m"
-  - "-Dlog4j.configuration=file://$CATALINA_BASE/conf/log4j.properties"
+  - "-Dlog4j.configurationFile=$CATALINA_BASE/conf/log4j2.xml"
   - "-Djava.library.path=/usr/lib64"
   - "-Dorg.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER=false"
   - "-XX:+UseG1GC"
@@ -126,36 +126,45 @@ tr_cache_health_json_refresh_period: 1000
 tr_cache_config_json: "{{tr_db_dir}}/cr-config.json"
 tr_cache_config_json_refresh_period: 60000
 
-# log4j.properties
-tr_log4j_opts:
-  - "# ACCESS is set to be a Syslog Appender"
-  - log4j.appender.ACCESS=org.apache.log4j.RollingFileAppender
-  - "log4j.appender.ACCESS.File={{tr_log_dir}}/access.log"
-  - log4j.appender.ACCESS.MaxFileSize=200MB
-  - log4j.appender.ACCESS.MaxBackupIndex=10
-  -
-  - "# ACCESS uses PatternLayout."
-  - log4j.appender.ACCESS.layout=org.apache.log4j.PatternLayout
-  - log4j.appender.ACCESS.layout.ConversionPattern=%m%n
-  - log4j.appender.ACCESS.threshold=INFO
-  -
-  - log4j.appender.A1=org.apache.log4j.RollingFileAppender
-  - "log4j.appender.A1.file={{tr_log_dir}}/traffic_router.log"
-  - log4j.appender.A1.maxFileSize=100MB
-  -
-  - "# A1 uses PatternLayout."
-  - log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-  - log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%t] %c - %m%n
-  - log4j.appender.A1.threshold=ALL
-  -
-  - "# Set root logger level to DEBUG and its only appender to A1."
-  - "# Valid levels are: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, NONE"
-  - log4j.rootLogger=WARN, A1
-  -
-  - "# Set application logger levels"
-  - log4j.logger.org.apache.traffic_control.traffic_router=INFO
-  - log4j.logger.org.apache.traffic_control.traffic_router.core.access=INFO, ACCESS
-  - log4j.additivity.org.apache.traffic_control.traffic_router.core.access=false
+# log4j2.xml
+tr_log4j2_opts: |
+  <Configuration>
+      <Appenders>
+          <Console name="stdout" target="SYSTEM_OUT">
+              <PatternLayout pattern="%m%n" />
+          </Console>
+          <RollingFile name="traffic_router_access"
+                       fileName="{{tr_log_dir}}/access.log"
+                       filePattern="{{tr_log_dir}}/access-%d{yyyy-MM-dd}.log" >
+              <PatternLayout pattern="%m%n" />
+              <Policies>
+                  <SizeBasedTriggeringPolicy size="200MB" />
+              </Policies>
+              <DefaultRolloverStrategy max="10" />
+              <ThresholdFilter level="INFO" />
+          </RollingFile>
+          <RollingFile name="traffic_router"
+                       fileName="{{tr_log_dir}}/traffic_router.log"
+                       filePattern="{{tr_log_dir}}/traffic_router-%d{yyyy-MM-dd}.log" >
+              <PatternLayout pattern="%-5p %d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%t] %c - %m%n" />
+              <Policies>
+                  <SizeBasedTriggeringPolicy size="100MB" />
+              </Policies>
+              <ThresholdFilter level="ALL" />
+          </RollingFile>
+      </Appenders>
+      <Loggers>
+          <Logger name="org.apache.traffic_control.traffic_router" level="INFO" additivity="false" >
+              <AppenderRef ref="traffic_router" />
+          </Logger>
+          <Logger name="org.apache.traffic_control.traffic_router.core.access" level="INFO" additivity="false" >
+              <AppenderRef ref="traffic_router_access" />
+          </Logger>
+          <Root level="WARN" additivity="false" >
+              <AppenderRef ref="stdout" />
+          </Root>
+      </Loggers>
+  </Configuration>
 
 # logging.properties
 tr_logging_opts:
diff --git a/infrastructure/ansible/roles/traffic-router/tasks/traffic_router.yml b/infrastructure/ansible/roles/traffic-router/tasks/traffic_router.yml
index f61c631..dff354f 100644
--- a/infrastructure/ansible/roles/traffic-router/tasks/traffic_router.yml
+++ b/infrastructure/ansible/roles/traffic-router/tasks/traffic_router.yml
@@ -66,7 +66,7 @@
   with_items:
     - cache.properties
     - dns.properties
-    - log4j.properties
+    - log4j2.xml
     - logging.properties
     - startup.properties
     - traffic_monitor.properties
diff --git a/infrastructure/ansible/roles/traffic-router/templates/conf/log4j.properties.j2 b/infrastructure/ansible/roles/traffic-router/templates/conf/log4j2.xml.j2
similarity index 91%
rename from infrastructure/ansible/roles/traffic-router/templates/conf/log4j.properties.j2
rename to infrastructure/ansible/roles/traffic-router/templates/conf/log4j2.xml.j2
index d74a164..104e386 100644
--- a/infrastructure/ansible/roles/traffic-router/templates/conf/log4j.properties.j2
+++ b/infrastructure/ansible/roles/traffic-router/templates/conf/log4j2.xml.j2
@@ -13,6 +13,4 @@
 #}
 # file deployed via ansible push, local edits are subject to be overwritten
 
-{% for line in tr_log4j_opts %}
-{{ line }}
-{% endfor %}
+{{ tr_log4j2_opts }}
diff --git a/infrastructure/cdn-in-a-box/traffic_router/run.sh b/infrastructure/cdn-in-a-box/traffic_router/run.sh
index bd2135f..6435e08 100755
--- a/infrastructure/cdn-in-a-box/traffic_router/run.sh
+++ b/infrastructure/cdn-in-a-box/traffic_router/run.sh
@@ -42,7 +42,7 @@ CATALINA_PID="$CATALINA_BASE/temp/tomcat.pid"
 CATALINA_OPTS="\
   -server -Xms2g -Xmx8g \
   -Djava.library.path=/usr/lib64:$CATALINA_BASE/lib:$CATALINA_HOME/lib \
-  -Dlog4j.configuration=file://$CATALINA_BASE/conf/log4j.properties \
+  -Dlog4j.configurationFile=$CATALINA_BASE/conf/log4j2.xml \
   -Dorg.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER=false \
   -XX:+UseG1GC \
   -XX:+UnlockExperimentalVMOptions \
diff --git a/infrastructure/docker/traffic_router/starttr.sh b/infrastructure/docker/traffic_router/starttr.sh
index adbb9ab..75fbe14 100755
--- a/infrastructure/docker/traffic_router/starttr.sh
+++ b/infrastructure/docker/traffic_router/starttr.sh
@@ -30,7 +30,7 @@ export CATALINA_BASE=/opt/traffic_router
 export CATALINA_OUT=/opt/tomcat/logs/catalina.log
 export CATALINA_OPTS="\
   -server -Xms512m -Xmx1g \
-  -Dlog4j.configuration=file://$CATALINA_BASE/conf/log4j.properties \
+  -Dlog4j.configurationFile=$CATALINA_BASE/conf/log4j2.xml \
   -Djava.library.path=/usr/lib64 \
   -Dorg.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER=false \
   -XX:+UseG1GC \
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/LanguidPoller.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/LanguidPoller.java
index 9a8650d..7e6e820 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/LanguidPoller.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/LanguidPoller.java
@@ -15,14 +15,15 @@
 
 package org.apache.traffic_control.traffic_router.protocol;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
-import java.lang.management.ManagementFactory;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
+import java.lang.management.ManagementFactory;
 
 public class LanguidPoller extends Thread {
-	private static final Logger log = Logger.getLogger(LanguidPoller.class);
+	private static final Logger log = LogManager.getLogger(LanguidPoller.class);
 	final private RouterProtocolHandler protocolHandler;
 
 	public LanguidPoller(final RouterProtocolHandler protocolHandler) {
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/LanguidProtocol.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/LanguidProtocol.java
index b9d4103..f12b8a6 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/LanguidProtocol.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/LanguidProtocol.java
@@ -17,10 +17,11 @@ package org.apache.traffic_control.traffic_router.protocol;
 
 
 import org.apache.coyote.http11.Http11NioProtocol;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class LanguidProtocol extends Http11NioProtocol implements RouterProtocolHandler {
-	private static final Logger log = Logger.getLogger(LanguidProtocol.class);
+	private static final Logger log = LogManager.getLogger(LanguidProtocol.class);
 	private boolean ready = false;
 	private boolean initialized = false;
 	private String mbeanPath;
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/RouterNioEndpoint.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/RouterNioEndpoint.java
index 5a5957a..affe8ad 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/RouterNioEndpoint.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/protocol/RouterNioEndpoint.java
@@ -18,7 +18,8 @@ package org.apache.traffic_control.traffic_router.protocol;
 import org.apache.traffic_control.traffic_router.secure.CertificateRegistry;
 import org.apache.traffic_control.traffic_router.secure.HandshakeData;
 import org.apache.traffic_control.traffic_router.secure.KeyManager;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.tomcat.jni.SSL;
 import org.apache.tomcat.util.net.NioChannel;
 import org.apache.tomcat.util.net.NioEndpoint;
@@ -34,7 +35,7 @@ import java.util.Map;
 import java.util.Set;
 
 public class RouterNioEndpoint extends NioEndpoint {
-	private static final Logger LOGGER = Logger.getLogger(RouterNioEndpoint.class);
+	private static final Logger LOGGER = LogManager.getLogger(RouterNioEndpoint.class);
 	private String protocols;
 
 	// Grabs the aliases from our custom certificate registry, creates a sslHostConfig for them
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataConverter.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataConverter.java
index dacd17c..ea87a13 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataConverter.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataConverter.java
@@ -16,7 +16,8 @@
 package org.apache.traffic_control.traffic_router.secure;
 
 import org.apache.traffic_control.traffic_router.shared.CertificateData;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.bouncycastle.jcajce.provider.asymmetric.rsa.BCRSAPrivateCrtKey;
 
 import java.math.BigInteger;
@@ -32,7 +33,7 @@ import java.util.List;
 
 @SuppressWarnings({"PMD.CyclomaticComplexity"})
 public class CertificateDataConverter {
-	private static final Logger log = Logger.getLogger(CertificateDataConverter.class);
+	private static final Logger log = LogManager.getLogger(CertificateDataConverter.class);
 
 	private PrivateKeyDecoder privateKeyDecoder = new PrivateKeyDecoder();
 	private CertificateDecoder certificateDecoder = new CertificateDecoder();
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataListener.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataListener.java
index 841e7be..f812c79 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataListener.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDataListener.java
@@ -16,7 +16,8 @@
 package org.apache.traffic_control.traffic_router.secure;
 
 import org.apache.traffic_control.traffic_router.shared.CertificateData;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.management.AttributeChangeNotification;
 import javax.management.Notification;
@@ -25,7 +26,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class CertificateDataListener implements NotificationListener {
-	private static final Logger log = Logger.getLogger(CertificateDataListener.class);
+	private static final Logger log = LogManager.getLogger(CertificateDataListener.class);
 
 	@SuppressWarnings("PMD.AvoidCatchingThrowable")
 	@Override
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDecoder.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDecoder.java
index 22f1655..fe07e2f 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDecoder.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateDecoder.java
@@ -15,7 +15,8 @@
 
 package org.apache.traffic_control.traffic_router.secure;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.ByteArrayInputStream;
 import java.security.cert.CertificateFactory;
@@ -25,7 +26,7 @@ import java.util.Base64;
 import java.util.List;
 
 public class CertificateDecoder {
-	private static final Logger log = Logger.getLogger(CertificateDecoder.class);
+	private static final Logger log = LogManager.getLogger(CertificateDecoder.class);
 
 	private static final String CRT_HEADER = "-----BEGIN CERTIFICATE-----";
 	private static final String CRT_FOOTER = "-----END CERTIFICATE-----";
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateRegistry.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateRegistry.java
index 942c46c..f4c0245 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateRegistry.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/CertificateRegistry.java
@@ -18,7 +18,8 @@ package org.apache.traffic_control.traffic_router.secure;
 import org.apache.traffic_control.traffic_router.protocol.RouterNioEndpoint;
 import org.apache.traffic_control.traffic_router.shared.CertificateData;
 import org.apache.traffic_control.traffic_router.utils.HttpsProperties;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.bouncycastle.asn1.x500.X500Name;
 import org.bouncycastle.asn1.x509.BasicConstraints;
 import org.bouncycastle.asn1.x509.ExtendedKeyUsage;
@@ -55,7 +56,7 @@ import java.util.Map;
 
 public class CertificateRegistry {
 	public static final String DEFAULT_SSL_KEY = "default.invalid";
-	private static final Logger log = Logger.getLogger(CertificateRegistry.class);
+	private static final Logger log = LogManager.getLogger(CertificateRegistry.class);
 	private CertificateDataConverter certificateDataConverter = new CertificateDataConverter();
 	volatile private Map<String, HandshakeData> handshakeDataMap = new HashMap<>();
 	private RouterNioEndpoint sslEndpoint = null;
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/KeyManager.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/KeyManager.java
index 18dacb2..aea7617 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/KeyManager.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/secure/KeyManager.java
@@ -15,7 +15,8 @@
 
 package org.apache.traffic_control.traffic_router.secure;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.net.ssl.ExtendedSSLSession;
 import javax.net.ssl.SNIServerName;
@@ -36,7 +37,7 @@ import java.util.stream.Collectors;
 // once the JVM loads the default classes.
 public class KeyManager extends X509ExtendedKeyManager implements X509KeyManager {
 	private final CertificateRegistry certificateRegistry = CertificateRegistry.getInstance();
-	private static final Logger log = Logger.getLogger(KeyManager.class);
+	private static final Logger log = LogManager.getLogger(KeyManager.class);
 	// To date this method is not getting exercised while running the router
 	@Override
 	public String chooseClientAlias(final String[] strings, final Principal[] principals, final Socket socket) {
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/tomcat/TomcatLifecycleListener.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/tomcat/TomcatLifecycleListener.java
index 4af1c24..78031da 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/tomcat/TomcatLifecycleListener.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/tomcat/TomcatLifecycleListener.java
@@ -21,7 +21,8 @@ import org.apache.traffic_control.traffic_router.shared.DeliveryServiceCertifica
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleEvent;
 import org.apache.catalina.LifecycleListener;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 
 import javax.management.MBeanServer;
@@ -29,7 +30,7 @@ import javax.management.ObjectName;
 import java.lang.management.ManagementFactory;
 
 public class TomcatLifecycleListener implements LifecycleListener {
-	private static final Logger log = Logger.getLogger(LifecycleListener.class);
+	private static final Logger log = LogManager.getLogger(LifecycleListener.class);
 	private CertificateDataListener certificateDataListener = new CertificateDataListener();
 
 	@Override
diff --git a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/utils/HttpsProperties.java b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/utils/HttpsProperties.java
index 6bfd663..1e1a297 100644
--- a/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/utils/HttpsProperties.java
+++ b/traffic_router/connector/src/main/java/org/apache/traffic_control/traffic_router/utils/HttpsProperties.java
@@ -15,7 +15,8 @@
 
 package org.apache.traffic_control.traffic_router.utils;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.nio.file.Files;
 import java.nio.file.Paths;
@@ -23,7 +24,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 public class HttpsProperties {
-    private static final Logger log = Logger.getLogger(HttpsProperties.class);
+    private static final Logger log = LogManager.getLogger(HttpsProperties.class);
     private static final String HTTPS_PROPERTIES_FILE = "/opt/traffic_router/conf/https.properties";
     private final Map<String, String> httpsPropertiesMap;
 
diff --git a/traffic_router/connector/src/test/java/protocol/RouterSslImplementationTest.java b/traffic_router/connector/src/test/java/protocol/RouterSslImplementationTest.java
index 76328a3..7d84735 100644
--- a/traffic_router/connector/src/test/java/protocol/RouterSslImplementationTest.java
+++ b/traffic_router/connector/src/test/java/protocol/RouterSslImplementationTest.java
@@ -24,6 +24,7 @@ import org.apache.tomcat.util.net.SSLUtil;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.api.mockito.PowerMockito;
@@ -35,6 +36,7 @@ import static org.hamcrest.Matchers.instanceOf;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({RouterSslImplementation.class, SSLHostConfigCertificate.class, RouterSslUtil.class})
+@PowerMockIgnore("javax.management.*")
 public class RouterSslImplementationTest {
 	SSLSession sslSession = PowerMockito.mock(SSLSession.class);
 	SSLHostConfig sslHostConfig = PowerMockito.mock(SSLHostConfig.class);
diff --git a/traffic_router/connector/src/test/java/secure/CertificateDataListenerTest.java b/traffic_router/connector/src/test/java/secure/CertificateDataListenerTest.java
index 15a1834e8..b370cb3 100644
--- a/traffic_router/connector/src/test/java/secure/CertificateDataListenerTest.java
+++ b/traffic_router/connector/src/test/java/secure/CertificateDataListenerTest.java
@@ -22,6 +22,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
@@ -39,6 +40,7 @@ import static org.mockito.Mockito.when;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest(CertificateRegistry.class)
+@PowerMockIgnore("javax.management.*")
 public class CertificateDataListenerTest {
 
 	private CertificateRegistry certificateRegistry;
diff --git a/traffic_router/connector/src/test/java/secure/KeyManagerTest.java b/traffic_router/connector/src/test/java/secure/KeyManagerTest.java
index 6edc18a..9891543 100644
--- a/traffic_router/connector/src/test/java/secure/KeyManagerTest.java
+++ b/traffic_router/connector/src/test/java/secure/KeyManagerTest.java
@@ -22,6 +22,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
@@ -43,6 +44,7 @@ import static org.powermock.api.mockito.PowerMockito.mockStatic;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({CertificateRegistry.class})
+@PowerMockIgnore("javax.management.*")
 public class KeyManagerTest {
 	private KeyManager keyManager;
 	private X509Certificate x509Certificate;
diff --git a/traffic_router/connector/src/test/java/secure/TomcatLifecycleListenerTest.java b/traffic_router/connector/src/test/java/secure/TomcatLifecycleListenerTest.java
index 9b65a8b..d835625 100644
--- a/traffic_router/connector/src/test/java/secure/TomcatLifecycleListenerTest.java
+++ b/traffic_router/connector/src/test/java/secure/TomcatLifecycleListenerTest.java
@@ -26,6 +26,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
@@ -39,6 +40,7 @@ import static org.mockito.Mockito.verify;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({TomcatLifecycleListener.class, ManagementFactory.class, LifecycleEvent.class})
+@PowerMockIgnore("javax.management.*")
 public class TomcatLifecycleListenerTest {
 	@Before
 	public void before() {
diff --git a/traffic_router/core/pom.xml b/traffic_router/core/pom.xml
index b941e0e..bd33148 100644
--- a/traffic_router/core/pom.xml
+++ b/traffic_router/core/pom.xml
@@ -265,8 +265,8 @@
 		</dependency>
 
 		<dependency>
-            <groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
+            <groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
 			<version>${log4j.version}</version>
         </dependency>
 
diff --git a/traffic_router/core/src/main/conf/log4j.properties b/traffic_router/core/src/main/conf/log4j.properties
deleted file mode 100644
index 0771a5b..0000000
--- a/traffic_router/core/src/main/conf/log4j.properties
+++ /dev/null
@@ -1,44 +0,0 @@
-#
-#
-# Licensed 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.
-#
-
-# ACCESS is set to be a Syslog Appender
-log4j.appender.ACCESS=org.apache.log4j.RollingFileAppender
-log4j.appender.ACCESS.File=/opt/traffic_router/var/log/access.log
-log4j.appender.ACCESS.MaxFileSize=200MB
-log4j.appender.ACCESS.MaxBackupIndex=10
-
-# ACCESS uses PatternLayout.
-log4j.appender.ACCESS.layout=org.apache.log4j.PatternLayout
-log4j.appender.ACCESS.layout.ConversionPattern=%m%n
-log4j.appender.ACCESS.threshold=INFO
-
-log4j.appender.A1=org.apache.log4j.RollingFileAppender
-log4j.appender.A1.file=/opt/traffic_router/var/log/traffic_router.log
-log4j.appender.A1.maxFileSize=100MB
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%t] %c - %m%n
-log4j.appender.A1.threshold=ALL
-
-# Set root logger level to DEBUG and its only appender to A1.
-# Valid levels are: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, NONE
-log4j.rootLogger=WARN, A1
-
-# Set application logger levels
-log4j.logger.org.apache.traffic_control.traffic_router=INFO
-
-log4j.logger.org.apache.traffic_control.traffic_router.core.access=INFO, ACCESS
-log4j.additivity.org.apache.traffic_control.traffic_router.core.access=false
diff --git a/traffic_router/core/src/main/conf/log4j2.xml b/traffic_router/core/src/main/conf/log4j2.xml
new file mode 100644
index 0000000..33bdde4
--- /dev/null
+++ b/traffic_router/core/src/main/conf/log4j2.xml
@@ -0,0 +1,52 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+
+	Licensed 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.
+ -->
+<Configuration>
+    <Appenders>
+        <Console name="stdout" target="SYSTEM_OUT">
+            <PatternLayout pattern="%m%n" />
+        </Console>
+        <RollingFile name="traffic_router_access"
+                     fileName="${deploy.dir}/var/log/access.log"
+                     filePattern="${deploy.dir}/var/log/access-%d{yyyy-MM-dd}.log" >
+            <PatternLayout pattern="%m%n" />
+            <Policies>
+                <SizeBasedTriggeringPolicy size="200MB" />
+            </Policies>
+            <DefaultRolloverStrategy max="10" />
+            <ThresholdFilter level="INFO" />
+        </RollingFile>
+        <RollingFile name="traffic_router"
+                     fileName="${deploy.dir}/var/log/traffic_router.log"
+                     filePattern="${deploy.dir}/var/log/traffic_router-%d{yyyy-MM-dd}.log" >
+            <PatternLayout pattern="%-5p %d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%t] %c - %m%n" />
+            <Policies>
+                <SizeBasedTriggeringPolicy size="100MB" />
+            </Policies>
+            <ThresholdFilter level="ALL" />
+        </RollingFile>
+    </Appenders>
+    <Loggers>
+        <Logger name="org.apache.traffic_control.traffic_router" level="INFO" additivity="false" >
+            <AppenderRef ref="traffic_router" />
+        </Logger>
+        <Logger name="org.apache.traffic_control.traffic_router.core.access" level="INFO" additivity="false" >
+            <AppenderRef ref="traffic_router_access" />
+        </Logger>
+        <Root level="WARN" additivity="false" >
+            <AppenderRef ref="stdout" />
+        </Root>
+    </Loggers>
+</Configuration>
diff --git a/traffic_router/core/src/main/conf/startup.properties b/traffic_router/core/src/main/conf/startup.properties
index c6b2f65..1cab162 100644
--- a/traffic_router/core/src/main/conf/startup.properties
+++ b/traffic_router/core/src/main/conf/startup.properties
@@ -19,7 +19,7 @@
 # router is installed.
 CATALINA_OPTS="\
   -server -Xms2g -Xmx8g \
-  -Dlog4j.configuration=file://$CATALINA_BASE/conf/log4j.properties \
+  -Dlog4j.configurationFile=$CATALINA_BASE/conf/log4j2.xml \
   -Djava.library.path=/usr/lib64 \
   -Dorg.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER=false \
   -XX:+UseG1GC \
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/CertificateChecker.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/CertificateChecker.java
index 8e95350..1e28451 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/CertificateChecker.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/CertificateChecker.java
@@ -18,13 +18,14 @@ package org.apache.traffic_control.traffic_router.core.config;
 import org.apache.traffic_control.traffic_router.core.util.JsonUtils;
 import org.apache.traffic_control.traffic_router.shared.CertificateData;
 import com.fasterxml.jackson.databind.JsonNode;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Iterator;
 import java.util.List;
 
 public class CertificateChecker {
-	private final static Logger LOGGER = Logger.getLogger(CertificateChecker.class);
+	private final static Logger LOGGER = LogManager.getLogger(CertificateChecker.class);
 
 	public String getDeliveryServiceType(final JsonNode deliveryServiceJson) {
 		final JsonNode matchsets = deliveryServiceJson.get("matchsets");
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/ConfigHandler.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/ConfigHandler.java
index d30f84d..4f88cd5 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/ConfigHandler.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/config/ConfigHandler.java
@@ -49,7 +49,8 @@ import org.apache.traffic_control.traffic_router.core.util.JsonUtils;
 import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import org.apache.traffic_control.traffic_router.core.edge.Cache.DeliveryServiceReference;
 import org.apache.traffic_control.traffic_router.core.edge.Cache;
@@ -73,7 +74,7 @@ import org.apache.traffic_control.traffic_router.core.loc.AnonymousIpDatabaseUpd
 
 @SuppressWarnings("PMD.TooManyFields")
 public class ConfigHandler {
-	private static final Logger LOGGER = Logger.getLogger(ConfigHandler.class);
+	private static final Logger LOGGER = LogManager.getLogger(ConfigHandler.class);
 
 	private static long lastSnapshotTimestamp = 0;
 	private static Object configSync = new Object();
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/DnsSecKeyPairImpl.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/DnsSecKeyPairImpl.java
index a1dbdff..785e705 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/DnsSecKeyPairImpl.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/DnsSecKeyPairImpl.java
@@ -19,7 +19,8 @@ import org.apache.traffic_control.traffic_router.core.util.JsonUtils;
 import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import org.apache.traffic_control.traffic_router.secure.BindPrivateKey;
 import com.fasterxml.jackson.databind.JsonNode;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.xbill.DNS.DNSKEYRecord;
 import org.xbill.DNS.DNSSEC;
 import org.xbill.DNS.Master;
@@ -39,7 +40,7 @@ import java.util.Date;
 import static java.util.Base64.getMimeDecoder;
 
 public class DnsSecKeyPairImpl implements DnsSecKeyPair {
-	private static final Logger LOGGER = Logger.getLogger(DnsSecKeyPairImpl.class);
+	private static final Logger LOGGER = LogManager.getLogger(DnsSecKeyPairImpl.class);
 	private long ttl;
 	private Date inception;
 	private Date effective;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServer.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServer.java
index 73f2242..ffbc151 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServer.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServer.java
@@ -18,7 +18,8 @@ package org.apache.traffic_control.traffic_router.core.dns;
 import java.net.InetAddress;
 import java.util.*;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.xbill.DNS.DClass;
 import org.xbill.DNS.ExtendedFlags;
 import org.xbill.DNS.Flags;
@@ -47,7 +48,7 @@ public class NameServer {
 	private static final int FLAG_DNSSECOK = 1;
 	private static final int FLAG_SIGONLY = 2;
 
-	private static final Logger LOGGER = Logger.getLogger(NameServer.class);
+	private static final Logger LOGGER = LogManager.getLogger(NameServer.class);
 	private boolean ecsEnable = false;
 	private Set<DeliveryService> ecsEnabledDses = new HashSet<>();
 	/**
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServerMain.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServerMain.java
index 48db476..9ae9b73 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServerMain.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/NameServerMain.java
@@ -18,13 +18,14 @@ package org.apache.traffic_control.traffic_router.core.dns;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 import org.apache.traffic_control.traffic_router.core.dns.protocol.Protocol;
 
 public final class NameServerMain {
-    private static final Logger LOGGER = Logger.getLogger(NameServerMain.class);
+    private static final Logger LOGGER = LogManager.getLogger(NameServerMain.class);
 
     private ExecutorService protocolService;
     private List<Protocol> protocols;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignatureManager.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignatureManager.java
index db71f00..f487bbc 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignatureManager.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignatureManager.java
@@ -39,7 +39,8 @@ import org.apache.traffic_control.traffic_router.core.util.JsonUtils;
 import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.xbill.DNS.DSRecord;
 import org.xbill.DNS.Name;
 import org.xbill.DNS.Record;
@@ -52,7 +53,7 @@ import org.apache.traffic_control.traffic_router.core.util.ProtectedFetcher;
 
 
 public final class SignatureManager {
-	private static final Logger LOGGER = Logger.getLogger(SignatureManager.class);
+	private static final Logger LOGGER = LogManager.getLogger(SignatureManager.class);
 	private int expirationMultiplier;
 	private CacheRegister cacheRegister;
 	private static ConcurrentMap<RRSIGCacheKey, ConcurrentMap<RRsetKey, RRSIGRecord>> RRSIGCache = new ConcurrentHashMap<>();
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignedZoneKey.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignedZoneKey.java
index d874d19..46a957a 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignedZoneKey.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/SignedZoneKey.java
@@ -19,13 +19,14 @@ import java.util.Calendar;
 import java.util.List;
 import java.util.OptionalLong;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.xbill.DNS.Name;
 import org.xbill.DNS.RRSIGRecord;
 import org.xbill.DNS.Record;
 
 public class SignedZoneKey extends ZoneKey {
-	private static final Logger LOGGER = Logger.getLogger(SignedZoneKey.class);
+	private static final Logger LOGGER = LogManager.getLogger(SignedZoneKey.class);
 
 	private Calendar minimumSignatureExpiration;
 	private Calendar kskExpiration;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManager.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManager.java
index 674b8cf..df44d32 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManager.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManager.java
@@ -51,7 +51,8 @@ import org.apache.traffic_control.traffic_router.core.util.JsonUtils;
 import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.xbill.DNS.AAAARecord;
 import org.xbill.DNS.ARecord;
 import org.xbill.DNS.CNAMERecord;
@@ -96,7 +97,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListenableFutureTask;
 
 public class ZoneManager extends Resolver {
-	private static final Logger LOGGER = Logger.getLogger(ZoneManager.class);
+	private static final Logger LOGGER = LogManager.getLogger(ZoneManager.class);
 
 	private final TrafficRouter trafficRouter;
 	private static LoadingCache<ZoneKey, Zone> dynamicZoneCache = null;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneSignerImpl.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneSignerImpl.java
index 8338541..04ab3cf 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneSignerImpl.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneSignerImpl.java
@@ -15,7 +15,8 @@
 
 package org.apache.traffic_control.traffic_router.core.dns;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.xbill.DNS.DNSKEYRecord;
 import org.xbill.DNS.DNSSEC;
 import org.xbill.DNS.DSRecord;
@@ -47,7 +48,7 @@ import static java.util.stream.Collectors.toList;
 import static org.xbill.DNS.DClass.IN;
 
 public class ZoneSignerImpl implements ZoneSigner {
-	private final static Logger LOGGER = Logger.getLogger(ZoneSignerImpl.class);
+	private final static Logger LOGGER = LogManager.getLogger(ZoneSignerImpl.class);
 
 	private Stream<Record> toRRStream(final RRset rrSet) {
 		final Iterable<Record> iterable = () -> rrSet.rrs(false);
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneUtils.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneUtils.java
index 3fc63c5..3048e49 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneUtils.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/ZoneUtils.java
@@ -24,10 +24,11 @@ import org.apache.traffic_control.traffic_router.core.util.JsonUtils;
 import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import com.fasterxml.jackson.databind.JsonNode;
 import org.xbill.DNS.Record;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class ZoneUtils {
-	private static final Logger LOGGER = Logger.getLogger(ZoneUtils.class);
+	private static final Logger LOGGER = LogManager.getLogger(ZoneUtils.class);
 	private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");
 
 	protected static long getMaximumTTL(final List<Record> records) {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/AbstractProtocol.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/AbstractProtocol.java
index 2def349..5b1f6dc 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/AbstractProtocol.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/AbstractProtocol.java
@@ -18,7 +18,8 @@ package org.apache.traffic_control.traffic_router.core.dns.protocol;
 import org.apache.traffic_control.traffic_router.core.dns.DNSAccessEventBuilder;
 import org.apache.traffic_control.traffic_router.core.dns.DNSAccessRecord;
 import org.apache.traffic_control.traffic_router.core.dns.NameServer;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.xbill.DNS.Message;
 import org.xbill.DNS.Rcode;
 import org.xbill.DNS.Section;
@@ -29,8 +30,8 @@ import java.util.concurrent.*;
 
 @SuppressWarnings("PMD.MoreThanOneLogger")
 public abstract class AbstractProtocol implements Protocol {
-    private static final Logger ACCESS = Logger.getLogger("org.apache.traffic_control.traffic_router.core.access");
-    private static final Logger LOGGER = Logger.getLogger(AbstractProtocol.class);
+    private static final Logger ACCESS = LogManager.getLogger("org.apache.traffic_control.traffic_router.core.access");
+    private static final Logger LOGGER = LogManager.getLogger(AbstractProtocol.class);
 
     private static final int NUM_SECTIONS = 4;
     protected boolean shutdownRequested;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCP.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCP.java
index 2871833..24b7e21 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCP.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCP.java
@@ -24,12 +24,13 @@ import java.net.ServerSocket;
 import java.net.Socket;
 import java.nio.channels.Channels;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.xbill.DNS.Message;
 import org.xbill.DNS.WireParseException;
 
 public class TCP extends AbstractProtocol {
-    private static final Logger LOGGER = Logger.getLogger(TCP.class);
+    private static final Logger LOGGER = LogManager.getLogger(TCP.class);
     private int readTimeout = 3000; // default
 
     private ServerSocket serverSocket;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/UDP.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/UDP.java
index 3d3a6b8..e7f17dd 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/UDP.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/dns/protocol/UDP.java
@@ -20,13 +20,14 @@ import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.InetAddress;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.xbill.DNS.Message;
 import org.xbill.DNS.OPTRecord;
 import org.xbill.DNS.WireParseException;
 
 public class UDP extends AbstractProtocol {
-    private static final Logger LOGGER = Logger.getLogger(UDP.class);
+    private static final Logger LOGGER = LogManager.getLogger(UDP.class);
 
     private static final int UDP_MSG_LENGTH = 512;
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryService.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryService.java
index b9f6648..338a186 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryService.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryService.java
@@ -40,7 +40,8 @@ import java.util.regex.Pattern;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.databind.JsonNode;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import org.apache.traffic_control.traffic_router.core.edge.Cache;
 import org.apache.traffic_control.traffic_router.core.edge.InetRecord;
@@ -59,7 +60,7 @@ import org.apache.traffic_control.traffic_router.core.util.StringProtector;
 
 @SuppressWarnings({"PMD.TooManyFields","PMD.CyclomaticComplexity", "PMD.AvoidDuplicateLiterals", "PMD.ExcessivePublicCount"})
 public class DeliveryService {
-	protected static final Logger LOGGER = Logger.getLogger(DeliveryService.class);
+	protected static final Logger LOGGER = LogManager.getLogger(DeliveryService.class);
 	private final String id;
 	@JsonIgnore
 	private final JsonNode ttls;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java
index 5ebc89c..fe663e5 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/LetsEncryptDnsChallengeWatcher.java
@@ -26,7 +26,8 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.*;
 import java.time.Instant;
@@ -35,7 +36,7 @@ import java.util.Iterator;
 import java.util.List;
 
 public class LetsEncryptDnsChallengeWatcher extends AbstractResourceWatcher {
-    private static final Logger LOGGER = Logger.getLogger(LetsEncryptDnsChallengeWatcher.class);
+    private static final Logger LOGGER = LogManager.getLogger(LetsEncryptDnsChallengeWatcher.class);
     public static final String DEFAULT_LE_DNS_CHALLENGE_URL = "https://${toHostname}/api/2.0/letsencrypt/dnsrecords/";
 
     private String configFile;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringRegistry.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringRegistry.java
index dc17f0d..a513837 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringRegistry.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringRegistry.java
@@ -18,7 +18,8 @@ package org.apache.traffic_control.traffic_router.core.ds;
 import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -27,7 +28,7 @@ import java.util.List;
 import java.util.Map;
 
 public class SteeringRegistry {
-	private static final Logger LOGGER = Logger.getLogger(SteeringRegistry.class);
+	private static final Logger LOGGER = LogManager.getLogger(SteeringRegistry.class);
 
 	private Map<String, Steering> registry = new HashMap<>();
 	private final ObjectMapper objectMapper = new ObjectMapper(new JsonFactory());
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringWatcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringWatcher.java
index 2666311..713eb2d 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringWatcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/ds/SteeringWatcher.java
@@ -16,10 +16,11 @@
 package org.apache.traffic_control.traffic_router.core.ds;
 
 import org.apache.traffic_control.traffic_router.core.util.AbstractResourceWatcher;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class SteeringWatcher extends AbstractResourceWatcher {
-	private static final Logger LOGGER = Logger.getLogger(SteeringWatcher.class);
+	private static final Logger LOGGER = LogManager.getLogger(SteeringWatcher.class);
 	private SteeringRegistry steeringRegistry;
 
 	public static final String DEFAULT_STEERING_DATA_URL = "https://${toHostname}/api/2.0/steering";
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/CacheLocation.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/CacheLocation.java
index 246d354..d0e89c9 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/CacheLocation.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/CacheLocation.java
@@ -25,8 +25,8 @@ import java.util.Set;
 
 import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.apache.commons.lang3.builder.HashCodeBuilder;
-import org.apache.log4j.Logger;
-
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.traffic_control.traffic_router.geolocation.Geolocation;
 
 /**
@@ -34,7 +34,7 @@ import org.apache.traffic_control.traffic_router.geolocation.Geolocation;
  */
 public class CacheLocation extends Location {
 
-	public static final Logger LOGGER = Logger.getLogger(CacheLocation.class);
+	public static final Logger LOGGER = LogManager.getLogger(CacheLocation.class);
 
 	private final Map<String, Cache> caches;
 	private List<String> backupCacheGroups = null;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/Node.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/Node.java
index 6d4214a..e09a987 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/Node.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/Node.java
@@ -31,10 +31,11 @@ import com.fasterxml.jackson.databind.JsonNode;
 import org.apache.traffic_control.traffic_router.core.hash.DefaultHashable;
 import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.apache.commons.lang3.builder.HashCodeBuilder;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class Node extends DefaultHashable {
-	private static final Logger LOGGER = Logger.getLogger(Node.class);
+	private static final Logger LOGGER = LogManager.getLogger(Node.class);
 	private static final int REPLICAS = 1000;
 
 	public enum IPVersions {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/Resolver.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/Resolver.java
index 32e84da..c5553cf 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/Resolver.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/edge/Resolver.java
@@ -15,16 +15,17 @@
 
 package org.apache.traffic_control.traffic_router.core.edge;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
 import java.net.Inet4Address;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.log4j.Logger;
-
 public class Resolver {
-	private static final Logger LOGGER = Logger.getLogger(Resolver.class);
+	private static final Logger LOGGER = LogManager.getLogger(Resolver.class);
 
 	public List<InetRecord> resolve(final String fqdn) {
 		List<InetRecord> ipAddresses = null;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/http/RouterFilter.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/http/RouterFilter.java
index 0a678f3..bed96b2 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/http/RouterFilter.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/http/RouterFilter.java
@@ -22,7 +22,8 @@ import org.apache.traffic_control.traffic_router.core.router.StatTracker;
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouter;
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouterManager;
 import org.apache.traffic_control.traffic_router.geolocation.GeolocationException;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.filter.OncePerRequestFilter;
 
@@ -38,7 +39,7 @@ import java.util.Map;
 import java.util.Set;
 
 public class RouterFilter extends OncePerRequestFilter {
-	private static final Logger ACCESS = Logger.getLogger("org.apache.traffic_control.traffic_router.core.access");
+	private static final Logger ACCESS = LogManager.getLogger("org.apache.traffic_control.traffic_router.core.access");
 	public static final String REDIRECT_QUERY_PARAM = "trred";
 	private static final String HEAD = "HEAD";
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java
index 797774e..10b7931 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdater.java
@@ -35,14 +35,15 @@ import java.util.zip.GZIPInputStream;
 
 import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouterManager;
 
 import static org.apache.commons.codec.digest.DigestUtils.md5Hex;
 
 public abstract class AbstractServiceUpdater {
-	private static final Logger LOGGER = Logger.getLogger(AbstractServiceUpdater.class);
+	private static final Logger LOGGER = LogManager.getLogger(AbstractServiceUpdater.class);
 
 	protected String dataBaseURL;
 	protected String defaultDatabaseURL;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIp.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIp.java
index 5a57e62..2196a79 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIp.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIp.java
@@ -23,10 +23,10 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.net.InetAddresses;
 import com.maxmind.geoip2.model.AnonymousIpResponse;
-import org.apache.log4j.Logger;
-
-import org.apache.traffic_control.traffic_router.core.edge.Cache;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.traffic_control.traffic_router.core.ds.DeliveryService;
+import org.apache.traffic_control.traffic_router.core.edge.Cache;
 import org.apache.traffic_control.traffic_router.core.request.HTTPRequest;
 import org.apache.traffic_control.traffic_router.core.request.Request;
 import org.apache.traffic_control.traffic_router.core.router.HTTPRouteResult;
@@ -38,7 +38,7 @@ import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 
 public final class AnonymousIp {
 
-	private static final Logger LOGGER = Logger.getLogger(AnonymousIp.class);
+	private static final Logger LOGGER = LogManager.getLogger(AnonymousIp.class);
 
 	private static AnonymousIp currentConfig = new AnonymousIp();
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpConfigUpdater.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpConfigUpdater.java
index 9ea329e..f92a9ac 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpConfigUpdater.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpConfigUpdater.java
@@ -14,13 +14,14 @@
 
 package org.apache.traffic_control.traffic_router.core.loc;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
 import java.io.File;
 import java.io.IOException;
 
-import org.apache.log4j.Logger;
-
 public class AnonymousIpConfigUpdater extends AbstractServiceUpdater {
-    private static final Logger LOGGER = Logger.getLogger(AnonymousIpConfigUpdater.class);
+    private static final Logger LOGGER = LogManager.getLogger(AnonymousIpConfigUpdater.class);
 
     public AnonymousIpConfigUpdater() {
         LOGGER.debug("init...");
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseService.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseService.java
index 3237b3d..113425b 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseService.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseService.java
@@ -18,7 +18,8 @@ import java.io.File;
 import java.io.IOException;
 import java.net.InetAddress;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import com.maxmind.geoip2.DatabaseReader;
 import com.maxmind.geoip2.exception.GeoIp2Exception;
@@ -26,7 +27,7 @@ import com.maxmind.geoip2.model.AnonymousIpResponse;
 
 @SuppressWarnings({ "PMD.AvoidDuplicateLiterals" })
 public class AnonymousIpDatabaseService {
-	private static final Logger LOGGER = Logger.getLogger(AnonymousIpDatabaseService.class);
+	private static final Logger LOGGER = LogManager.getLogger(AnonymousIpDatabaseService.class);
 
 	private boolean initialized = false;
 	private File databaseFile;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseUpdater.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseUpdater.java
index 9fde250..abb696d 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseUpdater.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpDatabaseUpdater.java
@@ -14,14 +14,15 @@
 
 package org.apache.traffic_control.traffic_router.core.loc;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
 import java.io.File;
 import java.io.IOException;
 
-import org.apache.log4j.Logger;
-
 @SuppressWarnings({ "PMD.AvoidDuplicateLiterals" })
 public class AnonymousIpDatabaseUpdater extends AbstractServiceUpdater {
-    private static final Logger LOGGER = Logger.getLogger(AnonymousIpDatabaseUpdater.class);
+    private static final Logger LOGGER = LogManager.getLogger(AnonymousIpDatabaseUpdater.class);
 
 	private AnonymousIpDatabaseService anonymousIpDatabaseService;
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpWhitelist.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpWhitelist.java
index 206469d..6c6c0e1 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpWhitelist.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/AnonymousIpWhitelist.java
@@ -14,12 +14,13 @@
 
 package org.apache.traffic_control.traffic_router.core.loc;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import com.fasterxml.jackson.databind.JsonNode;
 
 public class AnonymousIpWhitelist {
-	private static final Logger LOGGER = Logger.getLogger(AnonymousIpWhitelist.class);
+	private static final Logger LOGGER = LogManager.getLogger(AnonymousIpWhitelist.class);
 
 	final private NetworkNode.SuperNode whitelist;
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/FederationMappingBuilder.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/FederationMappingBuilder.java
index a13d68e..ec61bc3 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/FederationMappingBuilder.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/FederationMappingBuilder.java
@@ -21,12 +21,13 @@ import org.apache.traffic_control.traffic_router.core.util.JsonUtils;
 import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
 
 public class FederationMappingBuilder {
-    private final static Logger LOGGER = Logger.getLogger(FederationMapping.class);
+    private final static Logger LOGGER = LogManager.getLogger(FederationMapping.class);
 
 
     public FederationMapping fromJSON(final String json) throws JsonUtilsException, IOException {
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/FederationsWatcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/FederationsWatcher.java
index 02029ee..5fdb1d2 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/FederationsWatcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/FederationsWatcher.java
@@ -16,10 +16,11 @@
 package org.apache.traffic_control.traffic_router.core.loc;
 
 import org.apache.traffic_control.traffic_router.core.util.AbstractResourceWatcher;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class FederationsWatcher extends AbstractResourceWatcher {
-    private static final Logger LOGGER = Logger.getLogger(FederationsWatcher.class);
+    private static final Logger LOGGER = LogManager.getLogger(FederationsWatcher.class);
     private FederationRegistry federationRegistry;
 
     public static final String DEFAULT_FEDERATION_DATA_URL = "https://${toHostname}/api/2.0/federations/all";
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationService.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationService.java
index d17dc01..a03943c 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationService.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationService.java
@@ -19,7 +19,8 @@ import java.io.File;
 import java.io.IOException;
 import java.net.InetAddress;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import com.maxmind.geoip2.DatabaseReader;
 import com.maxmind.geoip2.exception.AddressNotFoundException;
@@ -30,7 +31,7 @@ import org.apache.traffic_control.traffic_router.geolocation.GeolocationExceptio
 import org.apache.traffic_control.traffic_router.geolocation.GeolocationService;
 
 public class MaxmindGeolocationService implements GeolocationService {
-	private static final Logger LOGGER = Logger.getLogger(MaxmindGeolocationService.class);
+	private static final Logger LOGGER = LogManager.getLogger(MaxmindGeolocationService.class);
 	private boolean initialized = false;
 	private DatabaseReader databaseReader;
 	private File databaseFile;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNode.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNode.java
index ab394c1..7572832 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNode.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNode.java
@@ -36,10 +36,11 @@ import org.apache.traffic_control.traffic_router.geolocation.Geolocation;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class NetworkNode implements Comparable<NetworkNode> {
-    private static final Logger LOGGER = Logger.getLogger(NetworkNode.class);
+    private static final Logger LOGGER = LogManager.getLogger(NetworkNode.class);
     private static final String DEFAULT_SUB_STR = "0.0.0.0/0";
 
     private static NetworkNode instance;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeo.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeo.java
index 96ef82c..10af8fa 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeo.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeo.java
@@ -31,7 +31,8 @@ import org.apache.traffic_control.traffic_router.geolocation.Geolocation;
 import org.apache.traffic_control.traffic_router.geolocation.GeolocationException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.net.MalformedURLException;
@@ -51,7 +52,7 @@ import static org.apache.traffic_control.traffic_router.core.loc.RegionalGeoResu
 
 
 public final class RegionalGeo {
-    private static final Logger LOGGER = Logger.getLogger(RegionalGeo.class);
+    private static final Logger LOGGER = LogManager.getLogger(RegionalGeo.class);
     public static final String HTTP_SCHEME = "http://";
     public static final String HTTPS_SCHEME = "https://";
     private boolean fallback = false;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoRule.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoRule.java
index 053a4ea..163e45f 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoRule.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoRule.java
@@ -15,7 +15,8 @@
 
 package org.apache.traffic_control.traffic_router.core.loc;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.List;
 import java.util.Set;
@@ -23,7 +24,7 @@ import java.util.regex.Pattern;
 
 
 public class RegionalGeoRule {
-    private static final Logger LOGGER = Logger.getLogger(RegionalGeoRule.class);
+    private static final Logger LOGGER = LogManager.getLogger(RegionalGeoRule.class);
 
     public static final String WHITE_LIST_NODE_LOCATION = "w";
 
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoUpdater.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoUpdater.java
index b0f23a4..fc0fafc 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoUpdater.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/loc/RegionalGeoUpdater.java
@@ -18,10 +18,11 @@ package org.apache.traffic_control.traffic_router.core.loc;
 import java.io.File;
 import java.io.IOException;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class RegionalGeoUpdater extends AbstractServiceUpdater {
-    private static final Logger LOGGER = Logger.getLogger(RegionalGeoUpdater.class);
+    private static final Logger LOGGER = LogManager.getLogger(RegionalGeoUpdater.class);
 
     public RegionalGeoUpdater() {
         LOGGER.debug("init...");
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/monitor/TrafficMonitorWatcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/monitor/TrafficMonitorWatcher.java
index 42373c0..649d214 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/monitor/TrafficMonitorWatcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/monitor/TrafficMonitorWatcher.java
@@ -26,14 +26,15 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Properties;
 
-import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import org.apache.traffic_control.traffic_router.core.config.ConfigHandler;
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouterManager;
 import org.apache.traffic_control.traffic_router.core.util.AbstractUpdatable;
+import org.apache.traffic_control.traffic_router.core.util.JsonUtilsException;
 import org.apache.traffic_control.traffic_router.core.util.PeriodicResourceUpdater;
 import org.springframework.context.ApplicationListener;
 import org.springframework.context.event.ApplicationContextEvent;
@@ -41,7 +42,7 @@ import org.springframework.context.event.ContextClosedEvent;
 
 @SuppressWarnings("PMD.TooManyFields")
 public class TrafficMonitorWatcher implements ApplicationListener<ApplicationContextEvent> {
-	private static final Logger LOGGER = Logger.getLogger(TrafficMonitorWatcher.class);
+	private static final Logger LOGGER = LogManager.getLogger(TrafficMonitorWatcher.class);
 
 	private String stateUrl;
 	private String configUrl;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouter.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouter.java
index 79b0a8d..dc1d566 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouter.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouter.java
@@ -56,7 +56,8 @@ import org.apache.traffic_control.traffic_router.geolocation.Geolocation;
 import org.apache.traffic_control.traffic_router.geolocation.GeolocationException;
 import org.apache.traffic_control.traffic_router.geolocation.GeolocationService;
 import com.fasterxml.jackson.databind.JsonNode;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.web.util.UriComponentsBuilder;
@@ -88,7 +89,7 @@ import java.util.stream.Collectors;
  */
 @SuppressWarnings({"PMD.TooManyFields", "PMD.ExcessivePublicCount"})
 public class TrafficRouter {
-	public static final Logger LOGGER = Logger.getLogger(TrafficRouter.class);
+	public static final Logger LOGGER = LogManager.getLogger(TrafficRouter.class);
 
 	/**
 	 * This is an HTTP Header the value of which, if present in a client HTTP request, should be
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouterManager.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouterManager.java
index 4a56752..ea197b0 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouterManager.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/router/TrafficRouterManager.java
@@ -23,7 +23,8 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.traffic_control.traffic_router.core.ds.SteeringRegistry;
 import org.apache.traffic_control.traffic_router.core.loc.FederationRegistry;
 import com.fasterxml.jackson.databind.JsonNode;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import org.apache.traffic_control.traffic_router.core.edge.CacheRegister;
 import org.apache.traffic_control.traffic_router.core.dns.NameServer;
@@ -35,7 +36,7 @@ import org.springframework.context.event.ContextRefreshedEvent;
 import org.apache.traffic_control.traffic_router.core.loc.AnonymousIpDatabaseService;
 
 public class TrafficRouterManager implements ApplicationListener<ContextRefreshedEvent> {
-	private static final Logger LOGGER = Logger.getLogger(TrafficRouterManager.class);
+	private static final Logger LOGGER = LogManager.getLogger(TrafficRouterManager.class);
 
 	public static final int DEFAULT_API_PORT = 3333;
 	public static final int DEFAULT_SECURE_API_PORT = 0; // Must be set through server.xml properties
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesClient.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesClient.java
index f8ae18c..6d1a321 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesClient.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesClient.java
@@ -21,7 +21,8 @@ import org.apache.traffic_control.traffic_router.core.util.TrafficOpsUtils;
 import org.apache.traffic_control.traffic_router.shared.CertificateData;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.net.HttpURLConnection;
 import java.util.ArrayList;
@@ -29,7 +30,7 @@ import java.util.Base64;
 import java.util.List;
 
 public class CertificatesClient {
-	private static final Logger LOGGER = Logger.getLogger(CertificatesClient.class);
+	private static final Logger LOGGER = LogManager.getLogger(CertificatesClient.class);
 	private TrafficOpsUtils trafficOpsUtils;
 	private static final String PEM_FOOTER_PREFIX = "-----END";
 	private long lastValidfetchTimestamp = 0L;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPoller.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPoller.java
index 29cb3c2..d43ff8c 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPoller.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPoller.java
@@ -18,7 +18,8 @@ package org.apache.traffic_control.traffic_router.core.secure;
 import org.apache.traffic_control.traffic_router.configuration.ConfigurationListener;
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouterManager;
 import org.apache.traffic_control.traffic_router.shared.CertificateData;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 
@@ -31,7 +32,7 @@ import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
 public class CertificatesPoller implements ConfigurationListener {
-	private static final Logger LOGGER = Logger.getLogger(CertificatesPoller.class);
+	private static final Logger LOGGER = LogManager.getLogger(CertificatesPoller.class);
 
 	private final ScheduledExecutorService executor;
 	private ScheduledFuture future;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPublisher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPublisher.java
index 514fe30..2bdf293 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPublisher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/secure/CertificatesPublisher.java
@@ -27,7 +27,8 @@ import org.apache.traffic_control.traffic_router.shared.CertificateData;
 import org.apache.traffic_control.traffic_router.shared.DeliveryServiceCertificatesMBean;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.management.Attribute;
 import javax.management.ObjectName;
@@ -38,7 +39,7 @@ import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.TimeUnit;
 
 public class CertificatesPublisher {
-	private final static Logger LOGGER = Logger.getLogger(CertificatesPublisher.class);
+	private final static Logger LOGGER = LogManager.getLogger(CertificatesPublisher.class);
 	private JsonNode deliveryServicesJson;
 	private List<DeliveryService> deliveryServices = new ArrayList<>();
 	private boolean running = true;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java
index 07d4190..cff4a3f 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcher.java
@@ -18,7 +18,8 @@ package org.apache.traffic_control.traffic_router.core.util;
 import org.apache.traffic_control.traffic_router.core.config.WatcherConfig;
 import org.apache.traffic_control.traffic_router.core.loc.AbstractServiceUpdater;
 import com.fasterxml.jackson.databind.JsonNode;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.io.FileReader;
@@ -27,7 +28,7 @@ import java.io.IOException;
 import java.net.URL;
 
 public abstract class AbstractResourceWatcher extends AbstractServiceUpdater {
-	private static final Logger LOGGER = Logger.getLogger(AbstractResourceWatcher.class);
+	private static final Logger LOGGER = LogManager.getLogger(AbstractResourceWatcher.class);
 
 	private URL authorizationUrl;
 	private String postData;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/DataExporter.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/DataExporter.java
index 8016518..b858a07 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/DataExporter.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/DataExporter.java
@@ -28,7 +28,8 @@ import java.util.Properties;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.google.common.cache.CacheStats;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import org.apache.traffic_control.traffic_router.core.edge.Cache;
 import org.apache.traffic_control.traffic_router.core.edge.CacheLocation;
@@ -36,18 +37,17 @@ import org.apache.traffic_control.traffic_router.core.edge.CacheRegister;
 import org.apache.traffic_control.traffic_router.core.edge.InetRecord;
 import org.apache.traffic_control.traffic_router.core.edge.Location;
 import org.apache.traffic_control.traffic_router.core.edge.PropertiesAndCaches;
-import org.apache.traffic_control.traffic_router.geolocation.Geolocation;
-import org.apache.traffic_control.traffic_router.geolocation.GeolocationException;
 import org.apache.traffic_control.traffic_router.core.loc.NetworkNode;
 import org.apache.traffic_control.traffic_router.core.loc.NetworkNodeException;
+import org.apache.traffic_control.traffic_router.core.router.StatTracker;
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouter;
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouterManager;
-import org.apache.traffic_control.traffic_router.core.router.StatTracker;
 import org.apache.traffic_control.traffic_router.core.status.model.CacheModel;
-
+import org.apache.traffic_control.traffic_router.geolocation.Geolocation;
+import org.apache.traffic_control.traffic_router.geolocation.GeolocationException;
 
 public class DataExporter {
-	private static final Logger LOGGER = Logger.getLogger(DataExporter.class);
+	private static final Logger LOGGER = LogManager.getLogger(DataExporter.class);
 	private static final String NOT_FOUND_MESSAGE = "not found";
 
 	private TrafficRouterManager trafficRouterManager;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Fetcher.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Fetcher.java
index d91b372..317ffc1 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Fetcher.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/Fetcher.java
@@ -37,11 +37,11 @@ import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
-
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class Fetcher {
-	private static final Logger LOGGER = Logger.getLogger(Fetcher.class);
+	private static final Logger LOGGER = LogManager.getLogger(Fetcher.class);
 	protected static final String GET_STR = "GET";
 	protected static final String POST_STR = "POST";
 	protected static final String UTF8_STR = "UTF-8";
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/LanguidState.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/LanguidState.java
index fc1f775..eb66813 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/LanguidState.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/LanguidState.java
@@ -20,13 +20,14 @@ import java.net.UnknownHostException;
 import java.util.Iterator;
 
 import com.fasterxml.jackson.databind.JsonNode;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouter;
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouterManager;
 
 public class LanguidState {
-	private static final Logger LOGGER = Logger.getLogger(LanguidState.class);
+	private static final Logger LOGGER = LogManager.getLogger(LanguidState.class);
 	private boolean ready = false;
 	private TrafficRouterManager trafficRouterManager;
 	private int port = 0;
diff --git a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/PeriodicResourceUpdater.java b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/PeriodicResourceUpdater.java
index 0b490c9..47834ba 100644
--- a/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/PeriodicResourceUpdater.java
+++ b/traffic_router/core/src/main/java/org/apache/traffic_control/traffic_router/core/util/PeriodicResourceUpdater.java
@@ -34,7 +34,8 @@ import java.util.concurrent.TimeUnit;
 import java.util.zip.GZIPInputStream;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import org.asynchttpclient.AsyncCompletionHandler;
 import org.asynchttpclient.AsyncHttpClient;
@@ -51,7 +52,7 @@ import static org.apache.commons.codec.digest.DigestUtils.md5Hex;
  *
  */
 public class PeriodicResourceUpdater {
-	private static final Logger LOGGER = Logger.getLogger(PeriodicResourceUpdater.class);
+	private static final Logger LOGGER = LogManager.getLogger(PeriodicResourceUpdater.class);
 
 	private AsyncHttpClient asyncHttpClient;
 	protected String databaseLocation;
diff --git a/traffic_router/core/src/test/conf/log4j.properties b/traffic_router/core/src/test/conf/log4j.properties
deleted file mode 100644
index da8bdbe..0000000
--- a/traffic_router/core/src/test/conf/log4j.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-#
-# Licensed 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.
-#
-
-# ACCESS is set to be a Syslog Appender
-log4j.appender.ACCESS=org.apache.log4j.RollingFileAppender
-log4j.appender.ACCESS.File=/opt/traffic_router/var/log/access.log
-log4j.appender.ACCESS.MaxFileSize=200MB
-log4j.appender.ACCESS.MaxBackupIndex=10
-
-# ACCESS uses PatternLayout.
-log4j.appender.ACCESS.layout=org.apache.log4j.PatternLayout
-log4j.appender.ACCESS.layout.ConversionPattern=%m%n
-log4j.appender.ACCESS.threshold=INFO
-
-# A1 is set to be a RollingFileAppender.
-#log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-log4j.appender.A1=org.apache.log4j.RollingFileAppender
-log4j.appender.A1.file=${deploy.dir}/var/log/traffic_router.log
-log4j.appender.A1.maxFileSize=100MB
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%-5p %d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%t] %c - %m%n
-log4j.appender.A1.threshold=ALL
-
-# Set root logger level to DEBUG and its only appender to A1.
-# Valid levels are: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, NONE
-log4j.rootLogger=WARN, A1
-
-# Set application logger levels
-log4j.logger.org.apache.traffic_control.traffic_router=INFO
-
-log4j.logger.org.apache.traffic_control.traffic_router.core.access=INFO, ACCESS
-log4j.additivity.org.apache.traffic_control.traffic_router.core.access=false
diff --git a/traffic_router/core/src/test/conf/log4j2.xml b/traffic_router/core/src/test/conf/log4j2.xml
new file mode 100644
index 0000000..33bdde4
--- /dev/null
+++ b/traffic_router/core/src/test/conf/log4j2.xml
@@ -0,0 +1,52 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+
+	Licensed 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.
+ -->
+<Configuration>
+    <Appenders>
+        <Console name="stdout" target="SYSTEM_OUT">
+            <PatternLayout pattern="%m%n" />
+        </Console>
+        <RollingFile name="traffic_router_access"
+                     fileName="${deploy.dir}/var/log/access.log"
+                     filePattern="${deploy.dir}/var/log/access-%d{yyyy-MM-dd}.log" >
+            <PatternLayout pattern="%m%n" />
+            <Policies>
+                <SizeBasedTriggeringPolicy size="200MB" />
+            </Policies>
+            <DefaultRolloverStrategy max="10" />
+            <ThresholdFilter level="INFO" />
+        </RollingFile>
+        <RollingFile name="traffic_router"
+                     fileName="${deploy.dir}/var/log/traffic_router.log"
+                     filePattern="${deploy.dir}/var/log/traffic_router-%d{yyyy-MM-dd}.log" >
+            <PatternLayout pattern="%-5p %d{yyyy-MM-dd'T'HH:mm:ss.SSS} [%t] %c - %m%n" />
+            <Policies>
+                <SizeBasedTriggeringPolicy size="100MB" />
+            </Policies>
+            <ThresholdFilter level="ALL" />
+        </RollingFile>
+    </Appenders>
+    <Loggers>
+        <Logger name="org.apache.traffic_control.traffic_router" level="INFO" additivity="false" >
+            <AppenderRef ref="traffic_router" />
+        </Logger>
+        <Logger name="org.apache.traffic_control.traffic_router.core.access" level="INFO" additivity="false" >
+            <AppenderRef ref="traffic_router_access" />
+        </Logger>
+        <Root level="WARN" additivity="false" >
+            <AppenderRef ref="stdout" />
+        </Root>
+    </Loggers>
+</Configuration>
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/TestBase.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/TestBase.java
index d2d1e10..2400415 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/TestBase.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/TestBase.java
@@ -17,11 +17,12 @@ package org.apache.traffic_control.traffic_router.core;
 
 import org.apache.traffic_control.traffic_router.shared.DeliveryServiceCertificates;
 import org.apache.traffic_control.traffic_router.shared.DeliveryServiceCertificatesMBean;
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.FileSystemXmlApplicationContext;
 
@@ -33,7 +34,7 @@ import static org.springframework.util.SocketUtils.findAvailableTcpPort;
 import static org.springframework.util.SocketUtils.findAvailableUdpPort;
 
 public class TestBase {
-	private static final Logger LOGGER = Logger.getLogger(TestBase.class);
+	private static final Logger LOGGER = LogManager.getLogger(TestBase.class);
 	public static final String monitorPropertiesPath = "src/test/conf/traffic_monitor.properties";
 	private static ApplicationContext context;
 
@@ -57,9 +58,9 @@ public class TestBase {
 			e.printStackTrace();
 		}
 
-		ConsoleAppender consoleAppender = new ConsoleAppender(new PatternLayout("%d{ISO8601} [%-5p] %c{4}: %m%n"));
-		LogManager.getRootLogger().addAppender(consoleAppender);
-		LogManager.getRootLogger().setLevel(Level.WARN);
+		ConsoleAppender consoleAppender = ConsoleAppender.newBuilder().setLayout(PatternLayout.newBuilder().withPattern("%d{ISO8601} [%-5p] %c{4}: %m%n").build()).build();
+		LoggerContext.getContext().getRootLogger().addAppender(consoleAppender);
+		LoggerContext.getContext().getRootLogger().setLevel(Level.INFO);
 
 		LOGGER.warn("Initializing context before running integration tests");
 		context = new FileSystemXmlApplicationContext("src/main/webapp/WEB-INF/applicationContext.xml");
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/TrafficRouterStart.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/TrafficRouterStart.java
index c8a5aa6..9459d89 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/TrafficRouterStart.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/TrafficRouterStart.java
@@ -15,10 +15,12 @@
 
 package org.apache.traffic_control.traffic_router.core;
 
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.PatternLayout;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 public class TrafficRouterStart {
 
@@ -35,11 +37,11 @@ public class TrafficRouterStart {
 		System.setProperty("dns.tcp.port", "1053");
 		System.setProperty("dns.udp.port", "1053");
 
-		LogManager.getLogger("org.springframework").setLevel(Level.WARN);
+		LoggerContext.getContext().getLogger("org.springframework").setLevel(Level.WARN);
 
-		ConsoleAppender consoleAppender = new ConsoleAppender(new PatternLayout("%d{ISO8601} [%-5p] %c{4}: %m%n"));
-		LogManager.getRootLogger().addAppender(consoleAppender);
-		LogManager.getRootLogger().setLevel(Level.INFO);
+		ConsoleAppender consoleAppender = ConsoleAppender.newBuilder().setLayout(PatternLayout.newBuilder().withPattern("%d{ISO8601} [%-5p] %c{4}: %m%n").build()).build();
+		LoggerContext.getContext().getRootLogger().addAppender(consoleAppender);
+		LoggerContext.getContext().getRootLogger().setLevel(Level.INFO);
 
 		System.out.println("[" + System.currentTimeMillis() + "] >>>>>>>>>>>>>>>> Embedded Tomcat loading Traffic Router");
 		CatalinaTrafficRouter catalinaTrafficRouter = new CatalinaTrafficRouter(prefix + "/src/main/conf/server.xml", prefix + "/src/main/webapp" );
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/DNSAccessEventBuilderTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/DNSAccessEventBuilderTest.java
index 4f8c173..ecd247f 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/DNSAccessEventBuilderTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/DNSAccessEventBuilderTest.java
@@ -23,6 +23,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.xbill.DNS.*;
@@ -41,6 +42,7 @@ import static org.powermock.api.mockito.PowerMockito.whenNew;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({Random.class, Header.class, DNSAccessEventBuilder.class, System.class, DNSAccessRecord.class})
+@PowerMockIgnore("javax.management.*")
 public class DNSAccessEventBuilderTest {
 
     private InetAddress client;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/NameServerTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/NameServerTest.java
index ca3e418..95e3216 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/NameServerTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/NameServerTest.java
@@ -26,6 +26,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.xbill.DNS.*;
@@ -49,6 +50,7 @@ import com.fasterxml.jackson.databind.JsonNode;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({Header.class, NameServer.class, TrafficRouterManager.class, TrafficRouter.class, CacheRegister.class})
+@PowerMockIgnore("javax.management.*")
 public class NameServerTest {
     private NameServer nameServer;
     private InetAddress client;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManagerUnitTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManagerUnitTest.java
index 36662bc..69cca2f 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManagerUnitTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/ZoneManagerUnitTest.java
@@ -25,6 +25,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.xbill.DNS.ARecord;
@@ -53,6 +54,7 @@ import static org.powermock.api.mockito.PowerMockito.whenNew;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({ZoneManager.class, SignatureManager.class})
+@PowerMockIgnore("javax.management.*")
 public class ZoneManagerUnitTest {
     ZoneManager zoneManager;
 
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/ZoneSignerImplTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/ZoneSignerImplTest.java
index 57287b1..f3ed008 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/ZoneSignerImplTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/ZoneSignerImplTest.java
@@ -37,6 +37,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentMatcher;
 import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.xbill.DNS.ARecord;
@@ -50,6 +51,7 @@ import org.xbill.DNS.Type;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest(ZoneSignerImpl.class)
+@PowerMockIgnore("javax.management.*")
 public class ZoneSignerImplTest {
 
     static class IsRRsetTypeA implements ArgumentMatcher<RRset> {
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/AbstractProtocolTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/AbstractProtocolTest.java
index 0d34031..07d2a4b 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/AbstractProtocolTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/AbstractProtocolTest.java
@@ -18,13 +18,15 @@ package org.apache.traffic_control.traffic_router.core.dns.protocol;
 import org.apache.traffic_control.traffic_router.core.dns.DNSAccessEventBuilder;
 import org.apache.traffic_control.traffic_router.core.dns.DNSAccessRecord;
 import org.apache.traffic_control.traffic_router.core.dns.NameServer;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.xbill.DNS.*;
@@ -41,7 +43,8 @@ import static org.powermock.api.mockito.PowerMockito.*;
 
 
 @RunWith(PowerMockRunner.class)
-@PrepareForTest({AbstractProtocolTest.FakeAbstractProtocol.class, Logger.class, DNSAccessEventBuilder.class, Header.class, NameServer.class, DNSAccessRecord.class})
+@PrepareForTest({AbstractProtocolTest.FakeAbstractProtocol.class, Logger.class, LogManager.class, DNSAccessEventBuilder.class, Header.class, NameServer.class, DNSAccessRecord.class})
+@PowerMockIgnore("javax.management.*")
 public class AbstractProtocolTest {
     private static Logger accessLogger = mock(Logger.class);
     private NameServer nameServer;
@@ -74,8 +77,8 @@ public class AbstractProtocolTest {
         };
         when(System.currentTimeMillis()).then(currentTimeAnswer);
 
-        mockStatic(Logger.class);
-        when(Logger.getLogger("org.apache.traffic_control.traffic_router.core.access")).thenAnswer(invocation -> accessLogger);
+        mockStatic(LogManager.class);
+        when(LogManager.getLogger("org.apache.traffic_control.traffic_router.core.access")).thenAnswer(invocation -> accessLogger);
 
         header = new Header();
         header.setID(65535);
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCPTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCPTest.java
index d91a02d..8fea635 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCPTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/TCPTest.java
@@ -39,6 +39,7 @@ import java.util.concurrent.ThreadPoolExecutor;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.xbill.DNS.DClass;
@@ -55,6 +56,7 @@ import org.apache.traffic_control.traffic_router.core.dns.DNSAccessRecord;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({AbstractProtocol.class, Message.class})
+@PowerMockIgnore("javax.management.*")
 public class TCPTest {
     private Socket socket;
     private ThreadPoolExecutor executorService;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/UDPTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/UDPTest.java
index 9805311..5e7581a 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/UDPTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/dns/protocol/UDPTest.java
@@ -36,6 +36,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.xbill.DNS.DClass;
@@ -54,6 +55,7 @@ import org.apache.traffic_control.traffic_router.core.dns.DNSAccessRecord;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({AbstractProtocol.class, Message.class})
+@PowerMockIgnore("javax.management.*")
 public class UDPTest {
 
     private DatagramSocket datagramSocket;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryServiceMatcherTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryServiceMatcherTest.java
index c26223a..cae384b 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryServiceMatcherTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/ds/DeliveryServiceMatcherTest.java
@@ -19,6 +19,7 @@ import org.apache.traffic_control.traffic_router.core.request.HTTPRequest;
 import org.apache.traffic_control.traffic_router.core.request.Request;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
@@ -33,6 +34,7 @@ import static org.mockito.Mockito.when;
 
 @PrepareForTest(DeliveryService.class)
 @RunWith(PowerMockRunner.class)
+@PowerMockIgnore("javax.management.*")
 public class DeliveryServiceMatcherTest {
 	@Test
 	public void itReturnsTrueWhenAllMatchersPass() {
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/CoverageZoneTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/CoverageZoneTest.java
index 95b5c18..21ccebd 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/CoverageZoneTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/CoverageZoneTest.java
@@ -29,6 +29,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.greaterThan;
@@ -39,6 +40,7 @@ import static org.hamcrest.core.IsEqual.equalTo;
 import static org.hamcrest.core.IsNot.not;
 import static org.junit.Assert.assertThat;
 
+@PowerMockIgnore("javax.management.*")
 @Category(ExternalTest.class)
 public class CoverageZoneTest {
 	private CloseableHttpClient closeableHttpClient;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/ExternalTestSuite.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/ExternalTestSuite.java
index a4e4509..0830a66 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/ExternalTestSuite.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/ExternalTestSuite.java
@@ -15,13 +15,14 @@
 
 package org.apache.traffic_control.traffic_router.core.external;
 
+import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.traffic_control.traffic_router.core.CatalinaTrafficRouter;
 import org.apache.traffic_control.traffic_router.core.util.ExternalTest;
 import org.apache.catalina.LifecycleException;
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.PatternLayout;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.experimental.categories.Category;
@@ -137,12 +138,12 @@ public class ExternalTestSuite {
 		File dbDirectory = new File(tmpDeployDir, "db");
 		dbDirectory.mkdir();
 
-		LogManager.getLogger("org.eclipse.jetty").setLevel(Level.WARN);
-		LogManager.getLogger("org.springframework").setLevel(Level.WARN);
+		LoggerContext.getContext().getLogger("org.eclipse.jetty").setLevel(Level.WARN);
+		LoggerContext.getContext().getLogger("org.springframework").setLevel(Level.WARN);
 
-		ConsoleAppender consoleAppender = new ConsoleAppender(new PatternLayout("%d{ISO8601} [%-5p] %c{4}: %m%n"));
-		LogManager.getRootLogger().addAppender(consoleAppender);
-		LogManager.getRootLogger().setLevel(Level.INFO);
+		ConsoleAppender consoleAppender = ConsoleAppender.newBuilder().setLayout(PatternLayout.newBuilder().withPattern("%d{ISO8601} [%-5p] %c{4}: %m%n").build()).build();
+		LoggerContext.getContext().getRootLogger().addAppender(consoleAppender);
+		LoggerContext.getContext().getRootLogger().setLevel(Level.INFO);
 
 		// This one test the actual war that is output by the build process
 		catalinaTrafficRouter = new CatalinaTrafficRouter("src/main/conf/server.xml", "target/ROOT");
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/HttpDataServer.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/HttpDataServer.java
index 7cf7d38..0ac1844 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/HttpDataServer.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/external/HttpDataServer.java
@@ -44,7 +44,7 @@ public class HttpDataServer implements HttpHandler {
 
 // Useful for producing an access log
 //	static {
-//		Logger logger = Logger.getLogger("com.sun.net.httpserver");
+//		Logger logger = LogManager.getLogger("com.sun.net.httpserver");
 //		logger.setLevel(java.util.logging.Level.ALL);
 //
 //		java.util.logging.Handler[] handlers = logger.getHandlers();
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/http/HTTPAccessEventBuilderTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/http/HTTPAccessEventBuilderTest.java
index ed5b158..d999eea 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/http/HTTPAccessEventBuilderTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/http/HTTPAccessEventBuilderTest.java
@@ -25,6 +25,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
@@ -48,6 +49,7 @@ import static org.powermock.api.mockito.PowerMockito.whenNew;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({Date.class, HTTPAccessEventBuilder.class, HTTPAccessRecord.class, System.class})
+@PowerMockIgnore("javax.management.*")
 public class HTTPAccessEventBuilderTest {
     private HttpServletRequest request;
 
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdaterTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdaterTest.java
index c22cd72..50b83f7 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdaterTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/AbstractServiceUpdaterTest.java
@@ -19,6 +19,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
@@ -44,6 +45,7 @@ import static org.powermock.api.support.membermodification.MemberModifier.stub;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({AbstractServiceUpdater.class, HttpURLConnection.class, URL.class, Files.class})
+@PowerMockIgnore("javax.management.*")
 public class AbstractServiceUpdaterTest {
 
 	private HttpURLConnection connection;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/CoverageZoneTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/CoverageZoneTest.java
index 982ef7b..9e70e8a 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/CoverageZoneTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/CoverageZoneTest.java
@@ -27,6 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.reflect.Whitebox;
@@ -46,6 +47,7 @@ import static org.mockito.Mockito.when;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest(TrafficRouter.class)
+@PowerMockIgnore("javax.management.*")
 public class CoverageZoneTest {
 
 	private TrafficRouter trafficRouter;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/GeoTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/GeoTest.java
index abb1115..e718a78 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/GeoTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/GeoTest.java
@@ -16,7 +16,8 @@
 package org.apache.traffic_control.traffic_router.core.loc;
 
 import org.apache.traffic_control.traffic_router.core.util.IntegrationTest;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -36,7 +37,7 @@ import static org.hamcrest.Matchers.equalTo;
 
 @Category(IntegrationTest.class)
 public class GeoTest {
-	private static final Logger LOGGER = Logger.getLogger(GeoTest.class);
+	private static final Logger LOGGER = LogManager.getLogger(GeoTest.class);
 
 	private GeolocationDatabaseUpdater geolocationDatabaseUpdater;
 	private MaxmindGeolocationService maxmindGeolocationService;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationServiceTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationServiceTest.java
index f863340..c4865ce 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationServiceTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/MaxmindGeolocationServiceTest.java
@@ -23,6 +23,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
@@ -38,6 +39,7 @@ import static org.mockito.Mockito.when;
 import static org.powermock.api.mockito.PowerMockito.whenNew;
 
 @RunWith(PowerMockRunner.class)
+@PowerMockIgnore("javax.management.*")
 public class MaxmindGeolocationServiceTest {
 
 	private MaxmindGeolocationService service;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNodeTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNodeTest.java
index 7552edb..d3fd5ba 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNodeTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNodeTest.java
@@ -32,14 +32,15 @@ import java.util.ArrayList;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.junit.Before;
 import org.junit.Test;
 
 import com.google.common.net.InetAddresses;
 
 public class NetworkNodeTest {
-	private static final Logger LOGGER = Logger.getLogger(NetworkNodeTest.class);
+	private static final Logger LOGGER = LogManager.getLogger(NetworkNodeTest.class);
 	private Map<String, List<String>> netMap = new HashMap<String, List<String>>();
 	private Map<String, List<String>> deepNetMap = new HashMap<String, List<String>>();
 	private NetworkNode root;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNodeUnitTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNodeUnitTest.java
index f6b5153..9ed97fd 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNodeUnitTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/loc/NetworkNodeUnitTest.java
@@ -19,7 +19,6 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.junit.Test;
 
-
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/DNSRoutingMissesTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/DNSRoutingMissesTest.java
index 34b0171..a611c48 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/DNSRoutingMissesTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/DNSRoutingMissesTest.java
@@ -31,6 +31,7 @@ import com.fasterxml.jackson.databind.JsonNode;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.powermock.reflect.Whitebox;
@@ -44,6 +45,7 @@ import static org.powermock.reflect.Whitebox.setInternalState;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({DeliveryService.class, TrafficRouter.class})
+@PowerMockIgnore("javax.management.*")
 public class DNSRoutingMissesTest {
 
     private DNSRequest request;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/GeoSortSteeringResultsTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/GeoSortSteeringResultsTest.java
index b8980b7..f52515a 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/GeoSortSteeringResultsTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/GeoSortSteeringResultsTest.java
@@ -28,6 +28,7 @@ import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
@@ -44,6 +45,7 @@ import static org.mockito.Mockito.when;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({Collections.class})
+@PowerMockIgnore("javax.management.*")
 public class GeoSortSteeringResultsTest {
 
     private TrafficRouter trafficRouter;
@@ -131,3 +133,4 @@ public class GeoSortSteeringResultsTest {
     }
 
 }
+
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/StatelessTrafficRouterTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/StatelessTrafficRouterTest.java
index 6a13824..87fa747 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/StatelessTrafficRouterTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/router/StatelessTrafficRouterTest.java
@@ -17,6 +17,8 @@ package org.apache.traffic_control.traffic_router.core.router;
 
 import org.apache.traffic_control.traffic_router.core.util.IntegrationTest;
 import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -37,7 +39,7 @@ import static org.hamcrest.Matchers.equalTo;
 
 @Category(IntegrationTest.class)
 public class StatelessTrafficRouterTest {
-	private static final Logger LOGGER = Logger.getLogger(StatelessTrafficRouterTest.class);
+	private static final Logger LOGGER = LogManager.getLogger(StatelessTrafficRouterTest.class);
 	private TrafficRouterManager trafficRouterManager;
 	private GeolocationDatabaseUpdater geolocationDatabaseUpdater;
 	private NetworkUpdater networkUpdater;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcherTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcherTest.java
index b11f62b..df661c6 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcherTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/util/AbstractResourceWatcherTest.java
@@ -24,7 +24,8 @@ import org.apache.traffic_control.traffic_router.core.router.TrafficRouter;
 import org.apache.traffic_control.traffic_router.core.router.TrafficRouterManager;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -46,7 +47,7 @@ import static org.junit.Assert.assertNull;
 @Category(IntegrationTest.class)
 public class AbstractResourceWatcherTest {
 
-    private static final Logger LOGGER = Logger.getLogger(org.apache.traffic_control.traffic_router.core.util.AbstractResourceWatcherTest.class);
+    private static final Logger LOGGER = LogManager.getLogger(org.apache.traffic_control.traffic_router.core.util.AbstractResourceWatcherTest.class);
 
     private FederationsWatcher federationsWatcher;
     private SteeringWatcher steeringWatcher;
diff --git a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/util/FetcherTest.java b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/util/FetcherTest.java
index 9d757fc..ebfc4a5 100644
--- a/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/util/FetcherTest.java
+++ b/traffic_router/core/src/test/java/org/apache/traffic_control/traffic_router/core/util/FetcherTest.java
@@ -36,7 +36,7 @@ import static org.powermock.api.support.membermodification.MemberModifier.stub;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({Fetcher.class, URL.class, InputStreamReader.class})
-@PowerMockIgnore("javax.net.ssl.*")
+@PowerMockIgnore({"javax.net.ssl.*", "javax.management.*"})
 public class FetcherTest {
 
     @Test
diff --git a/traffic_router/neustar/pom.xml b/traffic_router/neustar/pom.xml
index 6163269..aafaa31 100644
--- a/traffic_router/neustar/pom.xml
+++ b/traffic_router/neustar/pom.xml
@@ -50,8 +50,8 @@ under the License.
 			<version>${project.parent.version}</version>
 		</dependency>
 		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
 			<version>${log4j.version}</version>
 		</dependency>
 		<dependency>
diff --git a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/NeustarGeolocationService.java b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/NeustarGeolocationService.java
index 80e252d..e25c30c 100644
--- a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/NeustarGeolocationService.java
+++ b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/NeustarGeolocationService.java
@@ -22,7 +22,8 @@ import org.apache.traffic_control.traffic_router.geolocation.GeolocationService;
 import com.quova.bff.reader.exception.AddressNotFoundException;
 import com.quova.bff.reader.io.GPDatabaseReader;
 import com.quova.bff.reader.model.GeoPointResponse;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -32,7 +33,7 @@ import java.net.InetAddress;
 
 @Component
 public class NeustarGeolocationService implements GeolocationService {
-	private static final Logger LOGGER = Logger.getLogger(NeustarGeolocationService.class);
+	private static final Logger LOGGER = LogManager.getLogger(NeustarGeolocationService.class);
 	private GPDatabaseReader databaseReader;
 
 	@Autowired
diff --git a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/NeustarConfiguration.java b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/NeustarConfiguration.java
index 31ab478..4ee348e 100644
--- a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/NeustarConfiguration.java
+++ b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/NeustarConfiguration.java
@@ -21,7 +21,8 @@ import org.apache.traffic_control.traffic_router.neustar.data.TarExtractor;
 import org.apache.traffic_control.traffic_router.neustar.files.FilesMover;
 
 import org.apache.traffic_control.traffic_router.configuration.ConfigurationListener;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -36,7 +37,7 @@ import java.util.concurrent.ScheduledExecutorService;
 @Configuration
 @PropertySource(value = "neustar.properties", ignoreResourceNotFound = true)
 public class NeustarConfiguration {
-	private final Logger LOGGER = Logger.getLogger(NeustarConfiguration.class);
+	private final Logger LOGGER = LogManager.getLogger(NeustarConfiguration.class);
 	@Autowired
 	private Environment environment;
 
diff --git a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/ServiceRefresher.java b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/ServiceRefresher.java
index 50bdf07..dc0e1db 100644
--- a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/ServiceRefresher.java
+++ b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/ServiceRefresher.java
@@ -17,11 +17,12 @@ package org.apache.traffic_control.traffic_router.neustar.configuration;
 
 import org.apache.traffic_control.traffic_router.neustar.NeustarGeolocationService;
 import org.apache.traffic_control.traffic_router.neustar.data.NeustarDatabaseUpdater;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public class ServiceRefresher implements Runnable {
-	private final Logger logger = Logger.getLogger(ServiceRefresher.class);
+	private final Logger logger = LogManager.getLogger(ServiceRefresher.class);
 
 	@Autowired
 	NeustarDatabaseUpdater neustarDatabaseUpdater;
diff --git a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/TrafficRouterConfigurationListener.java b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/TrafficRouterConfigurationListener.java
index 386a92b..ca2cb0c 100644
--- a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/TrafficRouterConfigurationListener.java
+++ b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/configuration/TrafficRouterConfigurationListener.java
@@ -16,7 +16,8 @@
 package org.apache.traffic_control.traffic_router.neustar.configuration;
 
 import org.apache.traffic_control.traffic_router.configuration.ConfigurationListener;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 
@@ -26,7 +27,7 @@ import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
 public class TrafficRouterConfigurationListener implements ConfigurationListener {
-	private final Logger logger = Logger.getLogger(TrafficRouterConfigurationListener.class);
+	private final Logger logger = LogManager.getLogger(TrafficRouterConfigurationListener.class);
 
 	@Autowired
 	private Environment environment;
diff --git a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/HttpClient.java b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/HttpClient.java
index cacee3d..7114cef 100644
--- a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/HttpClient.java
+++ b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/HttpClient.java
@@ -19,12 +19,13 @@ import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpUriRequest;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
 
 public class HttpClient {
-	private final Logger LOGGER = Logger.getLogger(HttpClient.class);
+	private final Logger LOGGER = LogManager.getLogger(HttpClient.class);
 
 	private CloseableHttpClient httpClient;
 
diff --git a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/NeustarDatabaseUpdater.java b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/NeustarDatabaseUpdater.java
index cfc9007..97d7180 100644
--- a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/NeustarDatabaseUpdater.java
+++ b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/NeustarDatabaseUpdater.java
@@ -22,7 +22,8 @@ import org.apache.http.HttpResponse;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.io.File;
@@ -36,7 +37,7 @@ import java.util.zip.GZIPInputStream;
 import static java.lang.Long.parseLong;
 
 public class NeustarDatabaseUpdater {
-	private final Logger LOGGER = Logger.getLogger(NeustarDatabaseUpdater.class);
+	private final Logger LOGGER = LogManager.getLogger(NeustarDatabaseUpdater.class);
 
 	@Autowired
 	private Integer neustarPollingTimeout;
diff --git a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/TarExtractor.java b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/TarExtractor.java
index 43700a5..b73cf03 100644
--- a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/TarExtractor.java
+++ b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/data/TarExtractor.java
@@ -17,7 +17,8 @@ package org.apache.traffic_control.traffic_router.neustar.data;
 
 import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
 import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -25,7 +26,7 @@ import java.io.IOException;
 import java.io.InputStream;
 
 public class TarExtractor {
-	private final Logger LOGGER = Logger.getLogger(TarExtractor.class);
+	private final Logger LOGGER = LogManager.getLogger(TarExtractor.class);
 
 	public boolean extractTo(File directory, InputStream inputStream) {
 		try (TarArchiveInputStream tarArchiveInputStream = new TarArchiveInputStream(inputStream)) {
diff --git a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/files/FilesMover.java b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/files/FilesMover.java
index fc6a2ba..8ec0a62 100644
--- a/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/files/FilesMover.java
+++ b/traffic_router/neustar/src/main/java/org/apache/traffic_control/traffic_router/neustar/files/FilesMover.java
@@ -15,7 +15,8 @@
 
 package org.apache.traffic_control.traffic_router.neustar.files;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.io.IOException;
@@ -28,7 +29,7 @@ import java.nio.file.StandardCopyOption;
 import java.nio.file.attribute.BasicFileAttributes;
 
 public class FilesMover {
-	private static final Logger LOGGER = Logger.getLogger(FilesMover.class);
+	private static final Logger LOGGER = LogManager.getLogger(FilesMover.class);
 
 	public boolean purgeDirectory(File directory) {
 		try {
diff --git a/traffic_router/neustar/src/test/java/data/NeustarDatabaseUpdaterTest.java b/traffic_router/neustar/src/test/java/data/NeustarDatabaseUpdaterTest.java
index dd50d22..70fcd90e 100644
--- a/traffic_router/neustar/src/test/java/data/NeustarDatabaseUpdaterTest.java
+++ b/traffic_router/neustar/src/test/java/data/NeustarDatabaseUpdaterTest.java
@@ -24,10 +24,10 @@ import org.apache.http.HttpEntity;
 import org.apache.http.StatusLine;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.PatternLayout;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/traffic_router/neustar/src/test/java/data/TarExtractorTest.java b/traffic_router/neustar/src/test/java/data/TarExtractorTest.java
index cd27a3b..ead3b6b 100644
--- a/traffic_router/neustar/src/test/java/data/TarExtractorTest.java
+++ b/traffic_router/neustar/src/test/java/data/TarExtractorTest.java
@@ -18,9 +18,9 @@ package data;
 import org.apache.traffic_control.traffic_router.neustar.data.TarExtractor;
 import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
 import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.PatternLayout;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -48,6 +48,7 @@ import static org.powermock.api.mockito.PowerMockito.whenNew;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({TarExtractor.class, File.class, TarArchiveInputStream.class})
+@PowerMockIgnore("javax.management.*")
 public class TarExtractorTest {
 
 	@Before
diff --git a/traffic_router/neustar/src/test/java/geolocation/NeustarGeolocationServiceTest.java b/traffic_router/neustar/src/test/java/geolocation/NeustarGeolocationServiceTest.java
index 3238959..fb68d9e 100644
--- a/traffic_router/neustar/src/test/java/geolocation/NeustarGeolocationServiceTest.java
+++ b/traffic_router/neustar/src/test/java/geolocation/NeustarGeolocationServiceTest.java
@@ -21,8 +21,8 @@ import org.apache.traffic_control.traffic_router.geolocation.Geolocation;
 import com.maxmind.db.Reader;
 import com.quova.bff.reader.io.GPDatabaseReader;
 import com.quova.bff.reader.model.GeoPointResponse;
-import org.apache.log4j.Appender;
-import org.apache.log4j.LogManager;
+import org.apache.logging.log4j.Appender;
+import org.apache.logging.log4j.LogManager;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -47,6 +47,7 @@ import static org.springframework.test.util.AssertionErrors.fail;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest({NeustarGeolocationService.class, GPDatabaseReader.class, Reader.class})
+@PowerMockIgnore("javax.management.*")
 public class NeustarGeolocationServiceTest {
 	@Mock
 	File neustarDatabaseDirectory;
diff --git a/traffic_router/neustar/src/test/java/neustar/GPDatabaseReaderBuilderTest.java b/traffic_router/neustar/src/test/java/neustar/GPDatabaseReaderBuilderTest.java
index 157ce42..06fdc6d 100644
--- a/traffic_router/neustar/src/test/java/neustar/GPDatabaseReaderBuilderTest.java
+++ b/traffic_router/neustar/src/test/java/neustar/GPDatabaseReaderBuilderTest.java
@@ -35,6 +35,7 @@ import static org.mockito.Mockito.when;
 import static org.powermock.api.mockito.PowerMockito.whenNew;
 
 @RunWith(PowerMockRunner.class)
+@PowerMockIgnore("javax.management.*")
 public class GPDatabaseReaderBuilderTest {
 
 	@Test
diff --git a/traffic_router/pom.xml b/traffic_router/pom.xml
index 649b878..5d1d568 100644
--- a/traffic_router/pom.xml
+++ b/traffic_router/pom.xml
@@ -33,7 +33,7 @@
 	<properties>
 		<deploy.dir>/opt/traffic_router</deploy.dir>
 		<spring.version>5.2.9.RELEASE</spring.version>
-		<log4j.version>1.2.17</log4j.version>
+		<log4j.version>2.16.0</log4j.version>
 		<junit.version>4.12</junit.version>
 		<hamcrest.version>1.3</hamcrest.version>
 		<geoip2.version>2.1.0</geoip2.version>
diff --git a/traffic_router/shared/pom.xml b/traffic_router/shared/pom.xml
index 393f844..281b245 100644
--- a/traffic_router/shared/pom.xml
+++ b/traffic_router/shared/pom.xml
@@ -59,8 +59,8 @@ under the License.
 
 	<dependencies>
 		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
 			<version>${log4j.version}</version>
 		</dependency>
 		<dependency>
@@ -113,8 +113,8 @@ under the License.
 		</dependency>
 		<dependency>
 			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-log4j12</artifactId>
-			<version>1.7.5</version>
+			<artifactId>slf4j-simple</artifactId>
+			<version>1.7.32</version>
 		</dependency>
 	</dependencies>
 
diff --git a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/BindPrivateKey.java b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/BindPrivateKey.java
index 311684e..0220686 100644
--- a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/BindPrivateKey.java
+++ b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/BindPrivateKey.java
@@ -15,7 +15,8 @@
 
 package org.apache.traffic_control.traffic_router.secure;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.math.BigInteger;
 import java.security.KeyFactory;
@@ -29,7 +30,7 @@ import java.util.Map;
 import static java.util.Base64.getDecoder;
 
 public class BindPrivateKey {
-	private static final Logger LOGGER = Logger.getLogger(BindPrivateKey.class);
+	private static final Logger LOGGER = LogManager.getLogger(BindPrivateKey.class);
 
 	private BigInteger decodeBigInt(final String s) {
 		return new BigInteger(1, getDecoder().decode(s.getBytes()));
diff --git a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/Pkcs1KeySpecDecoder.java b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/Pkcs1KeySpecDecoder.java
index bb3796e..1924fca 100644
--- a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/Pkcs1KeySpecDecoder.java
+++ b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/Pkcs1KeySpecDecoder.java
@@ -15,10 +15,11 @@
 
 package org.apache.traffic_control.traffic_router.secure;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.bouncycastle.asn1.ASN1Integer;
 import org.bouncycastle.asn1.ASN1Sequence;
 import org.bouncycastle.asn1.ASN1SequenceParser;
-import org.bouncycastle.asn1.ASN1Integer;
 
 import java.io.IOException;
 import java.math.BigInteger;
@@ -37,7 +38,7 @@ public class Pkcs1KeySpecDecoder {
 
 	static final int PRIVATE_SEQUENCE_LENGTH = 9;
 	static final int PUBLIC_SEQUENCE_LENGTH = 2;
-	private static final Logger LOGGER = Logger.getLogger(Pkcs1KeySpecDecoder.class);
+	private static final Logger LOGGER = LogManager.getLogger(Pkcs1KeySpecDecoder.class);
 
 	public KeySpec decode(final String data) throws IOException, GeneralSecurityException {
 		final String pemData = data.replaceAll(HEADER, "").replaceAll(FOOTER, "").replaceAll("\\s", "");
diff --git a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/Pkcs8.java b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/Pkcs8.java
index 4bd6c19..d92839f 100644
--- a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/Pkcs8.java
+++ b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/secure/Pkcs8.java
@@ -15,7 +15,8 @@
 
 package org.apache.traffic_control.traffic_router.secure;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
 import java.security.GeneralSecurityException;
@@ -24,7 +25,7 @@ import java.security.spec.PKCS8EncodedKeySpec;
 import java.util.Base64;
 
 public class Pkcs8 extends Pkcs {
-	private static final Logger LOGGER = Logger.getLogger(Pkcs8.class);
+	private static final Logger LOGGER = LogManager.getLogger(Pkcs8.class);
 	public static final String HEADER = "-----BEGIN PRIVATE KEY-----";
 	public static final String FOOTER = "-----END PRIVATE KEY-----";
 
diff --git a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/SigningData.java b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/SigningData.java
index f02ef0d..be8b96e 100644
--- a/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/SigningData.java
+++ b/traffic_router/shared/src/main/java/org/apache/traffic_control/traffic_router/shared/SigningData.java
@@ -15,6 +15,8 @@
 
 package org.apache.traffic_control.traffic_router.shared;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.xbill.DNS.Record;
 import org.xbill.DNS.Section;
 
@@ -572,6 +574,8 @@ public class SigningData {
 	public static List<Record> postZoneList;
 	public static List<Record> dsRecordList = new ArrayList<>();
 
+	private static final Logger LOGGER = LogManager.getLogger(SigningData.class);
+
 	public static List<String> getStringsNamedLike(String name, Class clazz) {
 		return Arrays.asList(clazz.getDeclaredFields()).stream()
 				.filter(field -> field.getName().contains(name))
diff --git a/traffic_router/shared/src/test/java/secure/BindPrivateKeyTest.java b/traffic_router/shared/src/test/java/secure/BindPrivateKeyTest.java
index 83b93d5..0d21978 100644
--- a/traffic_router/shared/src/test/java/secure/BindPrivateKeyTest.java
+++ b/traffic_router/shared/src/test/java/secure/BindPrivateKeyTest.java
@@ -21,6 +21,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import sun.security.rsa.RSAPrivateCrtKeyImpl;
@@ -43,6 +44,7 @@ import static org.powermock.api.mockito.PowerMockito.whenNew;
 
 @RunWith(PowerMockRunner.class)
 @PrepareForTest(BindPrivateKey.class)
+@PowerMockIgnore("javax.management.*")
 public class BindPrivateKeyTest {
 	private String privateKeyString;
 	private PrivateKey privateKey;