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

suvasude pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-gobblin.git


The following commit(s) were added to refs/heads/master by this push:
     new 7ed39cc  [GOBBLIN-822] Upgrade log4j to log4j2 for LogRouting use-case
7ed39cc is described below

commit 7ed39cccdfaaa7bfba4b87c7d8d3da10e1d10bae
Author: Jay Sen <[email protected]>
AuthorDate: Fri Nov 22 13:47:26 2019 -0800

    [GOBBLIN-822] Upgrade log4j to log4j2 for LogRouting use-case
    
    Closes #2685 from jhsenjaliya/GOBBLIN-822
---
 gobblin-api/build.gradle                           |  2 +-
 .../gobblin/testing/AssertWithBackoffTest.java     |  2 +-
 gobblin-audit/build.gradle                         |  2 +-
 gobblin-aws/build.gradle                           |  2 +-
 gobblin-cluster/build.gradle                       |  2 +-
 .../cluster/suite/IntegrationBasicSuite.java       |  8 +++-
 .../src/test/resources/BasicTaskDriver.conf        |  4 +-
 gobblin-cluster/src/test/resources/log4j.xml       | 52 ----------------------
 .../src/test/resources/log4j2.xml                  | 41 ++++++++---------
 .../src/test/resources/log4j2.xml                  | 37 ++++++---------
 .../gobblin-config-client/build.gradle             |  2 +-
 .../apache/gobblin/config/client/ConfigClient.java |  5 ++-
 .../config/client/ConfigStoreFactoryRegister.java  |  5 ++-
 .../gobblin-config-core/build.gradle               |  2 +-
 gobblin-data-management/build.gradle               |  2 +-
 .../conversion/hive/source/HiveSource.java         | 11 +++--
 gobblin-docs/case-studies/Hive-Distcp.md           |  2 +-
 .../Configuration-Properties-Glossary.md           |  2 +-
 gobblin-hive-registration/build.gradle             |  2 +-
 gobblin-modules/gobblin-azkaban/build.gradle       |  2 +-
 .../gobblin/azkaban/AzkabanGobblinDaemon.java      |  7 ++-
 .../data/management/trash/TrashCollectorJob.java   |  5 ++-
 .../gobblin/metrics/kafka/LoggingPusherTest.java   | 37 ++++++++-------
 gobblin-runtime/build.gradle                       | 18 +++++---
 .../apache/gobblin/runtime/locks/JobLockTest.java  |  4 +-
 .../runtime/mapreduce/MRTaskFactoryTest.java       | 32 +++++++------
 .../src/test/resources/log4j2.xml                  | 37 ++++++---------
 gobblin-service/build.gradle                       |  2 +-
 .../apache/gobblin/TaskErrorIntegrationTest.java   | 41 +++++++++--------
 gobblin-utility/build.gradle                       |  1 +
 .../org/apache/gobblin/util/AvroFlattener.java     |  5 ++-
 .../org/apache/gobblin/util/hadoop/TokenUtils.java |  5 ++-
 gobblin-yarn/build.gradle                          |  2 +-
 gradle/scripts/computeVersions.gradle              |  5 ++-
 gradle/scripts/dependencyDefinitions.gradle        |  9 ++--
 gradle/scripts/globalDependencies.gradle           | 14 ++++++
 36 files changed, 194 insertions(+), 217 deletions(-)

