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:30:55 UTC

[trafficcontrol] branch 6.0.x updated (79f49d9 -> c84dc24)

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

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


 discard 79f49d9  Updated log4j from version 1.2.17 to version 2.16.0 (#6390)
     new c84dc24  Updated log4j from version 1.2.17 to version 2.16.0 (#6390)

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (79f49d9)
            \
             N -- N -- N   refs/heads/6.0.x (c84dc24)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../traffic_router/core/router/StatelessTrafficRouterTest.java           | 1 -
 1 file changed, 1 deletion(-)

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

Posted by zr...@apache.org.
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 c84dc242d54836d115cc4b9bdfadb6b9dea64e33
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    |  5 +-
 .../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(+), 342 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..ed1ee5a 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
@@ -16,7 +16,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 +38,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;