diff --git a/gobblin-api/build.gradle b/gobblin-api/build.gradle
index d8841b1..8f9a72d 100644
--- a/gobblin-api/build.gradle
+++ b/gobblin-api/build.gradle
@@ -33,7 +33,7 @@ dependencies {
 
     testCompile externalDependency.testng
     testCompile externalDependency.mockito
-    testCompile externalDependency.log4j
+    testCompile externalDependency.log4j2
 }
 
 configurations {
diff --git 
a/gobblin-api/src/test/java/org/apache/gobblin/testing/AssertWithBackoffTest.java
 
b/gobblin-api/src/test/java/org/apache/gobblin/testing/AssertWithBackoffTest.java
index 7f1fae8..0c06f0b 100644
--- 
a/gobblin-api/src/test/java/org/apache/gobblin/testing/AssertWithBackoffTest.java
+++ 
b/gobblin-api/src/test/java/org/apache/gobblin/testing/AssertWithBackoffTest.java
@@ -103,7 +103,7 @@ public class AssertWithBackoffTest {
   }
 
   public static void setLogjLevelForLogger(Logger log, Level logLevel) {
-    org.apache.log4j.Logger log4jLogger = 
org.apache.log4j.Logger.getLogger(log.getName());
+    org.apache.log4j.Logger log4jLogger = 
org.apache.log4j.LogManager.getLogger(log.getName());
     log4jLogger.setLevel(logLevel);
   }
 
diff --git a/gobblin-audit/build.gradle b/gobblin-audit/build.gradle
index e6d3659..2b88f04 100644
--- a/gobblin-audit/build.gradle
+++ b/gobblin-audit/build.gradle
@@ -30,7 +30,7 @@ dependencies {
     compile externalDependency.reflections
 
     testCompile externalDependency.testng
-    testCompile externalDependency.log4j
+    testCompile externalDependency.log4j2
     testCompile externalDependency.mockito
 }
 
diff --git a/gobblin-aws/build.gradle b/gobblin-aws/build.gradle
index 37d4389..dc19e92 100644
--- a/gobblin-aws/build.gradle
+++ b/gobblin-aws/build.gradle
@@ -41,7 +41,7 @@ dependencies {
   compile externalDependency.guava
   compile externalDependency.commonsLang
   compile externalDependency.slf4j
-  compile externalDependency.log4j
+  compile externalDependency.log4j2
   compile externalDependency.commonsCli
   compile externalDependency.gson
   compile externalDependency.hiveCommon
diff --git a/gobblin-cluster/build.gradle b/gobblin-cluster/build.gradle
index e52854d..fe34b2f 100644
--- a/gobblin-cluster/build.gradle
+++ b/gobblin-cluster/build.gradle
@@ -33,7 +33,7 @@ dependencies {
   compile externalDependency.guava
   compile externalDependency.commonsLang
   compile externalDependency.slf4j
-  compile externalDependency.log4j
+  compile externalDependency.log4j2
   compile externalDependency.commonsCli
   compile externalDependency.gson
   compile externalDependency.hiveCommon
diff --git 
a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/suite/IntegrationBasicSuite.java
 
b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/suite/IntegrationBasicSuite.java
index 7da4915..88b17bb 100644
--- 
a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/suite/IntegrationBasicSuite.java
+++ 
b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/suite/IntegrationBasicSuite.java
@@ -84,7 +84,7 @@ public class IntegrationBasicSuite {
   protected Collection<GobblinTaskRunner> taskDrivers = Lists.newArrayList();
   protected GobblinClusterManager manager;
 
-  // This filename should match the log file specified in log4j.xml
+  // This filename should match the log file specified in log4j2.xml
   public static Path jobLogOutputFile = 
Paths.get("gobblin-integration-test-log-dir/gobblin-cluster-test.log");;
   protected Path workPath;
   protected Path jobConfigPath;
@@ -197,7 +197,10 @@ public class IntegrationBasicSuite {
   }
 
   protected Collection<Config> getTaskDriverConfigs() {
-    return new ArrayList<>();
+    URL url = Resources.getResource("BasicTaskDriver.conf");
+    Config taskDriverConfig = ConfigFactory.parseURL(url);
+    taskDriverConfig = taskDriverConfig.withFallback(getClusterConfig());
+    return Lists.newArrayList(taskDriverConfig.resolve());
   }
 
   protected Collection<Config> getWorkerConfigs() {
@@ -323,3 +326,4 @@ public class IntegrationBasicSuite {
     HelixUtils.createGobblinHelixCluster(zkConnectionString, 
helix_cluster_name);
   }
 }
+
diff --git a/gobblin-cluster/src/test/resources/BasicTaskDriver.conf 
b/gobblin-cluster/src/test/resources/BasicTaskDriver.conf
index 84bc5b2..80b1b25 100644
--- a/gobblin-cluster/src/test/resources/BasicTaskDriver.conf
+++ b/gobblin-cluster/src/test/resources/BasicTaskDriver.conf
@@ -16,4 +16,6 @@
 #
 
 # Cluster / Helix configuration properties
-gobblin.cluster.taskDriver.enabled=true
\ No newline at end of file
+gobblin.cluster.taskDriver.enabled=true
+worker.instance.name=testTaskDriver1
+
diff --git a/gobblin-cluster/src/test/resources/log4j.xml 
b/gobblin-cluster/src/test/resources/log4j.xml
deleted file mode 100644
index 12b4ff9..0000000
--- a/gobblin-cluster/src/test/resources/log4j.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
-  <appender name="console" class="org.apache.log4j.ConsoleAppender">
-    <param name="Target" value="System.out" />
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern"
-             value="%d{yyyy-MM-dd HH:mm:ss z} %-5p [%t] %C %L - %m%n" />
-    </layout>
-  </appender>
-
-  <appender name="file" class="org.apache.log4j.RollingFileAppender">
-    <param name="append" value="false" />
-    <param name="maxFileSize" value="1MB" />
-    <param name="maxBackupIndex" value="5" />
-    <param name="file" 
value="gobblin-integration-test-log-dir/gobblin-cluster-test.log" />
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern"
-             value="%d{yyyy-MM-dd HH:mm:ss z} %-5p [%t] %C %L - %m%n" />
-    </layout>
-  </appender>
-
-  <root>
-    <level value="info" />
-    <appender-ref ref="file" />
-    <appender-ref ref="console" />
-  </root>
-
-  <!-- Swallow annoying exceptions when creating a configuration. -->
-  <logger name="org.apache.hadoop.conf.Configuration">
-    <level value="FATAL"/>
-  </logger>
-
-</log4j:configuration>
diff --git a/gobblin-compaction/src/test/resources/log4j.xml 
b/gobblin-cluster/src/test/resources/log4j2.xml
similarity index 52%
copy from gobblin-compaction/src/test/resources/log4j.xml
copy to gobblin-cluster/src/test/resources/log4j2.xml
index b13377c..94ac388 100644
--- a/gobblin-compaction/src/test/resources/log4j.xml
+++ b/gobblin-cluster/src/test/resources/log4j2.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,25 +16,20 @@
   ~ limitations under the License.
   -->
 
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
-  <appender name="console" class="org.apache.log4j.ConsoleAppender">
-    <param name="Target" value="System.out" />
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern"
-        value="%d{yyyy-MM-dd HH:mm:ss z} %-5p [%t] %C %L - %m%n" />
-    </layout>
-  </appender>
-
-  <root>
-    <level value="info" />
-    <appender-ref ref="console" />
-  </root>
-
-  <!-- Swallow annoying exceptions when creating a configuration. -->
-  <logger name="org.apache.hadoop.conf.Configuration">
-    <level value="FATAL"/>
-  </logger>
-
-</log4j:configuration>
+<Configuration status="INFO">
+  <Appenders>
+    <Console name="Console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%level{length=5} %d{DEFAULT} [%thread] 
%logger{1} - %msg%n" />
+    </Console>
+    <File name="test-log-file" 
fileName="gobblin-integration-test-log-dir/gobblin-cluster-test.log" 
immediateFlush="true" append="false">
+      <PatternLayout pattern="%level{length=5} %d{DEFAULT} [%thread] 
%logger{1} - %msg%n "/>
+    </File>
+  </Appenders>
+  <Loggers>
+    <Root level="info">
+      <AppenderRef ref="Console" />
+      <AppenderRef ref="test-log-file"/>
+    </Root>
+    <Logger name="org.apache.hadoop.conf.Configuration" level="FATAL"/>
+  </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/gobblin-runtime/src/test/resources/log4j.xml 
b/gobblin-compaction/src/test/resources/log4j2.xml
similarity index 52%
rename from gobblin-runtime/src/test/resources/log4j.xml
rename to gobblin-compaction/src/test/resources/log4j2.xml
index cdb6dce..b05c549 100644
--- a/gobblin-runtime/src/test/resources/log4j.xml
+++ b/gobblin-compaction/src/test/resources/log4j2.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,25 +16,16 @@
   ~ limitations under the License.
   -->
 
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
-  <appender name="console" class="org.apache.log4j.ConsoleAppender">
-    <param name="Target" value="System.out" />
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern"
-        value="%d{yyyy-MM-dd HH:mm:ss z} %-5p [%t] %C %L - %m%n" />
-    </layout>
-  </appender>
-
-  <root>
-    <level value="warn" />
-    <appender-ref ref="console" />
-  </root>
-
-  <!-- Swallow annoying exceptions when creating a configuration. -->
-  <logger name="org.apache.hadoop.conf.Configuration">
-    <level value="FATAL"/>
-  </logger>
-
-</log4j:configuration>
+<Configuration status="INFO">
+  <Appenders>
+    <Console name="Console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%level{length=5} %d{DEFAULT} [%thread] 
%logger{1} - %msg%n" />
+    </Console>
+  </Appenders>
+  <Loggers>
+    <Root level="info">
+      <AppenderRef ref="Console" />
+    </Root>
+    <Logger name="org.apache.hadoop.conf.Configuration" level="FATAL"/>
+  </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/gobblin-config-management/gobblin-config-client/build.gradle 
b/gobblin-config-management/gobblin-config-client/build.gradle
index 677d27a..eeea04c 100644
--- a/gobblin-config-management/gobblin-config-client/build.gradle
+++ b/gobblin-config-management/gobblin-config-client/build.gradle
@@ -24,7 +24,7 @@ dependencies {
     compile externalDependency.guava
     compile externalDependency.lombok
     compile externalDependency.slf4j
-    compile externalDependency.log4j
+    compile externalDependency.log4j2
     compile externalDependency.typesafeConfig
 
     testCompile externalDependency.testng
diff --git 
a/gobblin-config-management/gobblin-config-client/src/main/java/org/apache/gobblin/config/client/ConfigClient.java
 
b/gobblin-config-management/gobblin-config-client/src/main/java/org/apache/gobblin/config/client/ConfigClient.java
index c125129..4a407ed 100644
--- 
a/gobblin-config-management/gobblin-config-client/src/main/java/org/apache/gobblin/config/client/ConfigClient.java
+++ 
b/gobblin-config-management/gobblin-config-client/src/main/java/org/apache/gobblin/config/client/ConfigClient.java
@@ -27,7 +27,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Optional;
@@ -59,7 +60,7 @@ import 
org.apache.gobblin.config.store.api.VersionDoesNotExistException;
  *
  */
 public class ConfigClient {
-  private static final Logger LOG = Logger.getLogger(ConfigClient.class);
+  private static final Logger LOG = LogManager.getLogger(ConfigClient.class);
 
   private final VersionStabilityPolicy policy;
 
diff --git 
a/gobblin-config-management/gobblin-config-client/src/main/java/org/apache/gobblin/config/client/ConfigStoreFactoryRegister.java
 
b/gobblin-config-management/gobblin-config-client/src/main/java/org/apache/gobblin/config/client/ConfigStoreFactoryRegister.java
index dc3fe3b..3c7d857 100644
--- 
a/gobblin-config-management/gobblin-config-client/src/main/java/org/apache/gobblin/config/client/ConfigStoreFactoryRegister.java
+++ 
b/gobblin-config-management/gobblin-config-client/src/main/java/org/apache/gobblin/config/client/ConfigStoreFactoryRegister.java
@@ -23,11 +23,12 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.ServiceLoader;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 
 
 public class ConfigStoreFactoryRegister {
-  private static final Logger LOG = 
Logger.getLogger(ConfigStoreFactoryRegister.class);
+  private static final Logger LOG = 
LogManager.getLogger(ConfigStoreFactoryRegister.class);
 
   //key is the configStore scheme name, value is the ConfigStoreFactory
   @SuppressWarnings("rawtypes")
diff --git a/gobblin-config-management/gobblin-config-core/build.gradle 
b/gobblin-config-management/gobblin-config-core/build.gradle
index ec86566..65eb588 100644
--- a/gobblin-config-management/gobblin-config-core/build.gradle
+++ b/gobblin-config-management/gobblin-config-core/build.gradle
@@ -22,7 +22,7 @@ dependencies {
     compile project(':gobblin-utility')
 
     compile externalDependency.slf4j
-    compile externalDependency.log4j
+    compile externalDependency.log4j2
     compile externalDependency.lombok
     compile externalDependency.typesafeConfig
     compile externalDependency.commonsLang
diff --git a/gobblin-data-management/build.gradle 
b/gobblin-data-management/build.gradle
index 4182c3a..cbec9cd 100644
--- a/gobblin-data-management/build.gradle
+++ b/gobblin-data-management/build.gradle
@@ -31,7 +31,7 @@ dependencies {
   compile externalDependency.commonsLang3
   compile externalDependency.guava
   compile externalDependency.slf4j
-  compile externalDependency.log4j
+  compile externalDependency.log4j2
   compile externalDependency.jodaTime
   compile externalDependency.metricsCore
   compile externalDependency.mockito
diff --git 
a/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/conversion/hive/source/HiveSource.java
 
b/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/conversion/hive/source/HiveSource.java
index a0b9125..fe4f94f 100644
--- 
a/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/conversion/hive/source/HiveSource.java
+++ 
b/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/conversion/hive/source/HiveSource.java
@@ -33,8 +33,10 @@ import org.apache.hadoop.hive.metastore.IMetaStoreClient;
 import org.apache.hadoop.hive.ql.metadata.Partition;
 import org.apache.hadoop.hive.ql.metadata.Table;
 import org.apache.hadoop.hive.serde2.avro.AvroSerDe;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.config.Configurator;
 import org.joda.time.DateTime;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -464,10 +466,7 @@ public class HiveSource implements Source {
   private void silenceHiveLoggers() {
     List<String> loggers = ImmutableList.of("org.apache.hadoop.hive", 
"org.apache.hive", "hive.ql.parse");
     for (String name : loggers) {
-      Logger logger = Logger.getLogger(name);
-      if (logger != null) {
-        logger.setLevel(Level.WARN);
-      }
+      Configurator.setLevel(name, Level.WARN);
     }
   }
 
diff --git a/gobblin-docs/case-studies/Hive-Distcp.md 
b/gobblin-docs/case-studies/Hive-Distcp.md
index 3559ffb..e80a04b 100644
--- a/gobblin-docs/case-studies/Hive-Distcp.md
+++ b/gobblin-docs/case-studies/Hive-Distcp.md
@@ -11,7 +11,7 @@ This document will show an sample job config of running 
Gobblin hive distcp, and
 
 # Configure Hive Distcp Job
 
-Below is the sample job config of running Gobblin hive distcp. Gobblin job 
constructs and data flow are the same as [Gobblin 
distcp](http://gobblin.readthedocs.io/en/latest/adaptors/Gobblin-Distcp/). The 
only difference is the `gobblin.data.profile.class` and hive related properties.
+Below is the sample job config of running Gobblin hive distcp. Gobblin job 
constructs and data flow are the same as [Gobblin 
distcp](http://gobblin.readthedocs.io/en/latest/adaptors/Gobblin-Distcp/). The 
only difference is the `gobblin.dataset.profile.class` and hive related 
properties.
 
 ```
 job.name=SampleHiveDistcp
diff --git a/gobblin-docs/user-guide/Configuration-Properties-Glossary.md 
b/gobblin-docs/user-guide/Configuration-Properties-Glossary.md
index 199cea0..3cbe156 100644
--- a/gobblin-docs/user-guide/Configuration-Properties-Glossary.md
+++ b/gobblin-docs/user-guide/Configuration-Properties-Glossary.md
@@ -250,7 +250,7 @@ These properties are common properties that are used among 
different Source impl
 ### DistcpFileSplitter Properties <a name="DistcpFileSplitter-Properties"></a>
 | Name | Description | Required | Default Value |
 | --- | --- | --- | --- |
-| `gobblin.copy.split.enabled` | Will split files into block level granularity 
work units, which can be copied independently, then merged back together before 
publishing. To actually achieve splitting, the max split size property also 
needs to be set. | No | False| 
+| `gobblin.copy.split.enabled` | Will split files into block level granularity 
work units, which can be copied independently, then merged back together before 
publishing. To actually achieve splitting, the max split size property also 
needs to be set. Splitting should not be used for distcp jobs that require 
decryption/ungzipping. | No | False| 
 | `gobblin.copy.file.max.split.size` | If splitting is enabled, the split size 
(in bytes) for the block level work units is calculated based on rounding down 
the value of this property to the nearest integer multiple of the block size. 
If the value of this property is less than the block size, it gets adjusted up. 
| No | Long.MAX_VALUE
 
 ### WorkUnitBinPacker Properties <a name="WorkUnitBinPacker-Properties"></a>
diff --git a/gobblin-hive-registration/build.gradle 
b/gobblin-hive-registration/build.gradle
index 472f359..de36554 100644
--- a/gobblin-hive-registration/build.gradle
+++ b/gobblin-hive-registration/build.gradle
@@ -33,7 +33,7 @@ dependencies {
   compile externalDependency.hiveMetastore
   compile externalDependency.hiveSerDe
   compile externalDependency.libthrift
-  compile externalDependency.log4j
+  compile externalDependency.log4j2
   compile externalDependency.slf4j
   compile externalDependency.commonsIo
   compile externalDependency.commonsLang3
diff --git a/gobblin-modules/gobblin-azkaban/build.gradle 
b/gobblin-modules/gobblin-azkaban/build.gradle
index 2f1dde6..950927a 100644
--- a/gobblin-modules/gobblin-azkaban/build.gradle
+++ b/gobblin-modules/gobblin-azkaban/build.gradle
@@ -30,7 +30,7 @@ dependencies {
   compile project(":gobblin-yarn")
 
   compile externalDependency.azkaban
-  compile externalDependency.log4j
+  compile externalDependency.log4j2
   compile externalDependency.guava
   compile externalDependency.commonsLang
   compile externalDependency.httpclient
diff --git 
a/gobblin-modules/gobblin-azkaban/src/main/java/org/apache/gobblin/azkaban/AzkabanGobblinDaemon.java
 
b/gobblin-modules/gobblin-azkaban/src/main/java/org/apache/gobblin/azkaban/AzkabanGobblinDaemon.java
index b9cdace..f447316 100644
--- 
a/gobblin-modules/gobblin-azkaban/src/main/java/org/apache/gobblin/azkaban/AzkabanGobblinDaemon.java
+++ 
b/gobblin-modules/gobblin-azkaban/src/main/java/org/apache/gobblin/azkaban/AzkabanGobblinDaemon.java
@@ -19,6 +19,7 @@ package org.apache.gobblin.azkaban;
 
 import java.util.List;
 import java.util.Properties;
+import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 
 import com.google.common.collect.Lists;
@@ -35,7 +36,11 @@ import azkaban.jobExecutor.AbstractJob;
 
 public class AzkabanGobblinDaemon extends AbstractJob {
 
-  private static final Logger LOG = 
Logger.getLogger(AzkabanGobblinDaemon.class);
+  /*
+  since Azkaban constructor expects specifically logger from Log4j, we can not 
use log4j2 logger here
+  so keeping use of log4j logger, should update to Log4j2 logger when Azkaban 
lib updates it.
+   */
+  private static final Logger LOG = 
LogManager.getLogger(AzkabanGobblinDaemon.class);
 
   private SchedulerDaemon daemon;
 
diff --git 
a/gobblin-modules/gobblin-azkaban/src/main/java/org/apache/gobblin/data/management/trash/TrashCollectorJob.java
 
b/gobblin-modules/gobblin-azkaban/src/main/java/org/apache/gobblin/data/management/trash/TrashCollectorJob.java
index bae4804..cdbb630 100644
--- 
a/gobblin-modules/gobblin-azkaban/src/main/java/org/apache/gobblin/data/management/trash/TrashCollectorJob.java
+++ 
b/gobblin-modules/gobblin-azkaban/src/main/java/org/apache/gobblin/data/management/trash/TrashCollectorJob.java
@@ -25,6 +25,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.util.Tool;
 import org.apache.hadoop.util.ToolRunner;
 import org.apache.log4j.Logger;
+import org.apache.log4j.LogManager;
 
 import azkaban.jobExecutor.AbstractJob;
 import azkaban.utils.Props;
@@ -43,11 +44,11 @@ public class TrashCollectorJob extends AbstractJob 
implements Tool {
   }
 
   public TrashCollectorJob(String id) {
-    super(id, Logger.getLogger(TrashCollectorJob.class));
+    super(id, LogManager.getLogger(TrashCollectorJob.class));
   }
 
   public TrashCollectorJob(String id, Props props) throws IOException {
-    super(id, Logger.getLogger(TrashCollectorJob.class));
+    super(id, LogManager.getLogger(TrashCollectorJob.class));
     this.conf = new Configuration();
     this.trash = createTrash(props);
   }
diff --git 
a/gobblin-modules/gobblin-kafka-common/src/test/java/org/apache/gobblin/metrics/kafka/LoggingPusherTest.java
 
b/gobblin-modules/gobblin-kafka-common/src/test/java/org/apache/gobblin/metrics/kafka/LoggingPusherTest.java
index e1635ea..3b4d4f0 100644
--- 
a/gobblin-modules/gobblin-kafka-common/src/test/java/org/apache/gobblin/metrics/kafka/LoggingPusherTest.java
+++ 
b/gobblin-modules/gobblin-kafka-common/src/test/java/org/apache/gobblin/metrics/kafka/LoggingPusherTest.java
@@ -19,10 +19,14 @@ package org.apache.gobblin.metrics.kafka;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.LoggingEvent;
+//import org.apache.log4j.LogManager;
+//import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.AbstractAppender;
+import org.apache.logging.log4j.core.config.Configurator;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -38,8 +42,9 @@ public class LoggingPusherTest {
   @Test
   public void testKafkaReporter() {
 
-    TestAppender testAppender = new TestAppender();
-    Logger logger = LogManager.getLogger(LoggingPusher.class.getName());
+    TestAppender testAppender = new TestAppender("TestAppender" );
+    Logger logger = (org.apache.logging.log4j.core.Logger) 
LogManager.getLogger(LoggingPusher.class.getName());
+    Configurator.setRootLevel(Level.INFO);
     logger.addAppender(testAppender);
 
     KeyValuePusher<String, String> loggingPusher =
@@ -49,26 +54,26 @@ public class LoggingPusherTest {
     
loggingPusher.pushKeyValueMessages(ImmutableList.of(org.apache.commons.lang3.tuple.Pair.of("key",
 "message3")));
 
     Assert.assertEquals(testAppender.events.size(), 3);
-    Assert.assertEquals(testAppender.events.get(0).getRenderedMessage(), 
"Pushing to broker:topic: message1");
-    Assert.assertEquals(testAppender.events.get(1).getRenderedMessage(), 
"Pushing to broker:topic: message2");
-    Assert.assertEquals(testAppender.events.get(2).getRenderedMessage(), 
"Pushing to broker:topic: key - message3");
+    
Assert.assertEquals(testAppender.events.get(0).getMessage().getFormattedMessage(),
 "Pushing to broker:topic: message1");
+    
Assert.assertEquals(testAppender.events.get(1).getMessage().getFormattedMessage(),
 "Pushing to broker:topic: message2");
+    
Assert.assertEquals(testAppender.events.get(2).getMessage().getFormattedMessage(),
 "Pushing to broker:topic: key - message3");
 
     logger.removeAppender(testAppender);
   }
 
-  private class TestAppender extends AppenderSkeleton {
-    List<LoggingEvent> events = new ArrayList<LoggingEvent>();
+  public class TestAppender extends AbstractAppender {
 
-    public void close() {
-    }
+    private List<LogEvent> events = new ArrayList<LogEvent>();
 
-    public boolean requiresLayout() {
-      return false;
+    public TestAppender(String name) {
+      super(name, null, null);
     }
 
     @Override
-    protected void append(LoggingEvent event) {
+    public void append(LogEvent event) {
       events.add(event);
     }
   }
+
+
 }
diff --git a/gobblin-runtime/build.gradle b/gobblin-runtime/build.gradle
index b28db6b..95db102 100644
--- a/gobblin-runtime/build.gradle
+++ b/gobblin-runtime/build.gradle
@@ -36,22 +36,29 @@ compileJava {
 }
 
 dependencies {
+  compile externalDependency.commonsCli
+
   compile project(":gobblin-api")
   compile project(":gobblin-core")
   compile project(":gobblin-hive-registration")
   compile project(":gobblin-metrics-libs:gobblin-metrics")
   compile project(":gobblin-metastore")
   compile project(":gobblin-utility")
-  compile project(path: ':gobblin-rest-service:gobblin-rest-api', 
configuration: 'restClient')
-  compile project(path: ':gobblin-rest-service:gobblin-rest-api', 
configuration: 'dataTemplate')
-  compile project(":gobblin-rest-service:gobblin-rest-server")
+  compile(project(path: ':gobblin-rest-service:gobblin-rest-api', 
configuration: 'restClient')) {
+    exclude group: 'commons-cli', module: 'commons-cli'
+  }
+  compile(project(path: ':gobblin-rest-service:gobblin-rest-api', 
configuration: 'dataTemplate')) {
+    exclude group: 'commons-cli', module: 'commons-cli'
+  }
+  compile(project(":gobblin-rest-service:gobblin-rest-server")) {
+    exclude group: 'commons-cli', module: 'commons-cli'
+  }
   compile project(":gobblin-modules:google-ingestion")
 
   compile externalDependency.avro
   compile externalDependency.avroMapredH2
   compile externalDependency.calciteCore
   //compile externalDependency.calciteAvatica
-  compile externalDependency.commonsCli
   compile externalDependency.commonsConfiguration
   compile externalDependency.commonsEmail
   compile externalDependency.commonsLang
@@ -70,7 +77,7 @@ dependencies {
   compile externalDependency.jacksonMapper
   compile externalDependency.javaxInject
   compile externalDependency.jodaTime
-  compile externalDependency.log4j
+  compile externalDependency.log4j2
   compile externalDependency.lombok
   compile externalDependency.metricsCore
   compile externalDependency.metricsJvm
@@ -199,3 +206,4 @@ task pullFileConverter(type: JavaExec) {
   }
 
 }
+
diff --git 
a/gobblin-runtime/src/test/java/org/apache/gobblin/runtime/locks/JobLockTest.java
 
b/gobblin-runtime/src/test/java/org/apache/gobblin/runtime/locks/JobLockTest.java
index 8d03010..089efdf 100644
--- 
a/gobblin-runtime/src/test/java/org/apache/gobblin/runtime/locks/JobLockTest.java
+++ 
b/gobblin-runtime/src/test/java/org/apache/gobblin/runtime/locks/JobLockTest.java
@@ -67,7 +67,7 @@ public abstract class JobLockTest {
         public void run() {
           final Logger log = 
LoggerFactory.getLogger("testLocalJobLock.thread1");
           if (debugEnabled.get()) {
-            
org.apache.log4j.Logger.getLogger(log.getName()).setLevel(Level.DEBUG);
+            
org.apache.log4j.LogManager.getLogger(log.getName()).setLevel(Level.DEBUG);
           }
           try {
             stepsLock.lock();
@@ -106,7 +106,7 @@ public abstract class JobLockTest {
         public void run() {
           final Logger log = 
LoggerFactory.getLogger("testLocalJobLock.thread2");
           if (debugEnabled.get()) {
-            
org.apache.log4j.Logger.getLogger(log.getName()).setLevel(Level.DEBUG);
+            
org.apache.log4j.LogManager.getLogger(log.getName()).setLevel(Level.DEBUG);
           }
           try {
             stepsLock.lock();
diff --git 
a/gobblin-runtime/src/test/java/org/apache/gobblin/runtime/mapreduce/MRTaskFactoryTest.java
 
b/gobblin-runtime/src/test/java/org/apache/gobblin/runtime/mapreduce/MRTaskFactoryTest.java
index dc83dca..1ee5d87 100644
--- 
a/gobblin-runtime/src/test/java/org/apache/gobblin/runtime/mapreduce/MRTaskFactoryTest.java
+++ 
b/gobblin-runtime/src/test/java/org/apache/gobblin/runtime/mapreduce/MRTaskFactoryTest.java
@@ -47,11 +47,12 @@ import org.apache.hadoop.mapreduce.Mapper;
 import org.apache.hadoop.mapreduce.Reducer;
 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.appender.AbstractAppender;
+import org.apache.logging.log4j.core.config.Configurator;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
@@ -76,9 +77,9 @@ public class MRTaskFactoryTest {
     Assert.assertTrue(job2Dir.mkdir());
     writeFileWithContent(job2Dir, "file1", "word1 word2 word2");
 
-    TestAppender testAppender = new TestAppender();
-    Logger logger = LogManager.getLogger(MRTask.class.getName());
-    logger.setLevel(Level.INFO);
+    TestAppender testAppender = new TestAppender(MRTask.class.getName());
+    Logger logger = (Logger) LogManager.getLogger(MRTask.class.getName());
+    Configurator.setRootLevel(Level.INFO);
     logger.addAppender(testAppender);
 
     EmbeddedGobblin embeddedGobblin = new EmbeddedGobblin("WordCounter")
@@ -90,7 +91,7 @@ public class MRTaskFactoryTest {
     logger.removeAppender(testAppender);
 
     Assert.assertTrue(result.isSuccessful());
-    Assert.assertTrue(testAppender.events.stream().anyMatch(e -> 
e.getRenderedMessage()
+    Assert.assertTrue(testAppender.events.stream().anyMatch(e -> 
e.getMessage().getFormattedMessage()
         .startsWith("MR tracking URL http://localhost:8080/ for job 
WordCount_job1")));
 
     File output1 = new File(new File(outputSuperPath, "job1"), "part-r-00000");
@@ -208,12 +209,15 @@ public class MRTaskFactoryTest {
     }
   }
 
-  private class TestAppender extends AppenderSkeleton {
-    List<LoggingEvent> events = new ArrayList<>();
-    public void close() {}
-    public boolean requiresLayout() {return false;}
+  public class TestAppender extends AbstractAppender {
+    private List<LogEvent> events = new ArrayList<LogEvent>();
+
+    public TestAppender(String name) {
+      super(name, null, null);
+    }
+
     @Override
-    protected void append(LoggingEvent event) {
+    public void append(LogEvent event) {
       events.add(event);
     }
   }
diff --git a/gobblin-compaction/src/test/resources/log4j.xml 
b/gobblin-runtime/src/test/resources/log4j2.xml
similarity index 52%
rename from gobblin-compaction/src/test/resources/log4j.xml
rename to gobblin-runtime/src/test/resources/log4j2.xml
index b13377c..b05c549 100644
--- a/gobblin-compaction/src/test/resources/log4j.xml
+++ b/gobblin-runtime/src/test/resources/log4j2.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   ~ Licensed to the Apache Software Foundation (ASF) under one or more
   ~ contributor license agreements.  See the NOTICE file distributed with
@@ -16,25 +16,16 @@
   ~ limitations under the License.
   -->
 
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
-  <appender name="console" class="org.apache.log4j.ConsoleAppender">
-    <param name="Target" value="System.out" />
-    <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern"
-        value="%d{yyyy-MM-dd HH:mm:ss z} %-5p [%t] %C %L - %m%n" />
-    </layout>
-  </appender>
-
-  <root>
-    <level value="info" />
-    <appender-ref ref="console" />
-  </root>
-
-  <!-- Swallow annoying exceptions when creating a configuration. -->
-  <logger name="org.apache.hadoop.conf.Configuration">
-    <level value="FATAL"/>
-  </logger>
-
-</log4j:configuration>
+<Configuration status="INFO">
+  <Appenders>
+    <Console name="Console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%level{length=5} %d{DEFAULT} [%thread] 
%logger{1} - %msg%n" />
+    </Console>
+  </Appenders>
+  <Loggers>
+    <Root level="info">
+      <AppenderRef ref="Console" />
+    </Root>
+    <Logger name="org.apache.hadoop.conf.Configuration" level="FATAL"/>
+  </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/gobblin-service/build.gradle b/gobblin-service/build.gradle
index bafa6d1..d931a4a 100644
--- a/gobblin-service/build.gradle
+++ b/gobblin-service/build.gradle
@@ -61,7 +61,7 @@ dependencies {
   compile externalDependency.jodaTime
   compile externalDependency.jgrapht
   compile externalDependency.kafka08
-  compile externalDependency.log4j
+  compile externalDependency.log4j2
   compile externalDependency.lombok
   compile externalDependency.metricsCore
   compile externalDependency.metricsJvm
diff --git 
a/gobblin-test-harness/src/test/java/org/apache/gobblin/TaskErrorIntegrationTest.java
 
b/gobblin-test-harness/src/test/java/org/apache/gobblin/TaskErrorIntegrationTest.java
index 9110d20..02aebb9 100644
--- 
a/gobblin-test-harness/src/test/java/org/apache/gobblin/TaskErrorIntegrationTest.java
+++ 
b/gobblin-test-harness/src/test/java/org/apache/gobblin/TaskErrorIntegrationTest.java
@@ -32,10 +32,10 @@ import org.apache.gobblin.runtime.task.BaseAbstractTask;
 import org.apache.gobblin.runtime.task.TaskFactory;
 import org.apache.gobblin.runtime.task.TaskIFace;
 import org.apache.gobblin.runtime.task.TaskUtils;
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.AbstractAppender;
 import org.jboss.byteman.contrib.bmunit.BMNGRunner;
 import org.jboss.byteman.contrib.bmunit.BMRule;
 import org.testng.Assert;
@@ -73,8 +73,8 @@ public class TaskErrorIntegrationTest extends BMNGRunner {
   @Test
   public void extractorCreationError()
       throws Exception {
-    TestAppender testAppender = new TestAppender();
-    Logger logger = 
LogManager.getLogger(GobblinMultiTaskAttempt.class.getName() + "-noattempt");
+    TestAppender testAppender = new 
TestAppender(GobblinMultiTaskAttempt.class.getName() + "-noattempt");
+    Logger logger = (Logger) 
LogManager.getLogger(GobblinMultiTaskAttempt.class.getName() + "-noattempt");
     logger.addAppender(testAppender);
 
     Properties jobProperties =
@@ -85,8 +85,7 @@ public class TaskErrorIntegrationTest extends BMNGRunner {
 
     GobblinLocalJobLauncherUtils.invokeLocalJobLauncher(jobProperties);
 
-    Assert.assertTrue(testAppender.events.stream().anyMatch(e -> 
e.getRenderedMessage()
-        .startsWith("Could not create task for workunit")));
+    Assert.assertTrue(testAppender.events.stream().anyMatch(e -> 
e.getMessage().getFormattedMessage().startsWith("Could not create task for 
workunit")));
 
     logger.removeAppender(testAppender);
   }
@@ -102,8 +101,8 @@ public class TaskErrorIntegrationTest extends BMNGRunner {
       action = "throw new RuntimeException(\"Exception for 
testErrorDuringSubmission\")")
   public void testErrorDuringSubmission()
       throws Exception {
-    TestAppender testAppender = new TestAppender();
-    Logger logger = 
LogManager.getLogger(GobblinMultiTaskAttempt.class.getName() + "-noattempt");
+    TestAppender testAppender = new 
TestAppender(GobblinMultiTaskAttempt.class.getName() + "-noattempt");
+    Logger logger = (Logger) 
LogManager.getLogger(GobblinMultiTaskAttempt.class.getName() + "-noattempt");
     logger.addAppender(testAppender);
 
     Properties jobProperties =
@@ -114,7 +113,7 @@ public class TaskErrorIntegrationTest extends BMNGRunner {
 
     GobblinLocalJobLauncherUtils.invokeLocalJobLauncher(jobProperties);
 
-    Assert.assertTrue(testAppender.events.stream().anyMatch(e -> 
e.getRenderedMessage()
+    Assert.assertTrue(testAppender.events.stream().anyMatch(e -> 
e.getMessage().getFormattedMessage()
         .startsWith("Could not submit task for workunit")));
 
     logger.removeAppender(testAppender);
@@ -122,8 +121,8 @@ public class TaskErrorIntegrationTest extends BMNGRunner {
 
   @Test
   public void testCustomizedTaskFrameworkFailureInTaskCreation() throws 
Exception {
-    TestAppender testAppender = new TestAppender();
-    Logger logger = 
LogManager.getLogger(GobblinMultiTaskAttempt.class.getName() + "-noattempt");
+    TestAppender testAppender = new 
TestAppender(GobblinMultiTaskAttempt.class.getName() + "-noattempt");
+    Logger logger = (Logger) 
LogManager.getLogger(GobblinMultiTaskAttempt.class.getName() + "-noattempt");
     logger.addAppender(testAppender);
 
     Properties jobProperties =
@@ -131,7 +130,7 @@ public class TaskErrorIntegrationTest extends BMNGRunner {
     jobProperties.setProperty(ConfigurationKeys.SOURCE_CLASS_KEY, 
CustomizedTaskTestSource.class.getName());
 
     GobblinLocalJobLauncherUtils.invokeLocalJobLauncher(jobProperties);
-    Assert.assertTrue(testAppender.events.stream().anyMatch(e -> 
e.getRenderedMessage()
+    Assert.assertTrue(testAppender.events.stream().anyMatch(e -> 
e.getMessage().getFormattedMessage()
         .startsWith("Encountering memory error")));
 
     logger.removeAppender(testAppender);
@@ -232,12 +231,16 @@ public class TaskErrorIntegrationTest extends BMNGRunner {
     }
   }
 
-  private class TestAppender extends AppenderSkeleton {
-    List<LoggingEvent> events = new ArrayList<LoggingEvent>();
-    public void close() {}
-    public boolean requiresLayout() {return false;}
+  public class TestAppender extends AbstractAppender {
+
+    private List<LogEvent> events = new ArrayList<LogEvent>();
+
+    public TestAppender(String name) {
+      super(name, null, null);
+    }
+
     @Override
-    protected void append(LoggingEvent event) {
+    public void append(LogEvent event) {
       events.add(event);
     }
   }
diff --git a/gobblin-utility/build.gradle b/gobblin-utility/build.gradle
index 485641b..3fddeba 100644
--- a/gobblin-utility/build.gradle
+++ b/gobblin-utility/build.gradle
@@ -29,6 +29,7 @@ dependencies {
   compile externalDependency.commonsLang
   compile externalDependency.guava
   compile externalDependency.slf4j
+  compile externalDependency.log4j2
   compile externalDependency.avro
   compile externalDependency.hiveMetastore
   compile externalDependency.jodaTime
diff --git 
a/gobblin-utility/src/main/java/org/apache/gobblin/util/AvroFlattener.java 
b/gobblin-utility/src/main/java/org/apache/gobblin/util/AvroFlattener.java
index 771026c..4801ec7 100644
--- a/gobblin-utility/src/main/java/org/apache/gobblin/util/AvroFlattener.java
+++ b/gobblin-utility/src/main/java/org/apache/gobblin/util/AvroFlattener.java
@@ -25,7 +25,8 @@ import java.util.Map;
 import org.apache.avro.AvroRuntimeException;
 import org.apache.avro.Schema;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import org.codehaus.jackson.JsonNode;
 
 import com.google.common.base.Optional;
@@ -116,7 +117,7 @@ import com.google.common.collect.ImmutableList;
  */
 public class AvroFlattener {
 
-  private static final Logger LOG = Logger.getLogger(AvroFlattener.class);
+  private static final Logger LOG = LogManager.getLogger(AvroFlattener.class);
 
   private static final String FLATTENED_NAME_JOINER = "__";
   private static final String FLATTENED_SOURCE_JOINER = ".";
diff --git 
a/gobblin-utility/src/main/java/org/apache/gobblin/util/hadoop/TokenUtils.java 
b/gobblin-utility/src/main/java/org/apache/gobblin/util/hadoop/TokenUtils.java
index 8c70a13..eb3ab3d 100644
--- 
a/gobblin-utility/src/main/java/org/apache/gobblin/util/hadoop/TokenUtils.java
+++ 
b/gobblin-utility/src/main/java/org/apache/gobblin/util/hadoop/TokenUtils.java
@@ -55,7 +55,8 @@ import org.apache.hadoop.security.token.Token;
 import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
 import org.apache.hadoop.yarn.ipc.YarnRPC;
 import org.apache.hadoop.yarn.util.ConverterUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
 import org.apache.thrift.TException;
 
 
@@ -68,7 +69,7 @@ import org.apache.thrift.TException;
  */
 public class TokenUtils {
 
-  private static final Logger LOG = Logger.getLogger(TokenUtils.class);
+  private static final Logger LOG = LogManager.getLogger(TokenUtils.class);
 
   private static final String USER_TO_PROXY = "tokens.user.to.proxy";
   private static final String KEYTAB_USER = "keytab.user";
diff --git a/gobblin-yarn/build.gradle b/gobblin-yarn/build.gradle
index 4d28eec..fe37dcf 100644
--- a/gobblin-yarn/build.gradle
+++ b/gobblin-yarn/build.gradle
@@ -38,7 +38,7 @@ dependencies {
   compile externalDependency.guava
   compile externalDependency.commonsLang
   compile externalDependency.slf4j
-  compile externalDependency.log4j
+  compile externalDependency.log4j2
   compile externalDependency.lombok
   compile externalDependency.commonsCli
   compile externalDependency.gson
diff --git a/gradle/scripts/computeVersions.gradle 
b/gradle/scripts/computeVersions.gradle
index 10fdf25..1d53e5d 100644
--- a/gradle/scripts/computeVersions.gradle
+++ b/gradle/scripts/computeVersions.gradle
@@ -65,5 +65,6 @@ println "Detected Gradle version major=" + gradleVersionMajor 
+ " minor=" + grad
 ext.dropwizardMetricsVersion = '3.2.3'
 ext.findBugsVersion = '3.0.0'
 ext.googleVersion = '1.22.0'
-ext.slf4jVersion = '1.7.21'
-ext.log4jVersion = '1.2.17'
+ext.slf4jVersion = '1.7.26'
+ext.log4j2Version = '2.12.0'
+
diff --git a/gradle/scripts/dependencyDefinitions.gradle 
b/gradle/scripts/dependencyDefinitions.gradle
index 8ef4b3a..d649a61 100644
--- a/gradle/scripts/dependencyDefinitions.gradle
+++ b/gradle/scripts/dependencyDefinitions.gradle
@@ -172,12 +172,13 @@ ext.externalDependency = [
     'reactivex': 'io.reactivex.rxjava2:rxjava:2.1.0',
     "slf4j": [
         "org.slf4j:slf4j-api:" + slf4jVersion,
-        "org.slf4j:slf4j-log4j12:" + slf4jVersion,
         "org.slf4j:jcl-over-slf4j:" + slf4jVersion
     ],
-    "log4j": [
-        "log4j:log4j:" + log4jVersion,
-        "log4j:apache-log4j-extras:" + log4jVersion
+    "log4j2": [
+            "org.apache.logging.log4j:log4j-api:"+log4j2Version,
+            "org.apache.logging.log4j:log4j-core:" + log4j2Version,
+            "org.apache.logging.log4j:log4j-1.2-api:" + log4j2Version,
+            "org.apache.logging.log4j:log4j-slf4j-impl:" + log4j2Version,
     ],
     "postgresConnector": "org.postgresql:postgresql:42.1.4",
     "assertj": 'org.assertj:assertj-core:3.8.0',
diff --git a/gradle/scripts/globalDependencies.gradle 
b/gradle/scripts/globalDependencies.gradle
index 270a121..ca0ceff 100644
--- a/gradle/scripts/globalDependencies.gradle
+++ b/gradle/scripts/globalDependencies.gradle
@@ -21,6 +21,7 @@ import javax.tools.ToolProvider
 subprojects {
   plugins.withType(JavaPlugin) {
     configurations {
+
       compile
       dependencies {
         if (!project.name.contains('gobblin-elasticsearch-deps')) {
@@ -40,10 +41,23 @@ subprojects {
             force = true
           }
 
+        if (!project.name.contains('gobblin-data-management')){
+            // Apache Hive 1.2 still uses log4j, specifically WriterAppender 
that is not bridged in log4j2
+            // so we still need this transitive dependency, This can be 
removed while migrating to Hive 2.x since
+            // it has moved to log4j2 already.
+          all*.exclude group: 'log4j', module: 'log4j'
+        }
+
         // Required to add JDK's tool jar, which is required to run byteman 
tests.
         testCompile (files(((URLClassLoader) 
ToolProvider.getSystemToolClassLoader()).getURLs()))
       }
       all*.exclude group: 'org.apache.calcite', module: 'calcite-avatica' // 
replaced by org.apache.calcite.avatica:avatica-core
+
+      // To make sure there is no log4j lib to interfere with log4j2 
libraries. This is required for log4j2 migration.
+      all*.exclude group: 'org.slf4j', module: 'slf4j-log4j12'
+      all*.exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j'
+      all*.exclude group: 'log4j', module: 'apache-log4j-extras'
     }
   }
 }
+

Reply via email to