You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ol...@apache.org on 2018/09/26 17:13:57 UTC

[ambari-logsearch] branch master updated (6115ce9 -> 01162a0)

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

oleewere pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/ambari-logsearch.git.


 discard 6115ce9  AMBARI-24692. JDK support for Log Search.
     new 01162a0  AMBARI-24692. JDK support for Log Search.

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   (6115ce9)
            \
             N -- N -- N   refs/heads/master (01162a0)

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:
 ambari-logsearch-logfeeder/deps.txt | 162 ------------------------------------
 1 file changed, 162 deletions(-)
 delete mode 100644 ambari-logsearch-logfeeder/deps.txt


[ambari-logsearch] 01/01: AMBARI-24692. JDK support for Log Search.

Posted by ol...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

oleewere pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ambari-logsearch.git

commit 01162a04d70d9173ede408372bbb14eeddbc3229
Author: Oliver Szabo <ol...@gmail.com>
AuthorDate: Wed Sep 26 13:33:37 2018 +0200

    AMBARI-24692. JDK support for Log Search.
---
 README.md                                          |   4 +-
 ambari-logsearch-appender/pom.xml                  |   4 +-
 .../appender/LogsearchRollingFileAppender.java     |   2 +-
 .../apache/ambari/logsearch/appender/AppTest.java  |   2 +-
 ambari-logsearch-config-api/pom.xml                |  10 +-
 .../config/api/LogLevelFilterUpdater.java          |   6 +-
 .../config/api/LogSearchConfigFactory.java         |  16 +--
 .../config/api/LogSearchConfigLogFeeder.java       |   2 +-
 .../model/inputconfig/InputS3FileDescriptor.java   |   3 +
 .../src/test/resources/log4j.xml                   |  34 ------
 .../src/test/resources/log4j2-test.xml             |  23 ++++
 ambari-logsearch-config-json/pom.xml               |   5 -
 .../impl/InputS3FileDescriptorImpl.java            |  18 +++
 .../config/local/LogLevelFilterManagerLocal.java   |   8 +-
 .../config/local/LogSearchConfigLocalUpdater.java  |  18 +--
 .../local/LogSearchConfigLogFeederLocal.java       |   6 +-
 .../config/local/LogSearchConfigServerLocal.java   |   1 -
 .../config/solr/LogLevelFilterManagerSolr.java     |  18 +--
 .../config/solr/LogLevelFilterUpdaterSolr.java     |  16 +--
 .../config/zookeeper/LogLevelFilterManagerZK.java  |  12 +-
 .../zookeeper/LogSearchConfigLogFeederZK.java      |  21 ++--
 .../config/zookeeper/LogSearchConfigServerZK.java  |   9 +-
 .../config/zookeeper/LogSearchConfigZK.java        |  12 +-
 .../config/zookeeper/LogSearchConfigZKHelper.java  |  14 +--
 .../pom.xml                                        |  27 ++---
 .../logsearch/layout/LogSearchJsonLayout.java      | 120 ++++++++++++++++++
 .../apache/ambari/logsearch/layout/LayoutTest.java |  14 +--
 .../src/test/resources/log4j2.xml                  |  39 ++++++
 .../pom.xml                                        |  19 +--
 .../{ => container}/ContainerMetadata.java         |   2 +-
 .../{ => container}/ContainerRegistry.java         |   2 +-
 .../docker/DockerContainerRegistry.java            |  14 +--
 .../docker/DockerContainerRegistryMonitor.java     |  10 +-
 .../{ => container}/docker/DockerMetadata.java     |   4 +-
 .../docker/command/CommandExecutionHelper.java     |   2 +-
 .../docker/command/CommandResponse.java            |   2 +-
 .../docker/command/ContainerCommand.java           |   2 +-
 .../command/DockerInspectContainerCommand.java     |   8 +-
 .../docker/command/DockerListContainerCommand.java |   8 +-
 ambari-logsearch-logfeeder-plugin-api/pom.xml      |   5 +-
 .../ambari/logfeeder/plugin/common/AliasUtil.java  |  18 +--
 .../ambari/logfeeder/plugin/common/ConfigItem.java |   8 +-
 .../ambari/logfeeder/plugin/filter/Filter.java     |  10 +-
 .../ambari/logfeeder/plugin/input/Input.java       |  16 +--
 .../ambari/logfeeder/plugin/output/Output.java     |   6 +-
 ambari-logsearch-logfeeder/build.xml               |   2 +-
 ambari-logsearch-logfeeder/pom.xml                 |  83 +++++++++----
 .../org/apache/ambari/logfeeder/LogFeeder.java     |   2 +-
 .../ambari/logfeeder/common/ConfigHandler.java     |  41 ++++---
 .../common/LogFeederSolrClientFactory.java         |  12 +-
 .../ambari/logfeeder/conf/ApplicationConfig.java   |   2 +-
 .../logfeeder/conf/LogFeederSecurityConfig.java    |  10 +-
 .../apache/ambari/logfeeder/filter/FilterGrok.java |  25 ++--
 .../apache/ambari/logfeeder/filter/FilterJSON.java |   8 +-
 .../ambari/logfeeder/filter/FilterKeyValue.java    |  13 +-
 .../logfeeder/input/InputConfigUploader.java       |  12 +-
 .../apache/ambari/logfeeder/input/InputFile.java   |  70 +++++------
 .../ambari/logfeeder/input/InputManagerImpl.java   |  34 +++---
 .../apache/ambari/logfeeder/input/InputS3File.java |  25 ++--
 .../ambari/logfeeder/input/InputSimulate.java      |   8 +-
 .../apache/ambari/logfeeder/input/InputSocket.java |  20 +--
 .../logfeeder/input/file/ProcessFileHelper.java    |  35 +++---
 .../file/checkpoint/FileCheckpointManager.java     |  21 ++--
 .../file/checkpoint/util/FileCheckInHelper.java    |  11 +-
 .../util/FileCheckpointCleanupHelper.java          |  30 ++---
 .../checkpoint/util/ResumeLineNumberHelper.java    |  18 +--
 .../input/monitor/AbstractLogFileMonitor.java      |   6 +-
 .../input/monitor/CheckpointCleanupMonitor.java    |   8 +-
 .../input/monitor/DockerLogFileUpdateMonitor.java  |  22 ++--
 .../input/monitor/LogFileDetachMonitor.java        |  10 +-
 .../input/monitor/LogFilePathUpdateMonitor.java    |  12 +-
 .../ambari/logfeeder/input/reader/GZIPReader.java  |   9 +-
 .../input/reader/LogsearchReaderFactory.java       |   9 +-
 .../loglevelfilter/LogLevelFilterHandler.java      |  18 +--
 .../ambari/logfeeder/mapper/MapperAnonymize.java   |  11 +-
 .../apache/ambari/logfeeder/mapper/MapperDate.java |  15 +--
 .../ambari/logfeeder/mapper/MapperFieldCopy.java   |   7 +-
 .../ambari/logfeeder/mapper/MapperFieldName.java   |  11 +-
 .../ambari/logfeeder/mapper/MapperFieldValue.java  |  11 +-
 .../logfeeder/metrics/LogFeederAMSClient.java      |   7 +-
 .../ambari/logfeeder/metrics/MetricsManager.java   |  33 ++---
 .../ambari/logfeeder/metrics/StatsLogger.java      |   8 +-
 .../ambari/logfeeder/output/OutputDevNull.java     |   7 +-
 .../apache/ambari/logfeeder/output/OutputFile.java |  15 +--
 .../ambari/logfeeder/output/OutputHDFSFile.java    |  37 +++---
 .../ambari/logfeeder/output/OutputKafka.java       |  39 +++---
 .../ambari/logfeeder/output/OutputLineFilter.java  |   9 +-
 .../ambari/logfeeder/output/OutputManagerImpl.java |  25 ++--
 .../ambari/logfeeder/output/OutputS3File.java      |  16 +--
 .../apache/ambari/logfeeder/output/OutputSolr.java |  53 ++++----
 .../logfeeder/output/S3OutputConfiguration.java    |  10 +-
 .../apache/ambari/logfeeder/output/S3Uploader.java |  40 +++---
 .../ambari/logfeeder/output/spool/LogSpooler.java  |  23 ++--
 .../org/apache/ambari/logfeeder/util/AWSUtil.java  |  42 -------
 .../ambari/logfeeder/util/CompressionUtil.java     |  11 +-
 .../org/apache/ambari/logfeeder/util/DateUtil.java |  13 +-
 .../org/apache/ambari/logfeeder/util/FileUtil.java |  22 ++--
 .../ambari/logfeeder/util/LogFeederHDFSUtil.java   |  13 +-
 .../ambari/logfeeder/util/LogFeederUtil.java       |  25 ++--
 .../org/apache/ambari/logfeeder/util/S3Util.java   | 119 ++++++++----------
 .../resources/log-samples/logs/service_sample.txt  |   3 -
 .../src/main/resources/log4j.xml                   |  67 -----------
 .../src/main/resources/log4j2.yml                  |  74 ++++++++++++
 .../src/main/scripts/logfeeder.sh                  |   2 +-
 .../ambari/logfeeder/filter/FilterGrokTest.java    |  10 --
 .../ambari/logfeeder/filter/FilterJSONTest.java    |  10 --
 .../logfeeder/filter/FilterKeyValueTest.java       |   9 --
 .../ambari/logfeeder/input/InputFileTest.java      |   6 -
 .../logfeeder/mapper/MapperAnonymizeTest.java      |   5 -
 .../ambari/logfeeder/mapper/MapperDateTest.java    |   8 --
 .../logfeeder/mapper/MapperFieldCopyTest.java      |   4 -
 .../logfeeder/mapper/MapperFieldNameTest.java      |   4 -
 .../logfeeder/mapper/MapperFieldValueTest.java     |   5 -
 .../ambari/logfeeder/output/OutputKafkaTest.java   |   4 -
 .../ambari/logfeeder/output/OutputS3FileTest.java  |   3 +
 .../ambari/logfeeder/output/S3UploaderTest.java    |  20 ++-
 .../logfeeder/output/spool/LogSpoolerTest.java     |   8 ++
 .../apache/ambari/logfeeder/util/S3UtilTest.java   |   4 +
 .../src/test/resources/log4j.xml                   |  53 --------
 .../src/test/resources/log4j2-test.xml             |  23 ++++
 ambari-logsearch-server/build.xml                  |   2 +-
 ambari-logsearch-server/pom.xml                    | 134 ++++++++++++++++-----
 .../org/apache/ambari/logsearch/LogSearch.java     |  11 +-
 .../logsearch/auth/filter/AbstractJWTFilter.java   |  18 +--
 .../ambari/logsearch/common/ApiDocStorage.java     |  10 +-
 .../logsearch/common/ExternalServerClient.java     |   7 +-
 .../ambari/logsearch/conf/LogSearchHttpConfig.java |  18 +++
 .../conf/LogSearchJerseyResourceConfig.java        |   3 +-
 .../logsearch/conf/LogSearchServletConfig.java     |  41 ++-----
 .../logsearch/conf/LogSearchSessionConfig.java     |  46 +++++++
 .../conf/LogSearchWebServerCustomizer.java         |  67 +++++++++++
 .../ambari/logsearch/conf/SecurityConfig.java      |   9 +-
 .../apache/ambari/logsearch/conf/SolrConfig.java   |   3 -
 .../LogLevelManagerFilterConfigurer.java           |   6 +-
 .../configurer/LogSearchConfigConfigurer.java      |   6 +-
 .../configurer/SolrAuditAliasConfigurer.java       |  28 ++---
 .../configurer/SolrCollectionConfigurer.java       |  32 ++---
 .../ambari/logsearch/configurer/SslConfigurer.java |  26 ++--
 .../apache/ambari/logsearch/dao/AuditSolrDao.java  |   7 +-
 .../ambari/logsearch/dao/EventHistorySolrDao.java  |   9 +-
 .../org/apache/ambari/logsearch/dao/RoleDao.java   |  18 +--
 .../ambari/logsearch/dao/ServiceLogsSolrDao.java   |   9 +-
 .../apache/ambari/logsearch/dao/SolrDaoBase.java   |  19 +--
 .../ambari/logsearch/dao/SolrSchemaFieldDao.java   |  20 +--
 .../org/apache/ambari/logsearch/dao/UserDao.java   |  18 ++-
 .../ambari/logsearch/handler/ACLHandler.java       |  14 +--
 .../handler/AbstractSolrConfigHandler.java         |   8 +-
 .../logsearch/handler/CreateCollectionHandler.java |  36 +++---
 .../logsearch/handler/ListCollectionHandler.java   |  10 +-
 .../logsearch/handler/ReloadCollectionHandler.java |  10 +-
 .../handler/UploadConfigurationHandler.java        |  18 +--
 .../ambari/logsearch/manager/AuditLogsManager.java |   5 +-
 .../logsearch/manager/EventHistoryManager.java     |   8 +-
 .../ambari/logsearch/manager/ManagerBase.java      |   5 +-
 .../logsearch/manager/ServiceLogsManager.java      |   5 +-
 .../ambari/logsearch/manager/SessionManager.java   |   5 +-
 .../logsearch/manager/ShipperConfigManager.java    |   5 +-
 .../model/common/LSServerInputS3File.java          |  12 ++
 .../rest/error/GeneralExceptionMapper.java         |   6 +-
 .../ambari/logsearch/service/UserService.java      |   6 +-
 .../apache/ambari/logsearch/util/CommonUtil.java   |  41 -------
 .../org/apache/ambari/logsearch/util/FileUtil.java |   5 +-
 .../org/apache/ambari/logsearch/util/JSONUtil.java |   5 +-
 .../authenticate/LogsearchAuthFailureHandler.java  |   5 +-
 .../LogsearchLogoutSuccessHandler.java             |   5 +-
 .../filters/LogsearchAuthenticationEntryPoint.java |   6 +-
 .../logsearch/web/filters/LogsearchFilter.java     |   8 +-
 .../filters/LogsearchKRBAuthenticationFilter.java  |   7 +-
 .../logsearch/web/filters/LogsearchKrbFilter.java  |   6 +-
 .../LogsearchSecurityContextFormationFilter.java   |  11 +-
 .../web/filters/LogsearchTrustedProxyFilter.java   |  12 +-
 ...searchUsernamePasswordAuthenticationFilter.java |   5 +-
 .../logsearch/web/filters/NoServletContext.java    |  41 ++++++-
 .../web/listener/LogSearchSessionListener.java     |  10 +-
 .../security/LogsearchAuthenticationProvider.java  |  12 +-
 ...searchExternalServerAuthenticationProvider.java |  11 +-
 .../LogsearchFileAuthenticationProvider.java       |  22 +++-
 .../LogsearchLdapAuthenticationProvider.java       |   8 +-
 .../LogsearchSimpleAuthenticationProvider.java     |   5 +-
 .../src/main/resources/log4j.xml                   |  86 -------------
 .../src/main/resources/log4j2.yml                  | 106 ++++++++++++++++
 .../src/main/scripts/logsearch.sh                  |   2 +-
 .../converter/AuditLogRequestConverterTest.java    |   4 +-
 .../AuditServiceLoadRequestQueryConverterTest.java |   4 +-
 .../BaseServiceLogRequestQueryConverterTest.java   |   4 +-
 .../FieldAuditLogRequestQueryConverterTest.java    |   4 +-
 .../ServiceLogAnyGraphRequestConverterTest.java    |   4 +-
 ...LogComponentLevelRequestQueryConverterTest.java |   6 +-
 ...LogComponentRequestFacetQueryConverterTest.java |   6 +-
 ...viceLogLevelCountRequestQueryConverterTest.java |   4 +-
 ...rviceLogTreeRequestFacetQueryConverterTest.java |   6 +-
 ...rviceLogTruncatedRequestQueryConverterTest.java |   4 +-
 .../TopFieldAuditLogRequestQueryConverterTest.java |   4 +-
 .../UserExportRequestQueryConverterTest.java       |   4 +-
 .../LogsearchAuthenticationProviderTest.java       |  22 ++--
 .../LogsearchFileAuthenticationProviderTest.java   |  38 +++---
 .../src/test/resources/log4j2-test.xml             |  23 ++++
 docker/Dockerfile                                  |  11 +-
 docker/bin/start.sh                                |   2 +-
 docker/test-config/logfeeder/log4j2.yml            |  50 ++++++++
 docker/test-config/logsearch/log4j2.yml            |  50 ++++++++
 docker/test-config/logsearch/logsearch.properties  |   2 +-
 pom.xml                                            |  92 +++++++++++---
 203 files changed, 2065 insertions(+), 1538 deletions(-)

diff --git a/README.md b/README.md
index dbddd7e..992f49f 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,9 @@
 
 Log aggregation, analysis, and visualization for Ambari managed (and any other) services.
 
-## Setup local environment with docker
+## Development
+
+Requires JDK 11
 
 ### Prerequisites
 
diff --git a/ambari-logsearch-appender/pom.xml b/ambari-logsearch-appender/pom.xml
index 65a68a9..f83ada8 100644
--- a/ambari-logsearch-appender/pom.xml
+++ b/ambari-logsearch-appender/pom.xml
@@ -32,8 +32,8 @@
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <maven.compiler.source>1.7</maven.compiler.source>
-    <maven.compiler.target>1.7</maven.compiler.target>
+    <maven.compiler.source>11</maven.compiler.source>
+    <maven.compiler.target>11</maven.compiler.target>
     <jar.finalName>ambari-logsearch-appender</jar.finalName>
   </properties>
 
diff --git a/ambari-logsearch-appender/src/main/java/org/apache/ambari/logsearch/appender/LogsearchRollingFileAppender.java b/ambari-logsearch-appender/src/main/java/org/apache/ambari/logsearch/appender/LogsearchRollingFileAppender.java
index 6a93db5..6fb877e 100644
--- a/ambari-logsearch-appender/src/main/java/org/apache/ambari/logsearch/appender/LogsearchRollingFileAppender.java
+++ b/ambari-logsearch-appender/src/main/java/org/apache/ambari/logsearch/appender/LogsearchRollingFileAppender.java
@@ -25,7 +25,7 @@ import org.apache.log4j.RollingFileAppender;
 import org.apache.log4j.spi.LoggingEvent;
 
 public class LogsearchRollingFileAppender extends RollingFileAppender {
-  private static Logger logger = Logger.getLogger(LogsearchRollingFileAppender.class);
+  private static final Logger logger = Logger.getLogger(LogsearchRollingFileAppender.class);
 
   public LogsearchRollingFileAppender() {
     logger.trace("Initializing LogsearchRollingFileAppender........... ");
diff --git a/ambari-logsearch-appender/src/test/java/org/apache/ambari/logsearch/appender/AppTest.java b/ambari-logsearch-appender/src/test/java/org/apache/ambari/logsearch/appender/AppTest.java
index 8152787..5369926 100644
--- a/ambari-logsearch-appender/src/test/java/org/apache/ambari/logsearch/appender/AppTest.java
+++ b/ambari-logsearch-appender/src/test/java/org/apache/ambari/logsearch/appender/AppTest.java
@@ -22,7 +22,7 @@ package org.apache.ambari.logsearch.appender;
 import org.apache.log4j.Logger;
 
 public class AppTest {
-  private static Logger logger = Logger.getLogger(AppTest.class);
+  private static final Logger logger = Logger.getLogger(AppTest.class);
 
   public static void main(String[] args) {
 
diff --git a/ambari-logsearch-config-api/pom.xml b/ambari-logsearch-config-api/pom.xml
index 59286a6..add7ddf 100644
--- a/ambari-logsearch-config-api/pom.xml
+++ b/ambari-logsearch-config-api/pom.xml
@@ -41,9 +41,13 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <version>1.7.20</version>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
     </dependency>
   </dependencies>
 </project>
diff --git a/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogLevelFilterUpdater.java b/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogLevelFilterUpdater.java
index 425cdc8..83cbe81 100644
--- a/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogLevelFilterUpdater.java
+++ b/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogLevelFilterUpdater.java
@@ -18,15 +18,15 @@
  */
 package org.apache.ambari.logsearch.config.api;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * Used for connect a remote source periodically to get / set log level filters.
  */
 public abstract class LogLevelFilterUpdater extends Thread {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogLevelFilterUpdater.class);
+  private static final Logger LOG = LogManager.getLogger(LogLevelFilterUpdater.class);
 
   private final LogLevelFilterMonitor logLevelFilterMonitor;
   private final int interval;
diff --git a/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogSearchConfigFactory.java b/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogSearchConfigFactory.java
index 8b2c17d..bde5ef1 100644
--- a/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogSearchConfigFactory.java
+++ b/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogSearchConfigFactory.java
@@ -19,20 +19,20 @@
 
 package org.apache.ambari.logsearch.config.api;
 
-import java.util.Map;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.util.Map;
 
 /**
  * Factory class for LogSearchConfigServer and LogSearchConfigLogFeeder.
  */
 public class LogSearchConfigFactory {
-  private static final Logger LOG = LoggerFactory.getLogger(LogSearchConfigFactory.class);
+  private static final Logger logger = LogManager.getLogger(LogSearchConfigFactory.class);
 
   /**
    * Creates a Log Search Configuration instance for the Log Search Server that implements
-   * {@link org.apache.ambari.logsearch.config.api.LogSearchConfigServer}.
+   * {@link LogSearchConfigServer}.
    * 
    * @param properties The properties of the component for which the configuration is created. If the properties contain the
    *                  "logsearch.config.class" entry than the class defined there would be used instead of the default class.
@@ -63,7 +63,7 @@ public class LogSearchConfigFactory {
       }
       return logSearchConfig;
     } catch (Exception e) {
-      LOG.error("Could not initialize logsearch config.", e);
+      logger.error("Could not initialize logsearch config.", e);
       throw e;
     }
   }
@@ -102,14 +102,14 @@ public class LogSearchConfigFactory {
       }
       return logSearchConfig;
     } catch (Exception e) {
-      LOG.error("Could not initialize logsearch config.", e);
+      logger.error("Could not initialize logsearch config.", e);
       throw e;
     }
   }
 
   /**
    * Creates a Log Search Configuration instance for the Log Search Server that implements
-   * {@link org.apache.ambari.logsearch.config.api.LogSearchConfigServer}.
+   * {@link LogSearchConfigServer}.
    *
    * @param properties The properties of the component for which the configuration is created. If the properties contain the
    *                  "logsearch.config.class" entry than the class defined there would be used instead of the default class.
diff --git a/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogSearchConfigLogFeeder.java b/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogSearchConfigLogFeeder.java
index af4408a..b3bab77 100644
--- a/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogSearchConfigLogFeeder.java
+++ b/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/LogSearchConfigLogFeeder.java
@@ -52,5 +52,5 @@ public interface LogSearchConfigLogFeeder extends LogSearchConfig {
    * @throws Exception
    */
   void monitorInputConfigChanges(InputConfigMonitor inputConfigMonitor, LogLevelFilterMonitor logLevelFilterMonitor,
-      String clusterName) throws Exception;
+                                 String clusterName) throws Exception;
 }
diff --git a/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/model/inputconfig/InputS3FileDescriptor.java b/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/model/inputconfig/InputS3FileDescriptor.java
index b075629..9886793 100644
--- a/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/model/inputconfig/InputS3FileDescriptor.java
+++ b/ambari-logsearch-config-api/src/main/java/org/apache/ambari/logsearch/config/api/model/inputconfig/InputS3FileDescriptor.java
@@ -20,6 +20,9 @@
 package org.apache.ambari.logsearch.config.api.model.inputconfig;
 
 public interface InputS3FileDescriptor extends InputFileBaseDescriptor {
+
+  String getS3Endpoint();
+
   String getS3AccessKey();
 
   String getS3SecretKey();
diff --git a/ambari-logsearch-config-api/src/test/resources/log4j.xml b/ambari-logsearch-config-api/src/test/resources/log4j.xml
deleted file mode 100644
index 6d968f9..0000000
--- a/ambari-logsearch-config-api/src/test/resources/log4j.xml
+++ /dev/null
@@ -1,34 +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 [%t] %-5p %C{6} (%F:%L) - %m%n" />
-      <!-- <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/> -->
-    </layout>
-  </appender>
-
-  <root>
-    <priority value="warn" />
-    <appender-ref ref="console" />
-  </root>
-
-</log4j:configuration>
diff --git a/ambari-logsearch-config-api/src/test/resources/log4j2-test.xml b/ambari-logsearch-config-api/src/test/resources/log4j2-test.xml
new file mode 100644
index 0000000..a8694ce
--- /dev/null
+++ b/ambari-logsearch-config-api/src/test/resources/log4j2-test.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<Configuration>
+  <Loggers>
+    <Root level="fatal">
+    </Root>
+  </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/ambari-logsearch-config-json/pom.xml b/ambari-logsearch-config-json/pom.xml
index cdccbba..9b33fe0 100644
--- a/ambari-logsearch-config-json/pom.xml
+++ b/ambari-logsearch-config-json/pom.xml
@@ -51,11 +51,6 @@
       <version>3.2.2</version>
     </dependency>
     <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <version>1.7.20</version>
-    </dependency>
-    <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
       <version>2.6.2</version>
diff --git a/ambari-logsearch-config-json/src/main/java/org/apache/ambari/logsearch/config/json/model/inputconfig/impl/InputS3FileDescriptorImpl.java b/ambari-logsearch-config-json/src/main/java/org/apache/ambari/logsearch/config/json/model/inputconfig/impl/InputS3FileDescriptorImpl.java
index 527dae8..5d2c19c 100644
--- a/ambari-logsearch-config-json/src/main/java/org/apache/ambari/logsearch/config/json/model/inputconfig/impl/InputS3FileDescriptorImpl.java
+++ b/ambari-logsearch-config-json/src/main/java/org/apache/ambari/logsearch/config/json/model/inputconfig/impl/InputS3FileDescriptorImpl.java
@@ -49,6 +49,15 @@ public class InputS3FileDescriptorImpl extends InputFileBaseDescriptorImpl imple
   @SerializedName("s3_secret_key")
   private String s3SecretKey;
 
+  @ShipperConfigElementDescription(
+    path = "/input/[]/s3_endpoint",
+    type = "string",
+    description = "Endpoint URL for S3."
+  )
+  @Expose
+  @SerializedName("s3_endpoint")
+  private String s3Endpoint;
+
   @Override
   public String getS3AccessKey() {
     return s3AccessKey;
@@ -66,4 +75,13 @@ public class InputS3FileDescriptorImpl extends InputFileBaseDescriptorImpl imple
   public void setS3SecretKey(String s3SecretKey) {
     this.s3SecretKey = s3SecretKey;
   }
+
+  @Override
+  public String getS3Endpoint() {
+    return s3Endpoint;
+  }
+
+  public void setS3Endpoint(String s3Endpoint) {
+    this.s3Endpoint = s3Endpoint;
+  }
 }
diff --git a/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogLevelFilterManagerLocal.java b/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogLevelFilterManagerLocal.java
index 5ca210d..810e89a 100644
--- a/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogLevelFilterManagerLocal.java
+++ b/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogLevelFilterManagerLocal.java
@@ -22,8 +22,8 @@ import com.google.gson.Gson;
 import org.apache.ambari.logsearch.config.api.LogLevelFilterManager;
 import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilter;
 import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilterMap;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.io.FilenameFilter;
@@ -40,7 +40,7 @@ import java.util.TreeMap;
  */
 public class LogLevelFilterManagerLocal implements LogLevelFilterManager {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogLevelFilterManagerLocal.class);
+  private static final Logger logger = LogManager.getLogger(LogLevelFilterManagerLocal.class);
 
   private final String configDir;
   private final Gson gson;
@@ -75,7 +75,7 @@ public class LogLevelFilterManagerLocal implements LogLevelFilterManager {
         if (!logLevelFilterJson.equals(currentLogLevelFilterJson)) {
           byte[] data = logLevelFilterJson.getBytes(StandardCharsets.UTF_8);
           Files.write(filePath, data);
-          LOG.info("Set log level filter for the log " + e.getKey() + " for cluster " + clusterName);
+          logger.info("Set log level filter for the log " + e.getKey() + " for cluster " + clusterName);
         }
       }
     }
diff --git a/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigLocalUpdater.java b/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigLocalUpdater.java
index 76379ec..3f6aec8 100644
--- a/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigLocalUpdater.java
+++ b/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigLocalUpdater.java
@@ -22,11 +22,11 @@ import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParser;
 import org.apache.ambari.logsearch.config.api.InputConfigMonitor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.ambari.logsearch.config.json.JsonHelper;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputConfigGson;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputConfigImpl;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.io.IOException;
@@ -52,7 +52,7 @@ import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
  */
 public class LogSearchConfigLocalUpdater implements Runnable {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogSearchConfigLocalUpdater.class);
+  private static final Logger logger = LogManager.getLogger(LogSearchConfigLocalUpdater.class);
 
   private final Path path;
   private final WatchService watchService;
@@ -80,7 +80,7 @@ public class LogSearchConfigLocalUpdater implements Runnable {
     try {
       register(this.path, keys, watchService);
     } catch (IOException e) {
-      LOG.error("{}", e);
+      logger.error("{}", e);
       throw new RuntimeException(e);
     }
     while (!Thread.interrupted()) {
@@ -105,13 +105,13 @@ public class LogSearchConfigLocalUpdater implements Runnable {
             String serviceName = m.group(1);
             try {
               if (kind == ENTRY_CREATE) {
-                LOG.info("New input config entry found: {}", absPath);
+                logger.info("New input config entry found: {}", absPath);
                 String inputConfig = new String(Files.readAllBytes(monitoredInput));
                 JsonElement inputConfigJson = JsonHelper.mergeGlobalConfigWithInputConfig(parser, inputConfig, globalConfigNode);
                 inputConfigMonitor.loadInputConfigs(serviceName, InputConfigGson.gson.fromJson(inputConfigJson, InputConfigImpl.class));
                 inputFileContentsMap.put(absPath, inputConfig);
               } else if (kind == ENTRY_MODIFY) {
-                LOG.info("Input config entry modified: {}", absPath);
+                logger.info("Input config entry modified: {}", absPath);
                 if (inputFileContentsMap.containsKey(absPath)) {
                   String oldContent = inputFileContentsMap.get(absPath);
                   String inputConfig = new String(Files.readAllBytes(monitoredInput));
@@ -124,20 +124,20 @@ public class LogSearchConfigLocalUpdater implements Runnable {
                   }
                 }
               } else if (kind == ENTRY_DELETE) {
-                LOG.info("Input config deleted: {}", absPath);
+                logger.info("Input config deleted: {}", absPath);
                 if (inputFileContentsMap.containsKey(absPath)) {
                   inputConfigMonitor.removeInputs(serviceName);
                   inputFileContentsMap.remove(absPath);
                 }
               }
             } catch (Exception e) {
-              LOG.error("{}", e);
+              logger.error("{}", e);
               break;
             }
           }
         }
         if (!key.reset()) {
-          LOG.info("{} is invalid", key);
+          logger.info("{} is invalid", key);
           keys.remove(key);
           if (keys.isEmpty()) {
             break;
diff --git a/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigLogFeederLocal.java b/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigLogFeederLocal.java
index 2a02cb5..f6cb519 100644
--- a/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigLogFeederLocal.java
+++ b/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigLogFeederLocal.java
@@ -24,11 +24,11 @@ import com.google.gson.JsonParser;
 import org.apache.ambari.logsearch.config.api.InputConfigMonitor;
 import org.apache.ambari.logsearch.config.api.LogLevelFilterMonitor;
 import org.apache.ambari.logsearch.config.api.LogSearchConfigLogFeeder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.ambari.logsearch.config.json.JsonHelper;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputConfigGson;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputConfigImpl;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.io.IOException;
@@ -48,7 +48,7 @@ import java.util.regex.Matcher;
  */
 public class LogSearchConfigLogFeederLocal extends LogSearchConfigLocal implements LogSearchConfigLogFeeder {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogSearchConfigLogFeederLocal.class);
+  private static final Logger logger = LogManager.getLogger(LogSearchConfigLogFeederLocal.class);
 
   private String configDir;
 
diff --git a/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigServerLocal.java b/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigServerLocal.java
index 13aacd0..3f814ac 100644
--- a/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigServerLocal.java
+++ b/ambari-logsearch-config-local/src/main/java/org/apache/ambari/logsearch/config/local/LogSearchConfigServerLocal.java
@@ -20,7 +20,6 @@ package org.apache.ambari.logsearch.config.local;
 
 import org.apache.ambari.logsearch.config.api.LogSearchConfigServer;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.InputConfig;
-import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilter;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/ambari-logsearch-config-solr/src/main/java/org/apache/ambari/logsearch/config/solr/LogLevelFilterManagerSolr.java b/ambari-logsearch-config-solr/src/main/java/org/apache/ambari/logsearch/config/solr/LogLevelFilterManagerSolr.java
index 0eabead..90005fa 100644
--- a/ambari-logsearch-config-solr/src/main/java/org/apache/ambari/logsearch/config/solr/LogLevelFilterManagerSolr.java
+++ b/ambari-logsearch-config-solr/src/main/java/org/apache/ambari/logsearch/config/solr/LogLevelFilterManagerSolr.java
@@ -23,6 +23,8 @@ import com.google.gson.GsonBuilder;
 import org.apache.ambari.logsearch.config.api.LogLevelFilterManager;
 import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilter;
 import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilterMap;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.response.QueryResponse;
@@ -30,8 +32,6 @@ import org.apache.solr.client.solrj.response.SolrPingResponse;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrDocumentList;
 import org.apache.solr.common.SolrInputDocument;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.Map;
 import java.util.TreeMap;
@@ -41,7 +41,7 @@ import java.util.TreeMap;
  */
 public class LogLevelFilterManagerSolr implements LogLevelFilterManager {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogLevelFilterManagerSolr.class);
+  private static final Logger logger = LogManager.getLogger(LogLevelFilterManagerSolr.class);
 
   private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS";
   private final SolrClient solrClient;
@@ -66,7 +66,7 @@ public class LogLevelFilterManagerSolr implements LogLevelFilterManager {
     doc.addField("rowtype", "log_level_filter");
     doc.addField("jsons", gson.toJson(filter));
     doc.addField("username", "default");
-    LOG.debug("Creating log level filter - logid: {}, cluster: {}", logId, clusterName);
+    logger.debug("Creating log level filter - logid: {}, cluster: {}", logId, clusterName);
     solrClient.add(doc);
   }
 
@@ -130,7 +130,7 @@ public class LogLevelFilterManagerSolr implements LogLevelFilterManager {
         }
       }
     } catch (Exception e) {
-      LOG.error("Error during getting log level filters: {}", e.getMessage());
+      logger.error("Error during getting log level filters: {}", e.getMessage());
     }
     logLevelFilterMap.setFilter(logLevelFilterTreeMap);
     return logLevelFilterMap;
@@ -152,20 +152,20 @@ public class LogLevelFilterManagerSolr implements LogLevelFilterManager {
     boolean solrAvailable = false;
     while (!solrAvailable) {
       try {
-        LOG.debug("Start solr ping for log level filter collection");
+        logger.debug("Start solr ping for log level filter collection");
         SolrPingResponse pingResponse = solrClient.ping();
         if (pingResponse.getStatus() == 0) {
           solrAvailable = true;
           break;
         }
       } catch (Exception e) {
-        LOG.error("{}", e);
+        logger.error("{}", e);
       }
-      LOG.info("Solr (collection for log level filters) is not available yet. Sleeping 10 sec. Retrying...");
+      logger.info("Solr (collection for log level filters) is not available yet. Sleeping 10 sec. Retrying...");
       try {
         Thread.sleep(10000);
       } catch (InterruptedException e) {
-        LOG.error("{}", e);
+        logger.error("{}", e);
       }
     }
   }
diff --git a/ambari-logsearch-config-solr/src/main/java/org/apache/ambari/logsearch/config/solr/LogLevelFilterUpdaterSolr.java b/ambari-logsearch-config-solr/src/main/java/org/apache/ambari/logsearch/config/solr/LogLevelFilterUpdaterSolr.java
index 534a60c..9e2c2f3 100644
--- a/ambari-logsearch-config-solr/src/main/java/org/apache/ambari/logsearch/config/solr/LogLevelFilterUpdaterSolr.java
+++ b/ambari-logsearch-config-solr/src/main/java/org/apache/ambari/logsearch/config/solr/LogLevelFilterUpdaterSolr.java
@@ -23,8 +23,8 @@ import org.apache.ambari.logsearch.config.api.LogLevelFilterMonitor;
 import org.apache.ambari.logsearch.config.api.LogLevelFilterUpdater;
 import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilter;
 import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilterMap;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -34,7 +34,7 @@ import java.util.concurrent.ConcurrentHashMap;
  */
 public class LogLevelFilterUpdaterSolr extends LogLevelFilterUpdater {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogLevelFilterUpdaterSolr.class);
+  private static final Logger logger = LogManager.getLogger(LogLevelFilterUpdaterSolr.class);
 
   private final LogLevelFilterManagerSolr logLevelFilterManagerSolr;
   private final String cluster;
@@ -49,7 +49,7 @@ public class LogLevelFilterUpdaterSolr extends LogLevelFilterUpdater {
   @Override
   protected void checkFilters(LogLevelFilterMonitor logLevelFilterMonitor) {
     try {
-      LOG.debug("Start checking log level filters in Solr ...");
+      logger.debug("Start checking log level filters in Solr ...");
       LogLevelFilterMap logLevelFilterMap = logLevelFilterManagerSolr.getLogLevelFilters(cluster);
       Map<String, LogLevelFilter> filters = logLevelFilterMap.getFilter();
       Map<String, LogLevelFilter> copiedStoredFilters = new ConcurrentHashMap<>(logLevelFilterMonitor.getLogLevelFilters());
@@ -59,22 +59,22 @@ public class LogLevelFilterUpdaterSolr extends LogLevelFilterUpdater {
           String remoteValue = gson.toJson(logFilterEntry.getValue());
           String storedValue = gson.toJson(copiedStoredFilters.get(logFilterEntry.getKey()));
           if (!storedValue.equals(remoteValue)) {
-            LOG.info("Log level filter updated for {}", logFilterEntry.getKey());
+            logger.info("Log level filter updated for {}", logFilterEntry.getKey());
             logLevelFilterMonitor.setLogLevelFilter(logFilterEntry.getKey(), logFilterEntry.getValue());
           }
         } else {
-          LOG.info("New log level filter registered: {}", logFilterEntry.getKey());
+          logger.info("New log level filter registered: {}", logFilterEntry.getKey());
           logLevelFilterMonitor.setLogLevelFilter(logFilterEntry.getKey(), logFilterEntry.getValue());
         }
       }
       for (Map.Entry<String, LogLevelFilter> storedLogFilterEntry : copiedStoredFilters.entrySet()) {
         if (!filters.containsKey(storedLogFilterEntry.getKey())) {
-          LOG.info("Removing log level filter: {}", storedLogFilterEntry.getKey());
+          logger.info("Removing log level filter: {}", storedLogFilterEntry.getKey());
           logLevelFilterMonitor.removeLogLevelFilter(storedLogFilterEntry.getKey());
         }
       }
     } catch (Exception e) {
-      LOG.error("Error during filter Solr check: {}",e);
+      logger.error("Error during filter Solr check: {}",e);
     }
   }
 }
diff --git a/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogLevelFilterManagerZK.java b/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogLevelFilterManagerZK.java
index e62ec1b..81c3f23 100644
--- a/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogLevelFilterManagerZK.java
+++ b/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogLevelFilterManagerZK.java
@@ -25,10 +25,10 @@ import org.apache.ambari.logsearch.config.api.model.loglevelfilter.LogLevelFilte
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.recipes.cache.ChildData;
 import org.apache.curator.framework.recipes.cache.TreeCache;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.data.ACL;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.List;
 import java.util.Map;
@@ -36,7 +36,7 @@ import java.util.TreeMap;
 
 public class LogLevelFilterManagerZK implements LogLevelFilterManager {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogLevelFilterManagerZK.class);
+  private static final Logger logger = LogManager.getLogger(LogLevelFilterManagerZK.class);
 
   private final CuratorFramework client;
   private final TreeCache serverCache;
@@ -72,9 +72,9 @@ public class LogLevelFilterManagerZK implements LogLevelFilterManager {
     String logLevelFilterJson = gson.toJson(filter);
     try {
       client.create().creatingParentContainersIfNeeded().withACL(aclList).forPath(nodePath, logLevelFilterJson.getBytes());
-      LOG.info("Uploaded log level filter for the log " + logId + " for cluster " + clusterName);
+      logger.info("Uploaded log level filter for the log " + logId + " for cluster " + clusterName);
     } catch (KeeperException.NodeExistsException e) {
-      LOG.debug("Did not upload log level filters for log " + logId + " as it was already uploaded by another Log Feeder");
+      logger.debug("Did not upload log level filters for log " + logId + " as it was already uploaded by another Log Feeder");
     }
   }
 
@@ -86,7 +86,7 @@ public class LogLevelFilterManagerZK implements LogLevelFilterManager {
       String currentLogLevelFilterJson = new String(serverCache.getCurrentData(nodePath).getData());
       if (!logLevelFilterJson.equals(currentLogLevelFilterJson)) {
         client.setData().forPath(nodePath, logLevelFilterJson.getBytes());
-        LOG.info("Set log level filter for the log " + e.getKey() + " for cluster " + clusterName);
+        logger.info("Set log level filter for the log " + e.getKey() + " for cluster " + clusterName);
       }
     }
   }
diff --git a/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigLogFeederZK.java b/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigLogFeederZK.java
index 0c565d3..6fc2ea0 100644
--- a/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigLogFeederZK.java
+++ b/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigLogFeederZK.java
@@ -35,16 +35,17 @@ import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
 import org.apache.curator.framework.recipes.cache.TreeCacheEvent.Type;
 import org.apache.curator.framework.recipes.cache.TreeCacheListener;
 import org.apache.curator.utils.ZKPaths;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParser;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.zookeeper.KeeperException;
 
 public class LogSearchConfigLogFeederZK extends LogSearchConfigZK implements LogSearchConfigLogFeeder {
-  private static final Logger LOG = LoggerFactory.getLogger(LogSearchConfigLogFeederZK.class);
+  private static final Logger logger = LogManager.getLogger(LogSearchConfigLogFeederZK.class);
 
   private TreeCache logFeederClusterCache;
 
@@ -99,16 +100,16 @@ public class LogSearchConfigLogFeederZK extends LogSearchConfigZK implements Log
       private void handleInputConfigChange(Type eventType, String nodeName, String nodeData) {
         switch (eventType) {
           case NODE_ADDED:
-            LOG.info("Node added under input ZK node: " + nodeName);
+            logger.info("Node added under input ZK node: " + nodeName);
             addInputs(nodeName, nodeData);
             break;
           case NODE_UPDATED:
-            LOG.info("Node updated under input ZK node: " + nodeName);
+            logger.info("Node updated under input ZK node: " + nodeName);
             removeInputs(nodeName);
             addInputs(nodeName, nodeData);
             break;
           case NODE_REMOVED:
-            LOG.info("Node removed from input ZK node: " + nodeName);
+            logger.info("Node removed from input ZK node: " + nodeName);
             removeInputs(nodeName);
             break;
           default:
@@ -133,7 +134,7 @@ public class LogSearchConfigLogFeederZK extends LogSearchConfigZK implements Log
           
           inputConfigMonitor.loadInputConfigs(serviceName, InputConfigGson.gson.fromJson(inputConfigJson, InputConfigImpl.class));
         } catch (Exception e) {
-          LOG.error("Could not load input configuration for service " + serviceName + ":\n" + inputConfig, e);
+          logger.error("Could not load input configuration for service " + serviceName + ":\n" + inputConfig, e);
         }
       }
     };
@@ -152,7 +153,11 @@ public class LogSearchConfigLogFeederZK extends LogSearchConfigZK implements Log
         client.create().creatingParentContainersIfNeeded().withACL(LogSearchConfigZKHelper.getAcls(properties)).forPath(globalConfigNodePath, data.getBytes());
       }
     } catch (Exception e) {
-      LOG.warn("Exception during global config node creation/update", e);
+      if (e instanceof KeeperException.NodeExistsException) {
+        logger.info("Node '{}' already exists. It won't be re-created.", globalConfigNodePath);
+      } else {
+        logger.warn("Exception during global config node creation/update", e);
+      }
     }
   }
 }
diff --git a/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigServerZK.java b/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigServerZK.java
index 7380c6b..5bcdefc 100644
--- a/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigServerZK.java
+++ b/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigServerZK.java
@@ -22,7 +22,6 @@ package org.apache.ambari.logsearch.config.zookeeper;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 
 import org.apache.ambari.logsearch.config.api.LogLevelFilterManager;
 import org.apache.ambari.logsearch.config.api.LogSearchConfigServer;
@@ -32,14 +31,14 @@ import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputConfi
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputConfigImpl;
 import org.apache.curator.framework.recipes.cache.ChildData;
 import org.apache.curator.framework.recipes.cache.TreeCache;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.gson.JsonArray;
 import com.google.gson.JsonParser;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class LogSearchConfigServerZK extends LogSearchConfigZK implements LogSearchConfigServer {
-  private static final Logger LOG = LoggerFactory.getLogger(LogSearchConfigServerZK.class);
+  private static final Logger logger = LogManager.getLogger(LogSearchConfigServerZK.class);
 
   private TreeCache serverCache;
 
@@ -66,7 +65,7 @@ public class LogSearchConfigServerZK extends LogSearchConfigZK implements LogSea
   public void setInputConfig(String clusterName, String serviceName, String inputConfig) throws Exception {
     String nodePath = String.format("/%s/input/%s", clusterName, serviceName);
     client.setData().forPath(nodePath, inputConfig.getBytes());
-    LOG.info("Set input config for the service " + serviceName + " for cluster " + clusterName);
+    logger.info("Set input config for the service " + serviceName + " for cluster " + clusterName);
   }
 
   @Override
diff --git a/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigZK.java b/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigZK.java
index dcbedd5..d29da94 100644
--- a/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigZK.java
+++ b/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigZK.java
@@ -24,14 +24,14 @@ import java.util.Map;
 import org.apache.ambari.logsearch.config.api.LogLevelFilterManager;
 import org.apache.ambari.logsearch.config.api.LogSearchConfig;
 import org.apache.curator.framework.CuratorFramework;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.zookeeper.KeeperException.NodeExistsException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.gson.Gson;
 
 public class LogSearchConfigZK implements LogSearchConfig {
-  private static final Logger LOG = LoggerFactory.getLogger(LogSearchConfigZK.class);
+  private static final Logger logger = LogManager.getLogger(LogSearchConfigZK.class);
 
   protected Map<String, String> properties;
   protected CuratorFramework client;
@@ -50,9 +50,9 @@ public class LogSearchConfigZK implements LogSearchConfig {
     String nodePath = String.format("/%s/input/%s", clusterName, serviceName);
     try {
       client.create().creatingParentContainersIfNeeded().withACL(LogSearchConfigZKHelper.getAcls(properties)).forPath(nodePath, inputConfig.getBytes());
-      LOG.info("Uploaded input config for the service " + serviceName + " for cluster " + clusterName);
+      logger.info("Uploaded input config for the service " + serviceName + " for cluster " + clusterName);
     } catch (NodeExistsException e) {
-      LOG.debug("Did not upload input config for service " + serviceName + " as it was already uploaded by another Log Feeder");
+      logger.debug("Did not upload input config for service " + serviceName + " as it was already uploaded by another Log Feeder");
     }
   }
 
@@ -68,7 +68,7 @@ public class LogSearchConfigZK implements LogSearchConfig {
 
   @Override
   public void close() {
-    LOG.info("Closing ZooKeeper Connection");
+    logger.info("Closing ZooKeeper Connection");
     client.close();
   }
 }
diff --git a/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigZKHelper.java b/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigZKHelper.java
index b26181d..de6db9a 100644
--- a/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigZKHelper.java
+++ b/ambari-logsearch-config-zookeeper/src/main/java/org/apache/ambari/logsearch/config/zookeeper/LogSearchConfigZKHelper.java
@@ -36,11 +36,11 @@ import org.apache.curator.framework.recipes.cache.TreeCacheListener;
 import org.apache.curator.retry.RetryForever;
 import org.apache.curator.retry.RetryUntilElapsed;
 import org.apache.curator.utils.ZKPaths;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.zookeeper.ZooDefs;
 import org.apache.zookeeper.data.ACL;
 import org.apache.zookeeper.data.Id;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -52,7 +52,7 @@ import java.util.Set;
  */
 public class LogSearchConfigZKHelper {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogSearchConfigZKHelper.class);
+  private static final Logger logger = LogManager.getLogger(LogSearchConfigZKHelper.class);
 
   private static final int DEFAULT_SESSION_TIMEOUT = 60000;
   private static final int DEFAULT_CONNECTION_TIMEOUT = 30000;
@@ -119,7 +119,7 @@ public class LogSearchConfigZKHelper {
    */
   public static CuratorFramework createZKClient(Map<String, String> properties) {
     String root = MapUtils.getString(properties, ZK_ROOT_NODE_PROPERTY, DEFAULT_ZK_ROOT);
-    LOG.info("Connecting to ZooKeeper at " + properties.get(ZK_CONNECT_STRING_PROPERTY) + root);
+    logger.info("Connecting to ZooKeeper at " + properties.get(ZK_CONNECT_STRING_PROPERTY) + root);
     return CuratorFrameworkFactory.builder()
       .connectString(properties.get(ZK_CONNECT_STRING_PROPERTY) + root)
       .retryPolicy(getRetryPolicy(properties.get(ZK_CONNECTION_RETRY_TIMEOUT_PROPERTY)))
@@ -203,7 +203,7 @@ public class LogSearchConfigZKHelper {
 
   public static void waitUntilRootAvailable(CuratorFramework client) throws Exception {
     while (client.checkExists().forPath("/") == null) {
-      LOG.info("Root node is not present yet, going to sleep for " + WAIT_FOR_ROOT_SLEEP_SECONDS + " seconds");
+      logger.info("Root node is not present yet, going to sleep for " + WAIT_FOR_ROOT_SLEEP_SECONDS + " seconds");
       Thread.sleep(WAIT_FOR_ROOT_SLEEP_SECONDS * 1000);
     }
   }
@@ -216,12 +216,12 @@ public class LogSearchConfigZKHelper {
     switch (eventType) {
       case NODE_ADDED:
       case NODE_UPDATED:
-        LOG.info("Node added/updated under loglevelfilter ZK node: " + nodeName);
+        logger.info("Node added/updated under loglevelfilter ZK node: " + nodeName);
         LogLevelFilter logLevelFilter = gson.fromJson(nodeData, LogLevelFilter.class);
         logLevelFilterMonitor.setLogLevelFilter(nodeName, logLevelFilter);
         break;
       case NODE_REMOVED:
-        LOG.info("Node removed loglevelfilter input ZK node: " + nodeName);
+        logger.info("Node removed loglevelfilter input ZK node: " + nodeName);
         logLevelFilterMonitor.removeLogLevelFilter(nodeName);
         break;
       default:
diff --git a/ambari-logsearch-config-api/pom.xml b/ambari-logsearch-log4j2-appender/pom.xml
similarity index 75%
copy from ambari-logsearch-config-api/pom.xml
copy to ambari-logsearch-log4j2-appender/pom.xml
index 59286a6..2035e63 100644
--- a/ambari-logsearch-config-api/pom.xml
+++ b/ambari-logsearch-log4j2-appender/pom.xml
@@ -15,9 +15,9 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
   <parent>
     <artifactId>ambari-logsearch</artifactId>
     <groupId>org.apache.ambari</groupId>
@@ -25,25 +25,24 @@
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
-  <artifactId>ambari-logsearch-config-api</artifactId>
+  <artifactId>ambari-logsearch-log4j2-appender</artifactId>
   <packaging>jar</packaging>
-  <name>Ambari Logsearch Config Api</name>
   <url>http://maven.apache.org</url>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
+  <name>Ambari Logsearch Log4j2 Appender</name>
 
   <dependencies>
     <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <version>1.7.20</version>
-    </dependency>
   </dependencies>
-</project>
+</project>
\ No newline at end of file
diff --git a/ambari-logsearch-log4j2-appender/src/main/java/org/apache/ambari/logsearch/layout/LogSearchJsonLayout.java b/ambari-logsearch-log4j2-appender/src/main/java/org/apache/ambari/logsearch/layout/LogSearchJsonLayout.java
new file mode 100644
index 0000000..cbcba18
--- /dev/null
+++ b/ambari-logsearch-log4j2-appender/src/main/java/org/apache/ambari/logsearch/layout/LogSearchJsonLayout.java
@@ -0,0 +1,120 @@
+/*
+ * 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.
+ */
+package org.apache.ambari.logsearch.layout;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.config.Node;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
+import org.apache.logging.log4j.core.jackson.ContextDataSerializer;
+import org.apache.logging.log4j.core.layout.AbstractStringLayout;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+@Plugin(name = "LogSearchJsonLayout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE, printObject = true)
+public final class LogSearchJsonLayout extends AbstractStringLayout {
+
+  private final ObjectMapper objectMapper;
+  private static final String NEW_LINE = System.getProperty("line.separator");
+
+  public LogSearchJsonLayout(Charset charset) {
+    super(charset);
+    SimpleModule module = new SimpleModule();
+    module.addSerializer(LogEvent.class, new LogEventSerializer());
+    module.addSerializer(ReadOnlyStringMap.class, new ContextDataSerializer() {
+    });
+    objectMapper = new ObjectMapper();
+    objectMapper.registerModule(module);
+    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
+  }
+
+  @Override
+  public String toSerializable(LogEvent logEvent) {
+    try {
+      return objectMapper.writeValueAsString(logEvent) + NEW_LINE;
+    } catch (JsonProcessingException e) {
+      throw new IllegalStateException(e);
+    }
+  }
+
+  private static class LogEventSerializer extends StdSerializer<LogEvent> {
+    LogEventSerializer() {
+      super(LogEvent.class);
+    }
+
+    @Override
+    public void serialize(LogEvent value, JsonGenerator gen, SerializerProvider provider) throws IOException {
+      gen.writeStartObject();
+      gen.writeStringField("level", value.getLevel().name());
+      gen.writeStringField("thread_name", value.getThreadName());
+      gen.writeStringField("logger_name", value.getLoggerName());
+      if (value.getSource() != null) {
+        StackTraceElement source = value.getSource();
+        if (source.getFileName() != null) {
+          gen.writeStringField("file", source.getFileName());
+        }
+        gen.writeNumberField("line_number", source.getLineNumber());
+      }
+      gen.writeObjectField("log_message", getLogMessage(value));
+      gen.writeStringField("logtime", Long.toString(value.getTimeMillis()));
+      gen.writeEndObject();
+    }
+
+    private String getLogMessage(LogEvent logEvent) {
+      String logMessage = logEvent.getMessage() != null ? logEvent.getMessage().getFormattedMessage() : "";
+      if (logEvent.getThrown() != null) {
+        logMessage += NEW_LINE;
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter(sw);
+        logEvent.getThrown().printStackTrace(pw);
+        logMessage += sw.toString();
+      }
+      return logMessage;
+    }
+  }
+
+  @PluginBuilderFactory
+  public static <B extends Builder<B>> B newBuilder() {
+    return new Builder<B>().asBuilder();
+  }
+
+  public static class Builder<B extends Builder<B>> extends org.apache.logging.log4j.core.layout.AbstractStringLayout.Builder<B> implements org.apache.logging.log4j.core.util.Builder<LogSearchJsonLayout> {
+    Builder() {
+      this.setCharset(StandardCharsets.UTF_8);
+    }
+
+    public LogSearchJsonLayout build() {
+      return new LogSearchJsonLayout(this.getCharset());
+    }
+  }
+
+}
diff --git a/ambari-logsearch-appender/src/test/java/org/apache/ambari/logsearch/appender/AppTest.java b/ambari-logsearch-log4j2-appender/src/test/java/org/apache/ambari/logsearch/layout/LayoutTest.java
similarity index 81%
copy from ambari-logsearch-appender/src/test/java/org/apache/ambari/logsearch/appender/AppTest.java
copy to ambari-logsearch-log4j2-appender/src/test/java/org/apache/ambari/logsearch/layout/LayoutTest.java
index 8152787..46ee225 100644
--- a/ambari-logsearch-appender/src/test/java/org/apache/ambari/logsearch/appender/AppTest.java
+++ b/ambari-logsearch-log4j2-appender/src/test/java/org/apache/ambari/logsearch/layout/LayoutTest.java
@@ -6,9 +6,9 @@
  * 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
@@ -16,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+package org.apache.ambari.logsearch.layout;
 
-package org.apache.ambari.logsearch.appender;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
-public class AppTest {
-  private static Logger logger = Logger.getLogger(AppTest.class);
+public class LayoutTest {
+  private static final Logger logger = LogManager.getLogger(LayoutTest.class);
 
   public static void main(String[] args) {
 
@@ -36,6 +37,5 @@ public class AppTest {
 
   public static void throwException() {
     throw new ClassCastException("test");
-
   }
 }
diff --git a/ambari-logsearch-log4j2-appender/src/test/resources/log4j2.xml b/ambari-logsearch-log4j2-appender/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..92ac96e
--- /dev/null
+++ b/ambari-logsearch-log4j2-appender/src/test/resources/log4j2.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<Configuration packages="org.apache.ambari.logsearch.layout">
+  <ThresholdFilter level="debug"/>
+
+  <Appenders>
+    <Console name="STDOUT">
+      <LogSearchJsonLayout/>
+      <ThresholdFilter level="debug"/>
+    </Console>
+    <RollingFile name="RollingFile" fileName="target/logs/test.json" filePattern="target/logs/test.json.%d{MM-dd-yyyy}.gz"
+                 ignoreExceptions="false">
+      <LogSearchJsonLayout/>
+      <TimeBasedTriggeringPolicy />
+    </RollingFile>
+  </Appenders>
+
+  <Loggers>
+    <Root level="error">
+      <AppenderRef ref="RollingFile"/>
+    </Root>
+  </Loggers>
+
+</Configuration>
\ No newline at end of file
diff --git a/ambari-logsearch-logfeeder-container-registry/pom.xml b/ambari-logsearch-logfeeder-container-registry/pom.xml
index bdcff62..e601034 100644
--- a/ambari-logsearch-logfeeder-container-registry/pom.xml
+++ b/ambari-logsearch-logfeeder-container-registry/pom.xml
@@ -34,14 +34,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <version>1.7.25</version>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-log4j12</artifactId>
-      <version>1.7.25</version>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
@@ -63,15 +57,6 @@
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.3</version>
-        <configuration>
-          <source>${jdk.version}</source>
-          <target>${jdk.version}</target>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
         <version>3.1.0</version>
         <configuration>
diff --git a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/ContainerMetadata.java b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/ContainerMetadata.java
similarity index 96%
rename from ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/ContainerMetadata.java
rename to ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/ContainerMetadata.java
index df3a80a..ac8770f 100644
--- a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/ContainerMetadata.java
+++ b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/ContainerMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logfeeder;
+package org.apache.ambari.logfeeder.container;
 
 /**
  * Holds container related metadata
diff --git a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/ContainerRegistry.java b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/ContainerRegistry.java
similarity index 96%
rename from ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/ContainerRegistry.java
rename to ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/ContainerRegistry.java
index 94f6a82..4d9d765 100644
--- a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/ContainerRegistry.java
+++ b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/ContainerRegistry.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logfeeder;
+package org.apache.ambari.logfeeder.container;
 
 import java.util.Map;
 
diff --git a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/DockerContainerRegistry.java b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/DockerContainerRegistry.java
similarity index 92%
rename from ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/DockerContainerRegistry.java
rename to ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/DockerContainerRegistry.java
index c3e816e..715b751 100644
--- a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/DockerContainerRegistry.java
+++ b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/DockerContainerRegistry.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logfeeder.docker;
+package org.apache.ambari.logfeeder.container.docker;
 
-import org.apache.ambari.logfeeder.ContainerRegistry;
-import org.apache.ambari.logfeeder.docker.command.DockerInspectContainerCommand;
-import org.apache.ambari.logfeeder.docker.command.DockerListContainerCommand;
+import org.apache.ambari.logfeeder.container.ContainerRegistry;
+import org.apache.ambari.logfeeder.container.docker.command.DockerInspectContainerCommand;
+import org.apache.ambari.logfeeder.container.docker.command.DockerListContainerCommand;
 import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
@@ -41,7 +41,7 @@ import java.util.stream.Collectors;
 public final class DockerContainerRegistry implements ContainerRegistry<DockerMetadata> {
 
   private static final String LOGFEEDER_CONTAINER_REGISTRY_DOCKER_INTERVAL = "logfeeder.container.registry.docker.interval";
-  private static final Logger logger = LoggerFactory.getLogger(DockerContainerRegistry.class);
+  private static final Logger logger = LogManager.getLogger(DockerContainerRegistry.class);
 
   private static DockerContainerRegistry INSTANCE = null;
   private final Properties configs;
diff --git a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/DockerContainerRegistryMonitor.java b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/DockerContainerRegistryMonitor.java
similarity index 85%
rename from ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/DockerContainerRegistryMonitor.java
rename to ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/DockerContainerRegistryMonitor.java
index 30c328d..73203c7 100644
--- a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/DockerContainerRegistryMonitor.java
+++ b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/DockerContainerRegistryMonitor.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logfeeder.docker;
+package org.apache.ambari.logfeeder.container.docker;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
- * Periodically re-register docker container metadata for {@link org.apache.ambari.logfeeder.docker.DockerContainerRegistry}
+ * Periodically re-register docker container metadata for {@link DockerContainerRegistry}
  * based on a time interval in seconds (property: logfeeder.container.registry.docker.interval, default: 5)
  */
 public class DockerContainerRegistryMonitor implements Runnable {
 
-  private static final Logger logger = LoggerFactory.getLogger(DockerContainerRegistryMonitor.class);
+  private static final Logger logger = LogManager.getLogger(DockerContainerRegistryMonitor.class);
 
   private final DockerContainerRegistry registry;
 
diff --git a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/DockerMetadata.java b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/DockerMetadata.java
similarity index 94%
rename from ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/DockerMetadata.java
rename to ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/DockerMetadata.java
index 65842b4..f5cafcf 100644
--- a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/DockerMetadata.java
+++ b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/DockerMetadata.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logfeeder.docker;
+package org.apache.ambari.logfeeder.container.docker;
 
-import org.apache.ambari.logfeeder.ContainerMetadata;
+import org.apache.ambari.logfeeder.container.ContainerMetadata;
 
 public class DockerMetadata implements ContainerMetadata {
 
diff --git a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/CommandExecutionHelper.java b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/CommandExecutionHelper.java
similarity index 96%
rename from ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/CommandExecutionHelper.java
rename to ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/CommandExecutionHelper.java
index aa65c60..d13969d 100644
--- a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/CommandExecutionHelper.java
+++ b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/CommandExecutionHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logfeeder.docker.command;
+package org.apache.ambari.logfeeder.container.docker.command;
 
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
diff --git a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/CommandResponse.java b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/CommandResponse.java
similarity index 95%
rename from ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/CommandResponse.java
rename to ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/CommandResponse.java
index 7ead791..9152bf4 100644
--- a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/CommandResponse.java
+++ b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/CommandResponse.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logfeeder.docker.command;
+package org.apache.ambari.logfeeder.container.docker.command;
 
 import java.util.List;
 
diff --git a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/ContainerCommand.java b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/ContainerCommand.java
similarity index 95%
rename from ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/ContainerCommand.java
rename to ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/ContainerCommand.java
index db3de01..92c24ee 100644
--- a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/ContainerCommand.java
+++ b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/ContainerCommand.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logfeeder.docker.command;
+package org.apache.ambari.logfeeder.container.docker.command;
 
 import java.util.Map;
 
diff --git a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/DockerInspectContainerCommand.java b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/DockerInspectContainerCommand.java
similarity index 90%
rename from ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/DockerInspectContainerCommand.java
rename to ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/DockerInspectContainerCommand.java
index d4fc182..6e166eb 100644
--- a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/DockerInspectContainerCommand.java
+++ b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/DockerInspectContainerCommand.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logfeeder.docker.command;
+package org.apache.ambari.logfeeder.container.docker.command;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -33,7 +33,7 @@ import java.util.Map;
  */
 public class DockerInspectContainerCommand implements ContainerCommand<List<Map<String, Object>>> {
 
-  private static final Logger logger = LoggerFactory.getLogger(DockerInspectContainerCommand.class);
+  private static final Logger logger = LogManager.getLogger(DockerInspectContainerCommand.class);
 
   @Override
   public List<Map<String, Object>> execute(Map<String, String> params) {
diff --git a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/DockerListContainerCommand.java b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/DockerListContainerCommand.java
similarity index 88%
rename from ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/DockerListContainerCommand.java
rename to ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/DockerListContainerCommand.java
index a0596ca..fc12a22 100644
--- a/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/docker/command/DockerListContainerCommand.java
+++ b/ambari-logsearch-logfeeder-container-registry/src/main/java/org/apache/ambari/logfeeder/container/docker/command/DockerListContainerCommand.java
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.ambari.logfeeder.docker.command;
+package org.apache.ambari.logfeeder.container.docker.command;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -30,7 +30,7 @@ import java.util.Map;
  */
 public class DockerListContainerCommand implements ContainerCommand<List<String>> {
 
-  private static final Logger logger = LoggerFactory.getLogger(DockerListContainerCommand.class);
+  private static final Logger logger = LogManager.getLogger(DockerListContainerCommand.class);
 
   @Override
   public List<String> execute(Map<String, String> params) {
diff --git a/ambari-logsearch-logfeeder-plugin-api/pom.xml b/ambari-logsearch-logfeeder-plugin-api/pom.xml
index fa5f97e..a944e83 100644
--- a/ambari-logsearch-logfeeder-plugin-api/pom.xml
+++ b/ambari-logsearch-logfeeder-plugin-api/pom.xml
@@ -46,9 +46,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <version>1.7.20</version>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.codehaus.jackson</groupId>
diff --git a/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/common/AliasUtil.java b/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/common/AliasUtil.java
index 521e0bd..fc93dab 100644
--- a/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/common/AliasUtil.java
+++ b/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/common/AliasUtil.java
@@ -22,10 +22,10 @@ import org.apache.ambari.logfeeder.plugin.filter.Filter;
 import org.apache.ambari.logfeeder.plugin.filter.mapper.Mapper;
 import org.apache.ambari.logfeeder.plugin.input.Input;
 import org.apache.ambari.logfeeder.plugin.output.Output;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.type.TypeReference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -33,7 +33,7 @@ import java.util.HashMap;
 
 public class AliasUtil {
 
-  private static final Logger LOG = LoggerFactory.getLogger(AliasUtil.class);
+  private static final Logger logger = LogManager.getLogger(AliasUtil.class);
 
   private static final String ALIAS_CONFIG_JSON = "alias_config.json";
   private static HashMap<String, Object> aliasMap = null;
@@ -57,7 +57,7 @@ public class AliasUtil {
     try {
       instance = Class.forName(classFullName).getConstructor().newInstance();
     } catch (Exception exception) {
-      LOG.error("Unsupported class = " + classFullName, exception.getCause());
+      logger.error("Unsupported class = " + classFullName, exception.getCause());
     }
 
     if (instance != null) {
@@ -76,11 +76,11 @@ public class AliasUtil {
           isValid = Mapper.class.isAssignableFrom(instance.getClass());
           break;
         default:
-          LOG.warn("Unhandled aliasType: " + aliasType);
+          logger.warn("Unhandled aliasType: " + aliasType);
           isValid = true;
       }
       if (!isValid) {
-        LOG.error("Not a valid class :" + classFullName + " AliasType :" + aliasType.name());
+        logger.error("Not a valid class :" + classFullName + " AliasType :" + aliasType.name());
       }
     }
     return instance;
@@ -93,9 +93,9 @@ public class AliasUtil {
     String value = aliasInfo.get("klass");
     if (value != null && !value.isEmpty()) {
       className = value;
-      LOG.debug("Class name found for key :" + key + ", class name :" + className + " aliastype:" + aliastype.name());
+      logger.debug("Class name found for key :" + key + ", class name :" + className + " aliastype:" + aliastype.name());
     } else {
-      LOG.debug("Class name not found for key :" + key + " aliastype:" + aliastype.name());
+      logger.debug("Class name not found for key :" + key + " aliastype:" + aliastype.name());
     }
 
     return className;
@@ -121,7 +121,7 @@ public class AliasUtil {
     try (InputStream inputStream = AliasUtil.class.getClassLoader().getResourceAsStream(fileName)) {
       return mapper.readValue(inputStream, new TypeReference<HashMap<String, Object>>() {});
     } catch (IOException e) {
-      LOG.error("Error occurred during loading alias json file: {}", e);
+      logger.error("Error occurred during loading alias json file: {}", e);
     }
     return new HashMap<String, Object>();
   }
diff --git a/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/common/ConfigItem.java b/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/common/ConfigItem.java
index 5b50a7e..76fcf3f 100644
--- a/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/common/ConfigItem.java
+++ b/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/common/ConfigItem.java
@@ -21,8 +21,8 @@ package org.apache.ambari.logfeeder.plugin.common;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.reflect.TypeToken;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.Serializable;
 import java.lang.reflect.Type;
@@ -32,7 +32,7 @@ import java.util.Map;
 
 public abstract class ConfigItem<PROP_TYPE extends LogFeederProperties> implements Cloneable, Serializable {
 
-  private static final Logger LOG = LoggerFactory.getLogger(ConfigItem.class);
+  private static final Logger logger = LogManager.getLogger(ConfigItem.class);
 
   private final static String GSON_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
   private static Gson gson = new GsonBuilder().setDateFormat(GSON_DATE_FORMAT).create();
@@ -96,7 +96,7 @@ public abstract class ConfigItem<PROP_TYPE extends LogFeederProperties> implemen
     long currMS = System.currentTimeMillis();
     String postFix = ", key=" + getShortDescription();
     if (currStat > metric.prevLogValue) {
-      LOG.info(prefixStr + ": total_count=" + metric.value + ", duration=" + (currMS - metric.prevLogTime) / 1000 +
+      logger.info(prefixStr + ": total_count=" + metric.value + ", duration=" + (currMS - metric.prevLogTime) / 1000 +
         " secs, count=" + (currStat - metric.prevLogValue) + postFix);
     }
     metric.prevLogValue = currStat;
diff --git a/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/filter/Filter.java b/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/filter/Filter.java
index f098245..8f0fa71 100644
--- a/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/filter/Filter.java
+++ b/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/filter/Filter.java
@@ -29,8 +29,8 @@ import org.apache.ambari.logfeeder.plugin.manager.OutputManager;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterDescriptor;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldDescriptor;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.PostMapValues;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -39,7 +39,7 @@ import java.util.Map;
 
 public abstract class Filter<PROP_TYPE extends LogFeederProperties> extends ConfigItem<PROP_TYPE> {
 
-  private static final Logger LOG = LoggerFactory.getLogger(Filter.class);
+  private static final Logger logger = LogManager.getLogger(Filter.class);
 
   private final Map<String, List<Mapper>> postFieldValueMappers = new HashMap<>();
   private FilterDescriptor filterDescriptor;
@@ -82,7 +82,7 @@ public abstract class Filter<PROP_TYPE extends LogFeederProperties> extends Conf
           String mapClassCode = mapFieldDescriptor.getJsonName();
           Mapper mapper = (Mapper) AliasUtil.getClassInstance(mapClassCode, AliasUtil.AliasType.MAPPER);
           if (mapper == null) {
-            LOG.warn("Unknown mapper type: " + mapClassCode);
+            logger.warn("Unknown mapper type: " + mapClassCode);
             continue;
           }
           if (mapper.init(getInput().getShortDescription(), fieldName, mapClassCode, mapFieldDescriptor)) {
@@ -175,7 +175,7 @@ public abstract class Filter<PROP_TYPE extends LogFeederProperties> extends Conf
 
   @Override
   public boolean logConfigs() {
-    LOG.info("filter=" + getShortDescription());
+    logger.info("filter=" + getShortDescription());
     return true;
   }
 
diff --git a/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/input/Input.java b/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/input/Input.java
index 1b1fed5..421ca86 100644
--- a/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/input/Input.java
+++ b/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/input/Input.java
@@ -31,8 +31,8 @@ import org.apache.ambari.logsearch.config.api.model.inputconfig.Conditions;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.Fields;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterDescriptor;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.InputDescriptor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -40,7 +40,7 @@ import java.util.Map;
 
 public abstract class Input<PROP_TYPE extends LogFeederProperties, INPUT_MARKER extends InputMarker, INPUT_DESC_TYPE extends InputDescriptor> extends ConfigItem<PROP_TYPE> implements Runnable {
 
-  private static final Logger LOG = LoggerFactory.getLogger(Input.class);
+  private static final Logger logger = LogManager.getLogger(Input.class);
 
   private INPUT_DESC_TYPE inputDescriptor;
   private PROP_TYPE logFeederProperties;
@@ -167,12 +167,12 @@ public abstract class Input<PROP_TYPE extends LogFeederProperties, INPUT_MARKER
   @Override
   public void run() {
     try {
-      LOG.info("Started to monitor. " + getShortDescription());
+      logger.info("Started to monitor. " + getShortDescription());
       start();
     } catch (Exception e) {
-      LOG.error("Error writing to output.", e);
+      logger.error("Error writing to output.", e);
     }
-    LOG.info("Exiting thread. " + getShortDescription());
+    logger.info("Exiting thread. " + getShortDescription());
   }
 
   /**
@@ -190,7 +190,7 @@ public abstract class Input<PROP_TYPE extends LogFeederProperties, INPUT_MARKER
       try {
         firstFilter.apply(line, marker);
       } catch (Exception e) {
-        LOG.error("Error during filter apply: {}", e);
+        logger.error("Error during filter apply: {}", e);
       }
     } else {
       // TODO: For now, let's make filter mandatory, so that no one accidently forgets to write filter
@@ -199,7 +199,7 @@ public abstract class Input<PROP_TYPE extends LogFeederProperties, INPUT_MARKER
   }
 
   public void close() {
-    LOG.info("Close called. " + getShortDescription());
+    logger.info("Close called. " + getShortDescription());
     try {
       if (firstFilter != null) {
         firstFilter.close();
diff --git a/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/output/Output.java b/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/output/Output.java
index 13e5ad8..52c5435 100644
--- a/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/output/Output.java
+++ b/ambari-logsearch-logfeeder-plugin-api/src/main/java/org/apache/ambari/logfeeder/plugin/output/Output.java
@@ -26,8 +26,8 @@ import org.apache.ambari.logfeeder.plugin.common.MetricData;
 import org.apache.ambari.logfeeder.plugin.input.InputMarker;
 import org.apache.ambari.logsearch.config.api.LogSearchConfigLogFeeder;
 import org.apache.ambari.logsearch.config.api.OutputConfigMonitor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -36,7 +36,7 @@ import java.util.Map;
 
 public abstract class Output<PROP_TYPE extends LogFeederProperties, INPUT_MARKER extends InputMarker> extends ConfigItem<PROP_TYPE> implements OutputConfigMonitor {
 
-  private static final Logger LOG = LoggerFactory.getLogger(Output.class);
+  private static final Logger LOG = LogManager.getLogger(Output.class);
 
   private final static String GSON_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
   private static Gson gson = new GsonBuilder().setDateFormat(GSON_DATE_FORMAT).create();
diff --git a/ambari-logsearch-logfeeder/build.xml b/ambari-logsearch-logfeeder/build.xml
index bde400f..1fbb928 100644
--- a/ambari-logsearch-logfeeder/build.xml
+++ b/ambari-logsearch-logfeeder/build.xml
@@ -36,7 +36,7 @@
     </copy>
     <copy todir="target/package/conf" includeEmptyDirs="no">
       <fileset file="target/classes/grok-patterns"/>
-      <fileset file="target/classes/log4j.xml"/>
+      <fileset file="target/classes/log4j2.yml"/>
       <fileset file="target/classes/logfeeder.properties"/>
       <fileset file="target/classes/alias_config.json"/>
       <fileset file="src/main/scripts/logfeeder-env.sh"/>
diff --git a/ambari-logsearch-logfeeder/pom.xml b/ambari-logsearch-logfeeder/pom.xml
index 1b116b3..0e6fff4 100644
--- a/ambari-logsearch-logfeeder/pom.xml
+++ b/ambari-logsearch-logfeeder/pom.xml
@@ -33,8 +33,8 @@
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <spring.version>4.3.17.RELEASE</spring.version>
-    <spring-boot.version>1.5.13.RELEASE</spring-boot.version>
+    <spring.version>5.1.0.RELEASE</spring.version>
+    <spring-boot.version>2.0.5.RELEASE</spring-boot.version>
   </properties>
 
   <dependencies>
@@ -45,6 +45,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.ambari</groupId>
+      <artifactId>ambari-logsearch-log4j2-appender</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ambari</groupId>
       <artifactId>ambari-logsearch-config-json</artifactId>
       <version>${project.version}</version>
     </dependency>
@@ -91,7 +96,7 @@
     <dependency>
       <groupId>org.easymock</groupId>
       <artifactId>easymock</artifactId>
-      <version>3.4</version>
+      <version>3.6</version>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -140,9 +145,9 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
-      <groupId>com.amazonaws</groupId>
-      <artifactId>aws-java-sdk-s3</artifactId>
-      <version>1.11.5</version>
+      <groupId>io.minio</groupId>
+      <artifactId>minio</artifactId>
+      <version>5.0.1</version>
     </dependency>
     <dependency>
       <groupId>org.apache.commons</groupId>
@@ -150,9 +155,8 @@
       <version>1.16.1</version>
     </dependency>
     <dependency>
-      <groupId>com.amazonaws</groupId>
-      <artifactId>aws-java-sdk-iam</artifactId>
-      <version>1.11.5</version>
+      <groupId>com.fasterxml.jackson.dataformat</groupId>
+      <artifactId>jackson-dataformat-yaml</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.hadoop</groupId>
@@ -222,8 +226,8 @@
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-log4j</artifactId>
-      <version>1.3.8.RELEASE</version>
+      <artifactId>spring-boot-starter-log4j2</artifactId>
+      <version>${spring-boot.version}</version>
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
@@ -240,6 +244,15 @@
       <artifactId>ant</artifactId>
       <version>1.10.3</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-jcl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.17</version>
+    </dependency>
     <!-- Exclude jars globally-->
     <dependency>
       <groupId>commons-beanutils</groupId>
@@ -250,18 +263,38 @@
     <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
-      <version>1.1.1</version>
+      <version>1.2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <version>1.7.25</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jcl-over-slf4j</artifactId>
+      <version>1.7.25</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jul-to-slf4j</artifactId>
+      <version>1.7.25</version>
       <scope>provided</scope>
     </dependency>
   </dependencies>
   <build>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+        <filtering>true</filtering>
+      </resource>
+    </resources>
     <pluginManagement>
       <plugins>
         <plugin>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>3.0</version>
-        </plugin>
-        <plugin>
           <artifactId>maven-dependency-plugin</artifactId>
           <version>2.8</version>
         </plugin>
@@ -270,15 +303,6 @@
 
     <plugins>
       <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.3</version>
-        <configuration>
-          <source>${jdk.version}</source>
-          <target>${jdk.version}</target>
-        </configuration>
-      </plugin>
-      <plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
         <version>${spring-boot.version}</version>
@@ -298,6 +322,7 @@
 
             </goals>
             <configuration>
+              <excludeArtifactIds>spring-boot-starter,spring-boot-starter-log4j2</excludeArtifactIds>
               <outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename>
               <outputDirectory>${basedir}/target/libs</outputDirectory>
               <overWriteReleases>false</overWriteReleases>
@@ -308,6 +333,14 @@
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>${jdk.version}</source>
+          <target>${jdk.version}</target>
+        </configuration>
+      </plugin>
       <!-- ant pacakge -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/LogFeeder.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/LogFeeder.java
index 4025d3d..a0d8b4f 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/LogFeeder.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/LogFeeder.java
@@ -22,7 +22,7 @@ import org.springframework.boot.Banner;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration;
 import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.system.ApplicationPidFileWriter;
+import org.springframework.boot.context.ApplicationPidFileWriter;
 
 @SpringBootApplication(
   scanBasePackages = {"org.apache.ambari.logfeeder"},
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/ConfigHandler.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/ConfigHandler.java
index 1ceef3b..67a5671 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/ConfigHandler.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/ConfigHandler.java
@@ -42,7 +42,8 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.core.io.ClassPathResource;
 
 import javax.annotation.PostConstruct;
@@ -63,7 +64,7 @@ import java.util.Map;
 import java.util.Set;
 
 public class ConfigHandler implements InputConfigMonitor {
-  private static final Logger LOG = Logger.getLogger(org.apache.ambari.logfeeder.common.ConfigHandler.class);
+  private static final Logger logger = LogManager.getLogger(ConfigHandler.class);
 
   private final LogSearchConfigLogFeeder logSearchConfig;
 
@@ -101,16 +102,16 @@ public class ConfigHandler implements InputConfigMonitor {
   private void loadConfigFiles() throws Exception {
     List<String> configFiles = getConfigFiles();
     for (String configFileName : configFiles) {
-      LOG.info("Going to load config file:" + configFileName);
+      logger.info("Going to load config file:" + configFileName);
       configFileName = configFileName.replace("\\ ", "%20");
       File configFile = new File(configFileName);
       if (configFile.exists() && configFile.isFile()) {
-        LOG.info("Config file exists in path." + configFile.getAbsolutePath());
+        logger.info("Config file exists in path." + configFile.getAbsolutePath());
         loadConfigsUsingFile(configFile);
       } else {
-        LOG.info("Trying to load config file from classloader: " + configFileName);
+        logger.info("Trying to load config file from classloader: " + configFileName);
         loadConfigsUsingClassLoader(configFileName);
-        LOG.info("Loaded config file from classloader: " + configFileName);
+        logger.info("Loaded config file from classloader: " + configFileName);
       }
     }
   }
@@ -119,7 +120,7 @@ public class ConfigHandler implements InputConfigMonitor {
     List<String> configFiles = new ArrayList<>();
 
     String logFeederConfigFilesProperty = logFeederProps.getConfigFiles();
-    LOG.info("logfeeder.config.files=" + logFeederConfigFilesProperty);
+    logger.info("logfeeder.config.files=" + logFeederConfigFilesProperty);
     if (logFeederConfigFilesProperty != null) {
       configFiles.addAll(Arrays.asList(logFeederConfigFilesProperty.split(",")));
     }
@@ -132,7 +133,7 @@ public class ConfigHandler implements InputConfigMonitor {
       String configData = FileUtils.readFileToString(configFile, Charset.defaultCharset());
       loadConfigs(configData);
     } catch (Exception t) {
-      LOG.error("Error opening config file. configFilePath=" + configFile.getAbsolutePath());
+      logger.error("Error opening config file. configFilePath=" + configFile.getAbsolutePath());
       throw t;
     }
   }
@@ -214,7 +215,7 @@ public class ConfigHandler implements InputConfigMonitor {
           outputConfigList.addAll(outputConfig);
           break;
         default :
-          LOG.warn("Unknown config key: " + key);
+          logger.warn("Unknown config key: " + key);
       }
     }
   }
@@ -255,12 +256,12 @@ public class ConfigHandler implements InputConfigMonitor {
 
       String value = (String) map.get("destination");
       if (StringUtils.isEmpty(value)) {
-        LOG.error("Output block doesn't have destination element");
+        logger.error("Output block doesn't have destination element");
         continue;
       }
       Output output = (Output) AliasUtil.getClassInstance(value, AliasUtil.AliasType.OUTPUT);
       if (output == null) {
-        LOG.error("Output object could not be found");
+        logger.error("Output object could not be found");
         continue;
       }
       output.setDestination(value);
@@ -272,7 +273,7 @@ public class ConfigHandler implements InputConfigMonitor {
         output.logConfigs();
         outputManager.add(output);
       } else {
-        LOG.info("Output is disabled. So ignoring it. " + output.getShortDescription());
+        logger.info("Output is disabled. So ignoring it. " + output.getShortDescription());
       }
     }
   }
@@ -285,12 +286,12 @@ public class ConfigHandler implements InputConfigMonitor {
 
       String source = (String) inputDescriptor.getSource();
       if (StringUtils.isEmpty(source)) {
-        LOG.error("Input block doesn't have source element");
+        logger.error("Input block doesn't have source element");
         continue;
       }
       Input input = (Input) AliasUtil.getClassInstance(source, AliasUtil.AliasType.INPUT);
       if (input == null) {
-        LOG.error("Input object could not be found");
+        logger.error("Input object could not be found");
         continue;
       }
       input.setType(source);
@@ -303,7 +304,7 @@ public class ConfigHandler implements InputConfigMonitor {
         inputManager.add(serviceName, input);
         input.logConfigs();
       } else {
-        LOG.info("Input is disabled. So ignoring it. " + input.getShortDescription());
+        logger.info("Input is disabled. So ignoring it. " + input.getShortDescription());
       }
     }
   }
@@ -318,22 +319,22 @@ public class ConfigHandler implements InputConfigMonitor {
           continue;
         }
         if (BooleanUtils.isFalse(filterDescriptor.isEnabled())) {
-          LOG.debug("Ignoring filter " + filterDescriptor.getFilter() + " because it is disabled");
+          logger.debug("Ignoring filter " + filterDescriptor.getFilter() + " because it is disabled");
           continue;
         }
         if (!input.isFilterRequired(filterDescriptor)) {
-          LOG.debug("Ignoring filter " + filterDescriptor.getFilter() + " for input " + input.getShortDescription());
+          logger.debug("Ignoring filter " + filterDescriptor.getFilter() + " for input " + input.getShortDescription());
           continue;
         }
 
         String value = filterDescriptor.getFilter();
         if (StringUtils.isEmpty(value)) {
-          LOG.error("Filter block doesn't have filter element");
+          logger.error("Filter block doesn't have filter element");
           continue;
         }
         Filter filter = (Filter) AliasUtil.getClassInstance(value, AliasUtil.AliasType.FILTER);
         if (filter == null) {
-          LOG.error("Filter object could not be found");
+          logger.error("Filter object could not be found");
           continue;
         }
         filter.loadConfig(filterDescriptor);
@@ -350,7 +351,7 @@ public class ConfigHandler implements InputConfigMonitor {
     }
 
     for (Input toRemoveInput : toRemoveInputList) {
-      LOG.warn("There are no filters, we will ignore this input. " + toRemoveInput.getShortDescription());
+      logger.warn("There are no filters, we will ignore this input. " + toRemoveInput.getShortDescription());
       inputManager.removeInput(toRemoveInput);
     }
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederSolrClientFactory.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederSolrClientFactory.java
index cf94fb5..5018d48 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederSolrClientFactory.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederSolrClientFactory.java
@@ -19,21 +19,15 @@
 package org.apache.ambari.logfeeder.common;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
-import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.impl.LBHttpSolrClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
 
 public class LogFeederSolrClientFactory {
 
-  private static final Logger logger = LoggerFactory.getLogger(LogFeederSolrClientFactory.class);
+  private static final Logger logger = LogManager.getLogger(LogFeederSolrClientFactory.class);
 
   public SolrClient createSolrClient(String zkConnectionString, String[] solrUrls, String collection) {
     logger.info("Creating solr client ...");
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/ApplicationConfig.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/ApplicationConfig.java
index 8c7e7d9..086ad70 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/ApplicationConfig.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/ApplicationConfig.java
@@ -20,7 +20,7 @@ package org.apache.ambari.logfeeder.conf;
 
 import com.google.common.collect.Maps;
 import org.apache.ambari.logfeeder.common.LogFeederSolrClientFactory;
-import org.apache.ambari.logfeeder.docker.DockerContainerRegistry;
+import org.apache.ambari.logfeeder.container.docker.DockerContainerRegistry;
 import org.apache.ambari.logfeeder.common.LogFeederConstants;
 import org.apache.ambari.logfeeder.input.InputConfigUploader;
 import org.apache.ambari.logfeeder.input.InputManagerImpl;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/LogFeederSecurityConfig.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/LogFeederSecurityConfig.java
index faa0359..aca1109 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/LogFeederSecurityConfig.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/conf/LogFeederSecurityConfig.java
@@ -23,8 +23,8 @@ import org.apache.ambari.logsearch.config.api.LogSearchPropertyDescription;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.ArrayUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.beans.factory.annotation.Value;
 
 import javax.annotation.PostConstruct;
@@ -33,7 +33,7 @@ import java.nio.charset.Charset;
 
 public class LogFeederSecurityConfig {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogFeederSecurityConfig.class);
+  private static final Logger logger = LogManager.getLogger(LogFeederSecurityConfig.class);
 
   private static final String KEYSTORE_LOCATION_ARG = "javax.net.ssl.keyStore";
   private static final String TRUSTSTORE_LOCATION_ARG = "javax.net.ssl.trustStore";
@@ -166,7 +166,7 @@ public class LogFeederSecurityConfig {
       char[] passwordChars = config.getPassword(propertyName);
       return (ArrayUtils.isNotEmpty(passwordChars)) ? new String(passwordChars) : null;
     } catch (Exception e) {
-      LOG.warn(String.format("Could not load password %s from credential store, using default password", propertyName));
+      logger.warn(String.format("Could not load password %s from credential store, using default password", propertyName));
       return null;
     }
   }
@@ -181,7 +181,7 @@ public class LogFeederSecurityConfig {
         return FileUtils.readFileToString(pwdFile, Charset.defaultCharset());
       }
     } catch (Exception e) {
-      LOG.warn("Exception occurred during read/write password file for keystore/truststore.", e);
+      logger.warn("Exception occurred during read/write password file for keystore/truststore.", e);
       return null;
     }
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterGrok.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterGrok.java
index 5ed61cc..492e531 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterGrok.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterGrok.java
@@ -33,8 +33,9 @@ import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterGrokDescri
 import org.apache.ambari.logsearch.config.api.model.inputconfig.InputFileDescriptor;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -49,7 +50,7 @@ import java.util.Set;
 import java.util.regex.Pattern;
 
 public class FilterGrok extends Filter<LogFeederProps> {
-  private static final Logger LOG = Logger.getLogger(FilterGrok.class);
+  private static final Logger logger = LogManager.getLogger(FilterGrok.class);
 
   private static final String GROK_PATTERN_FILE = "grok-patterns";
 
@@ -95,10 +96,10 @@ public class FilterGrok extends Filter<LogFeederProps> {
         }
       }
 
-      LOG.info("init() done. grokPattern=" + messagePattern + ", multilinePattern=" + multilinePattern + ", " +
+      logger.info("init() done. grokPattern=" + messagePattern + ", multilinePattern=" + multilinePattern + ", " +
       getShortDescription());
       if (StringUtils.isEmpty(messagePattern)) {
-        LOG.error("message_pattern is not set for filter.");
+        logger.error("message_pattern is not set for filter.");
         return;
       }
       extractNamedParams(messagePattern, namedParamList);
@@ -119,7 +120,7 @@ public class FilterGrok extends Filter<LogFeederProps> {
         grokMultiline.compile(multilinePattern);
       }
     } catch (Throwable t) {
-      LOG.fatal("Caught exception while initializing Grok. multilinePattern=" + multilinePattern + ", messagePattern="
+      logger.fatal("Caught exception while initializing Grok. multilinePattern=" + multilinePattern + ", messagePattern="
           + messagePattern, t);
       grokMessage = null;
       grokMultiline = null;
@@ -165,22 +166,22 @@ public class FilterGrok extends Filter<LogFeederProps> {
 
   private boolean loadPatterns(Grok grok) {
     InputStreamReader grokPatternsReader = null;
-    LOG.info("Loading pattern file " + GROK_PATTERN_FILE);
+    logger.info("Loading pattern file " + GROK_PATTERN_FILE);
     try {
       InputStream fileInputStream = getClass().getClassLoader().getResourceAsStream(GROK_PATTERN_FILE);
       if (fileInputStream == null) {
-        LOG.fatal("Couldn't load grok-patterns file " + GROK_PATTERN_FILE + ". Things will not work");
+        logger.fatal("Couldn't load grok-patterns file " + GROK_PATTERN_FILE + ". Things will not work");
         return false;
       }
       grokPatternsReader = new InputStreamReader(fileInputStream);
     } catch (Throwable t) {
-      LOG.fatal("Error reading grok-patterns file " + GROK_PATTERN_FILE + " from classpath. Grok filtering will not work.", t);
+      logger.fatal("Error reading grok-patterns file " + GROK_PATTERN_FILE + " from classpath. Grok filtering will not work.", t);
       return false;
     }
     try {
       grok.addPatternFromReader(grokPatternsReader);
     } catch (GrokException e) {
-      LOG.fatal("Error loading patterns from grok-patterns reader for file " + GROK_PATTERN_FILE, e);
+      logger.fatal("Error loading patterns from grok-patterns reader for file " + GROK_PATTERN_FILE, e);
       return false;
     }
 
@@ -284,7 +285,7 @@ public class FilterGrok extends Filter<LogFeederProps> {
     String logMessageKey = this.getClass().getSimpleName() + "_PARSEERROR";
     int inputStrLength = inputStr != null ? inputStr.length() : 0;
     LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Error parsing string. length=" + inputStrLength + ", input=" +
-        getInput().getShortDescription() + ". First upto 100 characters=" + StringUtils.abbreviate(inputStr, 100), null, LOG,
+        getInput().getShortDescription() + ". First upto 100 characters=" + StringUtils.abbreviate(inputStr, 100), null, logger,
         Level.WARN);
   }
 
@@ -295,7 +296,7 @@ public class FilterGrok extends Filter<LogFeederProps> {
       try {
         applyMessage(strBuff.toString(), jsonObj, currMultilineJsonStr);
       } catch (Exception e) {
-        LOG.error(e.getLocalizedMessage(), e.getCause());
+        logger.error(e.getLocalizedMessage(), e.getCause());
       }
       strBuff = null;
       savedInputMarker = null;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterJSON.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterJSON.java
index 207d6f8..b7cf55d 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterJSON.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterJSON.java
@@ -25,14 +25,14 @@ import org.apache.ambari.logfeeder.plugin.filter.Filter;
 import org.apache.ambari.logfeeder.plugin.input.InputMarker;
 import org.apache.ambari.logfeeder.util.DateUtil;
 import org.apache.ambari.logfeeder.util.LogFeederUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Map;
 
 public class FilterJSON extends Filter<LogFeederProps> {
 
-  private static final Logger LOG = LoggerFactory.getLogger(FilterJSON.class);
+  private static final Logger logger = LogManager.getLogger(FilterJSON.class);
 
   @Override
   public void apply(String inputStr, InputMarker inputMarker) throws Exception {
@@ -40,7 +40,7 @@ public class FilterJSON extends Filter<LogFeederProps> {
     try {
       jsonMap = LogFeederUtil.toJSONObject(inputStr);
     } catch (Exception e) {
-      LOG.error(e.getLocalizedMessage());
+      logger.error(e.getLocalizedMessage());
       throw new LogFeederException("Json parsing failed for inputstr = " + inputStr ,e.getCause());
     }
     Double lineNumberD = (Double) jsonMap.get("line_number");
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterKeyValue.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterKeyValue.java
index 695c7e3..64f3763 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterKeyValue.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/filter/FilterKeyValue.java
@@ -26,8 +26,9 @@ import org.apache.ambari.logfeeder.plugin.input.InputMarker;
 import org.apache.ambari.logfeeder.util.LogFeederUtil;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterKeyValueDescriptor;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.HashMap;
 import java.util.List;
@@ -36,7 +37,7 @@ import java.util.regex.Pattern;
 
 public class FilterKeyValue extends Filter<LogFeederProps> {
 
-  private static final Logger LOG = Logger.getLogger(FilterKeyValue.class);
+  private static final Logger logger = LogManager.getLogger(FilterKeyValue.class);
 
   private String sourceField = null;
   private String valueSplit = "=";
@@ -54,10 +55,10 @@ public class FilterKeyValue extends Filter<LogFeederProps> {
     fieldSplit = StringUtils.defaultString(((FilterKeyValueDescriptor)getFilterDescriptor()).getFieldSplit(), fieldSplit);
     valueBorders = ((FilterKeyValueDescriptor)getFilterDescriptor()).getValueBorders();
 
-    LOG.info("init() done. source_field=" + sourceField + ", value_split=" + valueSplit + ", " + ", field_split=" +
+    logger.info("init() done. source_field=" + sourceField + ", value_split=" + valueSplit + ", " + ", field_split=" +
         fieldSplit + ", " + getShortDescription());
     if (StringUtils.isEmpty(sourceField)) {
-      LOG.fatal("source_field is not set for filter. Thiss filter will not be applied");
+      logger.fatal("source_field is not set for filter. Thiss filter will not be applied");
       return;
     }
   }
@@ -140,7 +141,7 @@ public class FilterKeyValue extends Filter<LogFeederProps> {
     errorMetric.value++;
     String logMessageKey = this.getClass().getSimpleName() + "_PARSEERROR";
     LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Error parsing string. length=" + inputStr.length() + ", input=" +
-        getInput().getShortDescription() + ". First upto 200 characters=" + StringUtils.abbreviate(inputStr, 200), null, LOG,
+        getInput().getShortDescription() + ". First upto 200 characters=" + StringUtils.abbreviate(inputStr, 200), null, logger,
         Level.ERROR);
   }
 
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputConfigUploader.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputConfigUploader.java
index 0c551cd..12198ee 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputConfigUploader.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputConfigUploader.java
@@ -23,8 +23,8 @@ import org.apache.ambari.logfeeder.loglevelfilter.LogLevelFilterHandler;
 import org.apache.ambari.logfeeder.common.ConfigHandler;
 import org.apache.ambari.logfeeder.conf.LogFeederProps;
 import org.apache.ambari.logsearch.config.api.LogSearchConfigLogFeeder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
@@ -37,7 +37,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 public class InputConfigUploader extends Thread {
-  protected static final Logger LOG = LoggerFactory.getLogger(InputConfigUploader.class);
+  private static final Logger logger = LogManager.getLogger(InputConfigUploader.class);
 
   private static final long SLEEP_BETWEEN_CHECK = 2000;
 
@@ -87,18 +87,18 @@ public class InputConfigUploader extends Thread {
               }
               filesHandled.add(inputConfigFile.getAbsolutePath());
             } catch (Exception e) {
-              LOG.warn("Error handling file " + inputConfigFile.getAbsolutePath(), e);
+              logger.warn("Error handling file " + inputConfigFile.getAbsolutePath(), e);
             }
           }
         }
       } else {
-        LOG.warn("Cannot find input config files in config dir ({})", logFeederProps.getConfDir());
+        logger.warn("Cannot find input config files in config dir ({})", logFeederProps.getConfDir());
       }
 
       try {
         Thread.sleep(SLEEP_BETWEEN_CHECK);
       } catch (InterruptedException e) {
-        LOG.debug("Interrupted during sleep", e);
+        logger.debug("Interrupted during sleep", e);
       }
     }
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputFile.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputFile.java
index c31f404..022dc01 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputFile.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputFile.java
@@ -20,8 +20,8 @@ package org.apache.ambari.logfeeder.input;
 
 import org.apache.ambari.logfeeder.conf.LogEntryCacheConfig;
 import org.apache.ambari.logfeeder.conf.LogFeederProps;
-import org.apache.ambari.logfeeder.docker.DockerContainerRegistry;
-import org.apache.ambari.logfeeder.docker.DockerMetadata;
+import org.apache.ambari.logfeeder.container.docker.DockerContainerRegistry;
+import org.apache.ambari.logfeeder.container.docker.DockerMetadata;
 import org.apache.ambari.logfeeder.input.monitor.DockerLogFileUpdateMonitor;
 import org.apache.ambari.logfeeder.input.monitor.LogFileDetachMonitor;
 import org.apache.ambari.logfeeder.input.monitor.LogFilePathUpdateMonitor;
@@ -36,9 +36,9 @@ import org.apache.commons.lang.BooleanUtils;
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.common.util.Base64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -46,7 +46,7 @@ import java.util.*;
 
 public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileBaseDescriptor> {
 
-  private static final Logger LOG = LoggerFactory.getLogger(InputFile.class);
+  private static final Logger logger = LogManager.getLogger(InputFile.class);
 
   private static final boolean DEFAULT_TAIL = true;
   private static final boolean DEFAULT_USE_EVENT_MD5 = false;
@@ -102,7 +102,7 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
             isReady = true;
           }
         } else {
-          LOG.warn("Docker registry is not set, probably docker registry usage is not enabled.");
+          logger.warn("Docker registry is not set, probably docker registry usage is not enabled.");
         }
       } else {
         logFiles = getActualInputLogFiles();
@@ -110,13 +110,13 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
         setFolderMap(foldersMap);
         if (!ArrayUtils.isEmpty(logFiles) && logFiles[0].isFile()) {
           if (tail && logFiles.length > 1) {
-            LOG.warn("Found multiple files (" + logFiles.length + ") for the file filter " + filePath +
+            logger.warn("Found multiple files (" + logFiles.length + ") for the file filter " + filePath +
               ". Will follow only the first one. Using " + logFiles[0].getAbsolutePath());
           }
-          LOG.info("File filter " + filePath + " expanded to " + logFiles[0].getAbsolutePath());
+          logger.info("File filter " + filePath + " expanded to " + logFiles[0].getAbsolutePath());
           isReady = true;
         } else {
-          LOG.debug(logPath + " file doesn't exist. Ignoring for now");
+          logger.debug(logPath + " file doesn't exist. Ignoring for now");
         }
       }
     }
@@ -134,7 +134,7 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
       try {
         return (getType() + "=" + (new File(filePath)).getName());
       } catch (Throwable ex) {
-        LOG.warn("Couldn't get basename for filePath=" + filePath, ex);
+        logger.warn("Couldn't get basename for filePath=" + filePath, ex);
       }
     }
     return super.getNameForThread() + ":" + getType();
@@ -202,7 +202,7 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
           throw new RuntimeException(e);
         }
       } else {
-        LOG.info("Starting thread. " + getShortDescription());
+        logger.info("Starting thread. " + getShortDescription());
         thread = new Thread(this, getNameForThread());
         thread.start();
       }
@@ -221,7 +221,7 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
   @Override
   public void init(LogFeederProps logFeederProps) throws Exception {
     super.init(logFeederProps);
-    LOG.info("init() called");
+    logger.info("init() called");
 
     InputFileDescriptor inputFileDescriptor = (InputFileDescriptor) getInputDescriptor(); // cast as InputS3 uses InputFileBaseDescriptor
     checkPointExtension = logFeederProps.getCheckPointExtension();
@@ -239,14 +239,14 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
     if (dockerLog) {
       if (logFeederProps.isDockerContainerRegistryEnabled()) {
         boolean isFileReady = isReady();
-        LOG.info("Container type to monitor " + getType() + ", tail=" + tail + ", isReady=" + isFileReady);
+        logger.info("Container type to monitor " + getType() + ", tail=" + tail + ", isReady=" + isFileReady);
       } else {
-        LOG.warn("Using docker input, but docker registry usage is not enabled.");
+        logger.warn("Using docker input, but docker registry usage is not enabled.");
       }
     } else {
       logPath = getInputDescriptor().getPath();
       if (StringUtils.isEmpty(logPath)) {
-        LOG.error("path is empty for file input. " + getShortDescription());
+        logger.error("path is empty for file input. " + getShortDescription());
         return;
       }
 
@@ -256,12 +256,12 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
         int lastIndexOfSlash = getFilePath().lastIndexOf("/");
         String folderBeforeLogName = getFilePath().substring(0, lastIndexOfSlash);
         if (folderBeforeLogName.contains("*")) {
-          LOG.info("Found regex in folder path ('" + getFilePath() + "'), will check against multiple folders.");
+          logger.info("Found regex in folder path ('" + getFilePath() + "'), will check against multiple folders.");
           setMultiFolder(true);
         }
       }
       boolean isFileReady = isReady();
-      LOG.info("File to monitor " + logPath + ", tail=" + tail + ", isReady=" + isFileReady);
+      logger.info("File to monitor " + logPath + ", tail=" + tail + ", isReady=" + isFileReady);
     }
 
     LogEntryCacheConfig cacheConfig = logFeederProps.getLogEntryCacheConfig();
@@ -288,11 +288,11 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
           try {
             processFile(file, i == 0);
             if (isClosed() || isDrain()) {
-              LOG.info("isClosed or isDrain. Now breaking loop.");
+              logger.info("isClosed or isDrain. Now breaking loop.");
               break;
             }
           } catch (Throwable t) {
-            LOG.error("Error processing file=" + file.getAbsolutePath(), t);
+            logger.error("Error processing file=" + file.getAbsolutePath(), t);
           }
         }
       }
@@ -314,7 +314,7 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
     BufferedReader br = new BufferedReader(LogsearchReaderFactory.INSTANCE.getReader(logFile));
     fileKey = getFileKeyFromLogFile(logFile);
     base64FileKey = Base64.byteArrayToBase64(fileKey.toString().getBytes());
-    LOG.info("fileKey=" + fileKey + ", base64=" + base64FileKey + ". " + getShortDescription());
+    logger.info("fileKey=" + fileKey + ", base64=" + base64FileKey + ". " + getShortDescription());
     return br;
   }
 
@@ -330,18 +330,18 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
           InputFileMarker marker = new InputFileMarker(this, null, 0);
           getOutputManager().copyFile(file, marker);
           if (isClosed() || isDrain()) {
-            LOG.info("isClosed or isDrain. Now breaking loop.");
+            logger.info("isClosed or isDrain. Now breaking loop.");
             break;
           }
         } catch (Throwable t) {
-          LOG.error("Error processing file=" + file.getAbsolutePath(), t);
+          logger.error("Error processing file=" + file.getAbsolutePath(), t);
         }
       }
     }
   }
 
   public void startNewChildDockerInputFileThread(DockerMetadata dockerMetadata) throws CloneNotSupportedException {
-    LOG.info("Start docker child input thread - " + dockerMetadata.getLogPath());
+    logger.info("Start docker child input thread - " + dockerMetadata.getLogPath());
     InputFile clonedObject = (InputFile) this.clone();
     clonedObject.setDockerLogParent(false);
     clonedObject.logPath = dockerMetadata.getLogPath();
@@ -357,7 +357,7 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
   }
 
   public void stopChildDockerInputFileThread(String logPathKey) {
-    LOG.info("Stop child input thread - " + logPathKey);
+    logger.info("Stop child input thread - " + logPathKey);
     String filePath = new File(logPathKey).getName();
     if (inputChildMap.containsKey(logPathKey)) {
       InputFile inputFile = inputChildMap.get(logPathKey);
@@ -367,18 +367,18 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
       }
       inputChildMap.remove(logPathKey);
     } else {
-      LOG.warn(logPathKey + " not found as an input child.");
+      logger.warn(logPathKey + " not found as an input child.");
     }
   }
 
   public void startNewChildInputFileThread(Map.Entry<String, List<File>> folderFileEntry) throws CloneNotSupportedException {
-    LOG.info("Start child input thread - " + folderFileEntry.getKey());
+    logger.info("Start child input thread - " + folderFileEntry.getKey());
     InputFile clonedObject = (InputFile) this.clone();
     String folderPath = folderFileEntry.getKey();
     String filePath = new File(getFilePath()).getName();
     String fullPathWithWildCard = String.format("%s/%s", folderPath, filePath);
     if (clonedObject.getMaxAgeMin() != 0 && FileUtil.isFileTooOld(new File(fullPathWithWildCard), clonedObject.getMaxAgeMin().longValue())) {
-      LOG.info(String.format("File ('%s') is too old (max age min: %d), monitor thread not starting...", getFilePath(), clonedObject.getMaxAgeMin()));
+      logger.info(String.format("File ('%s') is too old (max age min: %d), monitor thread not starting...", getFilePath(), clonedObject.getMaxAgeMin()));
     } else {
       clonedObject.setMultiFolder(false);
       clonedObject.logFiles = folderFileEntry.getValue().toArray(new File[0]); // TODO: works only with tail
@@ -397,7 +397,7 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
   private void copyFilters(InputFile clonedInput, Filter firstFilter) {
     if (firstFilter != null) {
       try {
-        LOG.info("Cloning filters for input=" + clonedInput.logPath);
+        logger.info("Cloning filters for input=" + clonedInput.logPath);
         Filter newFilter = (Filter) firstFilter.clone();
         newFilter.setInput(clonedInput);
         clonedInput.setFirstFilter(newFilter);
@@ -415,15 +415,15 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
             actFilter = null;
           }
         }
-        LOG.info("Cloning filters has finished for input=" + clonedInput.logPath);
+        logger.info("Cloning filters has finished for input=" + clonedInput.logPath);
       } catch (Exception e) {
-        LOG.error("Could not clone filters for input=" + clonedInput.logPath);
+        logger.error("Could not clone filters for input=" + clonedInput.logPath);
       }
     }
   }
 
   public void stopChildInputFileThread(String folderPathKey) {
-    LOG.info("Stop child input thread - " + folderPathKey);
+    logger.info("Stop child input thread - " + folderPathKey);
     String filePath = new File(getFilePath()).getName();
     String fullPathWithWildCard = String.format("%s/%s", folderPathKey, filePath);
     if (inputChildMap.containsKey(fullPathWithWildCard)) {
@@ -434,7 +434,7 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
       }
       inputChildMap.remove(fullPathWithWildCard);
     } else {
-      LOG.warn(fullPathWithWildCard + " not found as an input child.");
+      logger.warn(fullPathWithWildCard + " not found as an input child.");
     }
   }
 
@@ -451,15 +451,15 @@ public class InputFile extends Input<LogFeederProps, InputFileMarker, InputFileB
 
   @Override
   public boolean logConfigs() {
-    LOG.info("Printing Input=" + getShortDescription());
-    LOG.info("description=" + getInputDescriptor().getPath());
+    logger.info("Printing Input=" + getShortDescription());
+    logger.info("description=" + getInputDescriptor().getPath());
     return true;
   }
 
   @Override
   public void close() {
     super.close();
-    LOG.info("close() calling checkPoint checkIn(). " + getShortDescription());
+    logger.info("close() calling checkPoint checkIn(). " + getShortDescription());
     lastCheckIn();
     setClosed(true);
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputManagerImpl.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputManagerImpl.java
index a256fd7..91ffd5e 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputManagerImpl.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputManagerImpl.java
@@ -20,16 +20,16 @@ package org.apache.ambari.logfeeder.input;
 
 import com.google.common.annotations.VisibleForTesting;
 import org.apache.ambari.logfeeder.conf.LogFeederProps;
-import org.apache.ambari.logfeeder.docker.DockerContainerRegistry;
-import org.apache.ambari.logfeeder.docker.DockerContainerRegistryMonitor;
+import org.apache.ambari.logfeeder.container.docker.DockerContainerRegistry;
+import org.apache.ambari.logfeeder.container.docker.DockerContainerRegistryMonitor;
 import org.apache.ambari.logfeeder.plugin.manager.CheckpointManager;
 import org.apache.ambari.logfeeder.plugin.common.MetricData;
 import org.apache.ambari.logfeeder.plugin.input.Input;
 import org.apache.ambari.logfeeder.plugin.manager.InputManager;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.inject.Inject;
-import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -40,7 +40,7 @@ import java.util.Set;
 
 public class InputManagerImpl extends InputManager {
 
-  private static final Logger LOG = Logger.getLogger(InputManagerImpl.class);
+  private static final Logger logger = LogManager.getLogger(InputManagerImpl.class);
 
   private Map<String, List<Input>> inputs = new HashMap<>();
   private Set<Input> notReadyList = new HashSet<>();
@@ -91,13 +91,13 @@ public class InputManagerImpl extends InputManager {
 
   @Override
   public void removeInput(Input input) {
-    LOG.info("Trying to remove from inputList. " + input.getShortDescription());
+    logger.info("Trying to remove from inputList. " + input.getShortDescription());
     for (List<Input> inputList : inputs.values()) {
       Iterator<Input> iter = inputList.iterator();
       while (iter.hasNext()) {
         Input iterInput = iter.next();
         if (iterInput.equals(input)) {
-          LOG.info("Removing Input from inputList. " + input.getShortDescription());
+          logger.info("Removing Input from inputList. " + input.getShortDescription());
           iter.remove();
         }
       }
@@ -135,10 +135,10 @@ public class InputManagerImpl extends InputManager {
     inputIsReadyMonitor = new Thread("InputIsReadyMonitor") {
       @Override
       public void run() {
-        LOG.info("Going to monitor for these missing files: " + notReadyList.toString());
+        logger.info("Going to monitor for these missing files: " + notReadyList.toString());
         while (true) {
           if (isDrain) {
-            LOG.info("Exiting missing file monitor.");
+            logger.info("Exiting missing file monitor.");
             break;
           }
           try {
@@ -151,7 +151,7 @@ public class InputManagerImpl extends InputManager {
                   iter.remove();
                 }
               } catch (Throwable t) {
-                LOG.error("Error while enabling monitoring for input. " + input.getShortDescription());
+                logger.error("Error while enabling monitoring for input. " + input.getShortDescription());
               }
             }
             Thread.sleep(30 * 1000);
@@ -176,12 +176,12 @@ public class InputManagerImpl extends InputManager {
         if (input.isReady()) {
           input.monitor();
         } else {
-          LOG.info("Adding input to not ready list. Note, it is possible this component is not run on this host. " +
+          logger.info("Adding input to not ready list. Note, it is possible this component is not run on this host. " +
             "So it might not be an issue. " + input.getShortDescription());
           notReadyList.add(input);
         }
       } catch (Exception e) {
-        LOG.error("Error initializing input. " + input.getShortDescription(), e);
+        logger.error("Error initializing input. " + input.getShortDescription(), e);
       }
     }
   }
@@ -254,7 +254,7 @@ public class InputManagerImpl extends InputManager {
         try {
           input.setDrain(true);
         } catch (Throwable t) {
-          LOG.error("Error while draining. input=" + input.getShortDescription(), t);
+          logger.error("Error while draining. input=" + input.getShortDescription(), t);
         }
       }
     }
@@ -270,7 +270,7 @@ public class InputManagerImpl extends InputManager {
           if (!input.isClosed()) {
             try {
               allClosed = false;
-              LOG.warn("Waiting for input to close. " + input.getShortDescription() + ", " + (iterations - i) + " more seconds");
+              logger.warn("Waiting for input to close. " + input.getShortDescription() + ", " + (iterations - i) + " more seconds");
               Thread.sleep(waitTimeMS);
             } catch (Throwable t) {
               // Ignore
@@ -279,16 +279,16 @@ public class InputManagerImpl extends InputManager {
         }
       }
       if (allClosed) {
-        LOG.info("All inputs are closed. Iterations=" + i);
+        logger.info("All inputs are closed. Iterations=" + i);
         return;
       }
     }
 
-    LOG.warn("Some inputs were not closed after " + iterations + " iterations");
+    logger.warn("Some inputs were not closed after " + iterations + " iterations");
     for (List<Input> inputList : inputs.values()) {
       for (Input input : inputList) {
         if (!input.isClosed()) {
-          LOG.warn("Input not closed. Will ignore it." + input.getShortDescription());
+          logger.warn("Input not closed. Will ignore it." + input.getShortDescription());
         }
       }
     }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputS3File.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputS3File.java
index 41db8bd..c4d5fb9 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputS3File.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputS3File.java
@@ -18,19 +18,20 @@
  */
 package org.apache.ambari.logfeeder.input;
 
+import org.apache.ambari.logfeeder.output.S3OutputConfiguration;
 import org.apache.ambari.logfeeder.util.S3Util;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.InputS3FileDescriptor;
 import org.apache.commons.lang.ArrayUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.common.util.Base64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.BufferedReader;
 import java.io.File;
 
 public class InputS3File extends InputFile {
 
-  private static final Logger LOG = LoggerFactory.getLogger(InputS3File.class);
+  private static final Logger logger = LogManager.getLogger(InputS3File.class);
 
   @Override
   public boolean isReady() {
@@ -39,13 +40,13 @@ public class InputS3File extends InputFile {
       setLogFiles(getActualFiles(getLogPath()));
       if (!ArrayUtils.isEmpty(getLogFiles())) {
         if (isTail() && getLogFiles().length > 1) {
-          LOG.warn("Found multiple files (" + getLogFiles().length + ") for the file filter " + getFilePath() +
+          logger.warn("Found multiple files (" + getLogFiles().length + ") for the file filter " + getFilePath() +
               ". Will use only the first one. Using " + getLogFiles()[0].getAbsolutePath());
         }
-        LOG.info("File filter " + getFilePath() + " expanded to " + getLogFiles()[0].getAbsolutePath());
+        logger.info("File filter " + getFilePath() + " expanded to " + getLogFiles()[0].getAbsolutePath());
         setReady(true);
       } else {
-        LOG.debug(getLogPath() + " file doesn't exist. Ignoring for now");
+        logger.debug(getLogPath() + " file doesn't exist. Ignoring for now");
       }
     }
     return isReady();
@@ -67,11 +68,11 @@ public class InputS3File extends InputFile {
         try {
           processFile(file, i == 0);
           if (isClosed() || isDrain()) {
-            LOG.info("isClosed or isDrain. Now breaking loop.");
+            logger.info("isClosed or isDrain. Now breaking loop.");
             break;
           }
         } catch (Throwable t) {
-          LOG.error("Error processing file=" + file.getAbsolutePath(), t);
+          logger.error("Error processing file=" + file.getAbsolutePath(), t);
         }
       }
     }
@@ -82,12 +83,16 @@ public class InputS3File extends InputFile {
   public BufferedReader openLogFile(File logPathFile) throws Exception {
     String s3AccessKey = ((InputS3FileDescriptor)getInputDescriptor()).getS3AccessKey();
     String s3SecretKey = ((InputS3FileDescriptor)getInputDescriptor()).getS3SecretKey();
-    BufferedReader br = S3Util.getReader(logPathFile.getPath(), s3AccessKey, s3SecretKey);
+    String s3Endpoint = ((InputS3FileDescriptor)getInputDescriptor()).getS3Endpoint();
+    if (s3Endpoint == null) {
+      s3Endpoint = S3OutputConfiguration.DEFAULT_S3_ENDPOINT;
+    }
+    BufferedReader br = S3Util.getReader(logPathFile.getPath(), s3Endpoint, s3AccessKey, s3SecretKey);
     Object fileKey = getFileKey(logPathFile);
     setFileKey(fileKey);
     String base64FileKey = Base64.byteArrayToBase64(getFileKey().toString().getBytes());
     setBase64FileKey(base64FileKey);
-    LOG.info("fileKey=" + fileKey + ", base64=" + base64FileKey + ". " + getShortDescription());
+    logger.info("fileKey=" + fileKey + ", base64=" + base64FileKey + ". " + getShortDescription());
     return br;
   }
 
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSimulate.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSimulate.java
index 13b00e3..5609f61 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSimulate.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSimulate.java
@@ -29,9 +29,9 @@ import org.apache.ambari.logsearch.config.api.model.inputconfig.InputDescriptor;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.FilterJsonDescriptorImpl;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputDescriptorImpl;
 import org.apache.commons.collections.MapUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.common.util.Base64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.net.InetAddress;
 import java.util.ArrayList;
@@ -46,7 +46,7 @@ import java.util.TreeSet;
 import java.util.concurrent.atomic.AtomicInteger;
 
 public class InputSimulate extends InputFile {
-  private static final Logger LOG = LoggerFactory.getLogger(InputSimulate.class);
+  private static final Logger logger = LogManager.getLogger(InputSimulate.class);
   private static final String LOG_TEXT_PATTERN = "{ logtime=\"%d\", level=\"%s\", log_message=\"%s\", host=\"%s\"}";
 
   private static final Map<String, String> typeToFilePath = new HashMap<>();
@@ -114,7 +114,7 @@ public class InputSimulate extends InputFile {
       simulateOutputs.add(outputCopy);
       super.addOutput(outputCopy);
     } catch (Exception e) {
-      LOG.warn("Could not copy Output class " + output.getClass() + ", using original output");
+      logger.warn("Could not copy Output class " + output.getClass() + ", using original output");
       super.addOutput(output);
     }
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSocket.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSocket.java
index 36b4301..554923a 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSocket.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/InputSocket.java
@@ -24,8 +24,8 @@ import org.apache.ambari.logsearch.appender.LogsearchConversion;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.InputSocketDescriptor;
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.log4j.spi.LoggingEvent;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.net.ServerSocketFactory;
 import javax.net.ssl.SSLServerSocketFactory;
@@ -39,7 +39,7 @@ import java.net.SocketException;
 
 public class InputSocket extends Input<LogFeederProps, InputSocketMarker, InputSocketDescriptor> {
 
-  private static final Logger LOG = LoggerFactory.getLogger(InputSocket.class);
+  private static final Logger logger = LogManager.getLogger(InputSocket.class);
 
   private ServerSocket serverSocket;
   private Thread thread;
@@ -64,7 +64,7 @@ public class InputSocket extends Input<LogFeederProps, InputSocketMarker, InputS
   @Override
   public boolean monitor() {
     if (isReady()) {
-      LOG.info("Start monitoring socket thread...");
+      logger.info("Start monitoring socket thread...");
       thread = new Thread(this, getNameForThread());
       thread.start();
       return true;
@@ -75,7 +75,7 @@ public class InputSocket extends Input<LogFeederProps, InputSocketMarker, InputS
 
   @Override
   public void start() throws Exception {
-    LOG.info("Starting socket server (port: {}, protocol: {}, secure: {})", port, protocol, secure);
+    logger.info("Starting socket server (port: {}, protocol: {}, secure: {})", port, protocol, secure);
     ServerSocketFactory socketFactory = secure ? SSLServerSocketFactory.getDefault() : ServerSocketFactory.getDefault();
     InputSocketMarker inputSocketMarker = new InputSocketMarker(this, port, protocol, secure, log4j);
     LogsearchConversion loggerConverter = new LogsearchConversion();
@@ -88,19 +88,19 @@ public class InputSocket extends Input<LogFeederProps, InputSocketMarker, InputS
           try (ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()))) {
             LoggingEvent loggingEvent = (LoggingEvent) ois.readObject();
             String jsonStr = loggerConverter.createOutput(loggingEvent);
-            LOG.trace("Incoming socket logging event: " + jsonStr);
+            logger.trace("Incoming socket logging event: " + jsonStr);
             outputLine(jsonStr, inputSocketMarker);
           }
         } else {
           try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));) {
             String line = in.readLine();
-            LOG.trace("Incoming socket message: " + line);
+            logger.trace("Incoming socket message: " + line);
             outputLine(line, inputSocketMarker);
           }
         }
       }
     } catch (SocketException socketEx) {
-      LOG.warn("{}", socketEx.getMessage());
+      logger.warn("{}", socketEx.getMessage());
     } finally {
       serverSocket.close();
     }
@@ -109,12 +109,12 @@ public class InputSocket extends Input<LogFeederProps, InputSocketMarker, InputS
   @Override
   public void setDrain(boolean drain) {
     super.setDrain(drain);
-    LOG.info("Stopping socket input: {}", getShortDescription());
+    logger.info("Stopping socket input: {}", getShortDescription());
     try {
       serverSocket.close();
       setClosed(true);
     } catch (Exception e) {
-      LOG.error("Error during closing socket input.", e);
+      logger.error("Error during closing socket input.", e);
     }
   }
 
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/ProcessFileHelper.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/ProcessFileHelper.java
index 4ed415a..e3d34cd 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/ProcessFileHelper.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/ProcessFileHelper.java
@@ -21,21 +21,22 @@ package org.apache.ambari.logfeeder.input.file;
 import org.apache.ambari.logfeeder.input.InputFile;
 import org.apache.ambari.logfeeder.input.InputFileMarker;
 import org.apache.ambari.logfeeder.util.LogFeederUtil;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.BufferedReader;
 import java.io.File;
 
 public class ProcessFileHelper {
 
-  private static final Logger LOG = Logger.getLogger(ProcessFileHelper.class);
+  private static final Logger logger = LogManager.getLogger(ProcessFileHelper.class);
 
   private ProcessFileHelper() {
   }
 
   public static void processFile(InputFile inputFile, File logPathFile, boolean follow) throws Exception {
-    LOG.info("Monitoring logPath=" + inputFile.getLogPath() + ", logPathFile=" + logPathFile);
+    logger.info("Monitoring logPath=" + inputFile.getLogPath() + ", logPathFile=" + logPathFile);
     BufferedReader br = null;
 
     int lineCount = 0;
@@ -47,7 +48,7 @@ public class ProcessFileHelper {
       boolean resume = true;
       int resumeFromLineNumber = inputFile.getResumeFromLineNumber();
       if (resumeFromLineNumber > 0) {
-        LOG.info("Resuming log file " + logPathFile.getAbsolutePath() + " from line number " + resumeFromLineNumber);
+        logger.info("Resuming log file " + logPathFile.getAbsolutePath() + " from line number " + resumeFromLineNumber);
         resume = false;
       }
 
@@ -69,36 +70,36 @@ public class ProcessFileHelper {
             if (sleepIteration == 2) {
               inputFile.flush();
               if (!follow) {
-                LOG.info("End of file. Done with filePath=" + logPathFile.getAbsolutePath() + ", lineCount=" + lineCount);
+                logger.info("End of file. Done with filePath=" + logPathFile.getAbsolutePath() + ", lineCount=" + lineCount);
                 break;
               }
             } else if (sleepIteration > 4) {
               Object newFileKey = inputFile.getFileKeyFromLogFile(logPathFile);
               if (newFileKey != null && (inputFile.getFileKey() == null || !newFileKey.equals(inputFile.getFileKey()))) {
-                LOG.info("File key is different. Marking this input file for rollover. oldKey=" + inputFile.getFileKey() + ", newKey=" +
+                logger.info("File key is different. Marking this input file for rollover. oldKey=" + inputFile.getFileKey() + ", newKey=" +
                   newFileKey + ". " + inputFile.getShortDescription());
 
                 try {
-                  LOG.info("File is rolled over. Closing current open file." + inputFile.getShortDescription() + ", lineCount=" +
+                  logger.info("File is rolled over. Closing current open file." + inputFile.getShortDescription() + ", lineCount=" +
                     lineCount);
                   br.close();
                 } catch (Exception ex) {
-                  LOG.error("Error closing file" + inputFile.getShortDescription(), ex);
+                  logger.error("Error closing file" + inputFile.getShortDescription(), ex);
                   break;
                 }
 
                 try {
-                  LOG.info("Opening new rolled over file." + inputFile.getShortDescription());
+                  logger.info("Opening new rolled over file." + inputFile.getShortDescription());
                   br = inputFile.openLogFile(logPathFile);
                   lineCount = 0;
                 } catch (Exception ex) {
-                  LOG.error("Error opening rolled over file. " + inputFile.getShortDescription(), ex);
-                  LOG.info("Added input to not ready list." + inputFile.getShortDescription());
+                  logger.error("Error opening rolled over file. " + inputFile.getShortDescription(), ex);
+                  logger.info("Added input to not ready list." + inputFile.getShortDescription());
                   inputFile.setReady(false);
                   inputFile.getInputManager().addToNotReady(inputFile);
                   break;
                 }
-                LOG.info("File is successfully rolled over. " + inputFile.getShortDescription());
+                logger.info("File is successfully rolled over. " + inputFile.getShortDescription());
                 continue;
               }
             }
@@ -106,7 +107,7 @@ public class ProcessFileHelper {
               Thread.sleep(sleepStep * 1000);
               sleepStep = Math.min(sleepStep * 2, 10);
             } catch (InterruptedException e) {
-              LOG.info("Thread interrupted." + inputFile.getShortDescription());
+              logger.info("Thread interrupted." + inputFile.getShortDescription());
             }
           } else {
             lineCount++;
@@ -114,7 +115,7 @@ public class ProcessFileHelper {
             sleepIteration = 0;
 
             if (!resume && lineCount > resumeFromLineNumber) {
-              LOG.info("Resuming to read from last line. lineCount=" + lineCount + ", input=" + inputFile.getShortDescription());
+              logger.info("Resuming to read from last line. lineCount=" + lineCount + ", input=" + inputFile.getShortDescription());
               resume = true;
             }
             if (resume) {
@@ -125,12 +126,12 @@ public class ProcessFileHelper {
         } catch (Throwable t) {
           String logMessageKey = inputFile.getClass().getSimpleName() + "_READ_LOOP_EXCEPTION";
           LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Caught exception in read loop. lineNumber=" + lineCount +
-            ", input=" + inputFile.getShortDescription(), t, LOG, Level.ERROR);
+            ", input=" + inputFile.getShortDescription(), t, logger, Level.ERROR);
         }
       }
     } finally {
       if (br != null) {
-        LOG.info("Closing reader." + inputFile.getShortDescription() + ", lineCount=" + lineCount);
+        logger.info("Closing reader." + inputFile.getShortDescription() + ", lineCount=" + lineCount);
         try {
           br.close();
         } catch (Throwable t) {
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/FileCheckpointManager.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/FileCheckpointManager.java
index 69c21fb..bdd775a 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/FileCheckpointManager.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/FileCheckpointManager.java
@@ -28,10 +28,9 @@ import org.apache.ambari.logfeeder.input.file.checkpoint.util.ResumeLineNumberHe
 import org.apache.ambari.logfeeder.input.monitor.CheckpointCleanupMonitor;
 import org.apache.ambari.logfeeder.plugin.manager.CheckpointManager;
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
-import java.io.EOFException;
 import java.io.File;
 import java.io.IOException;
 import java.util.Map;
@@ -40,7 +39,7 @@ import java.util.stream.Stream;
 
 public class FileCheckpointManager implements CheckpointManager<InputFile, InputFileMarker, LogFeederProps> {
 
-  private static final Logger LOG = LoggerFactory.getLogger(FileCheckpointManager.class);
+  private static final Logger logger = LogManager.getLogger(FileCheckpointManager.class);
 
   private static final String CHECKPOINT_SUBFOLDER_NAME = "logfeeder_checkpoints";
 
@@ -50,7 +49,7 @@ public class FileCheckpointManager implements CheckpointManager<InputFile, Input
   @Override
   public void init(LogFeederProps logFeederProps) {
     checkPointExtension = logFeederProps.getCheckPointExtension();
-    LOG.info("Determining valid checkpoint folder");
+    logger.info("Determining valid checkpoint folder");
     boolean isCheckPointFolderValid = false;
     // We need to keep track of the files we are reading.
     String checkPointFolder = logFeederProps.getCheckpointFolder();
@@ -62,16 +61,16 @@ public class FileCheckpointManager implements CheckpointManager<InputFile, Input
     if (!isCheckPointFolderValid) {
       // Let's use tmp folder
       checkPointFolderFile = new File(logFeederProps.getTmpDir(), CHECKPOINT_SUBFOLDER_NAME);
-      LOG.info("Checking if tmp folder can be used for checkpoints. Folder=" + checkPointFolderFile);
+      logger.info("Checking if tmp folder can be used for checkpoints. Folder=" + checkPointFolderFile);
       isCheckPointFolderValid = verifyCheckPointFolder(checkPointFolderFile);
       if (isCheckPointFolderValid) {
-        LOG.warn("Using tmp folder " + checkPointFolderFile + " to store check points. This is not recommended." +
+        logger.warn("Using tmp folder " + checkPointFolderFile + " to store check points. This is not recommended." +
           "Please set logfeeder.checkpoint.folder property");
       }
     }
 
     if (isCheckPointFolderValid) {
-      LOG.info("Using folder " + checkPointFolderFile + " for storing checkpoints");
+      logger.info("Using folder " + checkPointFolderFile + " for storing checkpoints");
       // check checkpoint cleanup every 2000 min
       Thread checkpointCleanupThread = new Thread(new CheckpointCleanupMonitor(this, 2000),"checkpoint_cleanup");
       checkpointCleanupThread.setDaemon(true);
@@ -161,10 +160,10 @@ public class FileCheckpointManager implements CheckpointManager<InputFile, Input
     if (!folderPathFile.exists()) {
       try {
         if (!folderPathFile.mkdir()) {
-          LOG.warn("Error creating folder for check point. folder=" + folderPathFile);
+          logger.warn("Error creating folder for check point. folder=" + folderPathFile);
         }
       } catch (Throwable t) {
-        LOG.warn("Error creating folder for check point. folder=" + folderPathFile, t);
+        logger.warn("Error creating folder for check point. folder=" + folderPathFile, t);
       }
     }
 
@@ -175,7 +174,7 @@ public class FileCheckpointManager implements CheckpointManager<InputFile, Input
         testFile.createNewFile();
         return testFile.delete();
       } catch (IOException e) {
-        LOG.warn("Couldn't create test file in " + folderPathFile.getAbsolutePath() + " for checkPoint", e);
+        logger.warn("Couldn't create test file in " + folderPathFile.getAbsolutePath() + " for checkPoint", e);
       }
     }
     return false;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/FileCheckInHelper.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/FileCheckInHelper.java
index b217e34..2b52661 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/FileCheckInHelper.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/FileCheckInHelper.java
@@ -22,8 +22,9 @@ import org.apache.ambari.logfeeder.input.InputFile;
 import org.apache.ambari.logfeeder.input.InputFileMarker;
 import org.apache.ambari.logfeeder.util.FileUtil;
 import org.apache.ambari.logfeeder.util.LogFeederUtil;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.io.RandomAccessFile;
@@ -32,7 +33,7 @@ import java.util.Map;
 
 public class FileCheckInHelper {
 
-  private static final Logger LOG = Logger.getLogger(FileCheckInHelper.class);
+  private static final Logger logger = LogManager.getLogger(FileCheckInHelper.class);
 
   private FileCheckInHelper() {
   }
@@ -82,12 +83,12 @@ public class FileCheckInHelper {
       if (inputFile.isClosed()) {
         String logMessageKey = inputFile.getClass().getSimpleName() + "_FINAL_CHECKIN";
         LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Wrote final checkPoint, input=" + inputFile.getShortDescription() +
-          ", checkPointFile=" + checkPointFile.getAbsolutePath() + ", checkPoint=" + jsonStr, null, LOG, Level.INFO);
+          ", checkPointFile=" + checkPointFile.getAbsolutePath() + ", checkPoint=" + jsonStr, null, logger, Level.INFO);
       }
     } catch (Throwable t) {
       String logMessageKey = inputFile.getClass().getSimpleName() + "_CHECKIN_EXCEPTION";
       LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Caught exception checkIn. , input=" + inputFile.getShortDescription(), t,
-        LOG, Level.ERROR);
+        logger, Level.ERROR);
     }
   }
 
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/FileCheckpointCleanupHelper.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/FileCheckpointCleanupHelper.java
index 91b5383..d38d14d 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/FileCheckpointCleanupHelper.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/FileCheckpointCleanupHelper.java
@@ -20,9 +20,9 @@ package org.apache.ambari.logfeeder.input.file.checkpoint.util;
 
 import org.apache.ambari.logfeeder.util.FileUtil;
 import org.apache.ambari.logfeeder.util.LogFeederUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.common.util.Base64;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.EOFException;
 import java.io.File;
@@ -31,17 +31,17 @@ import java.util.Map;
 
 public class FileCheckpointCleanupHelper {
 
-  private static final Logger LOG = LoggerFactory.getLogger(FileCheckpointCleanupHelper.class);
+  private static final Logger logger = LogManager.getLogger(FileCheckpointCleanupHelper.class);
 
   private FileCheckpointCleanupHelper() {
   }
 
   public static void cleanCheckPointFiles(File checkPointFolderFile, String checkPointExtension) {
     if (checkPointFolderFile == null) {
-      LOG.info("Will not clean checkPoint files. checkPointFolderFile=null");
+      logger.info("Will not clean checkPoint files. checkPointFolderFile=null");
       return;
     }
-    LOG.info("Cleaning checkPoint files. checkPointFolderFile=" + checkPointFolderFile.getAbsolutePath());
+    logger.info("Cleaning checkPoint files. checkPointFolderFile=" + checkPointFolderFile.getAbsolutePath());
     try {
       // Loop over the check point files and if filePath is not present, then move to closed
       File[] checkPointFiles = CheckpointFileReader.getFiles(checkPointFolderFile, checkPointExtension);
@@ -52,11 +52,11 @@ public class FileCheckpointCleanupHelper {
             totalCheckFilesDeleted++;
           }
         }
-        LOG.info("Deleted " + totalCheckFilesDeleted + " checkPoint file(s). checkPointFolderFile=" +
+        logger.info("Deleted " + totalCheckFilesDeleted + " checkPoint file(s). checkPointFolderFile=" +
           checkPointFolderFile.getAbsolutePath());
       }
     } catch (Throwable t) {
-      LOG.error("Error while cleaning checkPointFiles", t);
+      logger.error("Error while cleaning checkPointFiles", t);
     }
   }
 
@@ -67,7 +67,7 @@ public class FileCheckpointCleanupHelper {
       byte b[] = new byte[contentSize];
       int readSize = checkPointReader.read(b, 0, contentSize);
       if (readSize != contentSize) {
-        LOG.error("Couldn't read expected number of bytes from checkpoint file. expected=" + contentSize + ", read="
+        logger.error("Couldn't read expected number of bytes from checkpoint file. expected=" + contentSize + ", read="
           + readSize + ", checkPointFile=" + checkPointFile);
       } else {
         String jsonCheckPointStr = new String(b, 0, readSize);
@@ -86,29 +86,29 @@ public class FileCheckpointCleanupHelper {
             Object fileKeyObj = FileUtil.getFileKey(logFile);
             String fileBase64 = Base64.byteArrayToBase64(fileKeyObj.toString().getBytes());
             if (!logFileKey.equals(fileBase64)) {
-              LOG.info("CheckPoint clean: File key has changed. old=" + logFileKey + ", new=" + fileBase64 + ", filePath=" +
+              logger.info("CheckPoint clean: File key has changed. old=" + logFileKey + ", new=" + fileBase64 + ", filePath=" +
                 logFilePath + ", checkPointFile=" + checkPointFile.getAbsolutePath());
               deleteCheckPointFile = !wasFileRenamed(logFile.getParentFile(), logFileKey);
             } else if (maxAgeMin != null && maxAgeMin != 0 && FileUtil.isFileTooOld(logFile, maxAgeMin)) {
               deleteCheckPointFile = true;
-              LOG.info("Checkpoint clean: File reached max age minutes (" + maxAgeMin + "):" + logFilePath);
+              logger.info("Checkpoint clean: File reached max age minutes (" + maxAgeMin + "):" + logFilePath);
             }
           } else {
-            LOG.info("CheckPoint clean: Log file doesn't exist. filePath=" + logFilePath + ", checkPointFile=" +
+            logger.info("CheckPoint clean: Log file doesn't exist. filePath=" + logFilePath + ", checkPointFile=" +
               checkPointFile.getAbsolutePath());
             deleteCheckPointFile = !wasFileRenamed(logFile.getParentFile(), logFileKey);
           }
           if (deleteCheckPointFile) {
-            LOG.info("Deleting CheckPoint file=" + checkPointFile.getAbsolutePath() + ", logFile=" + logFilePath);
+            logger.info("Deleting CheckPoint file=" + checkPointFile.getAbsolutePath() + ", logFile=" + logFilePath);
             checkPointFile.delete();
             deleted = true;
           }
         }
       }
     } catch (EOFException eof) {
-      LOG.warn("Caught EOFException. Ignoring reading existing checkPoint file. " + checkPointFile);
+      logger.warn("Caught EOFException. Ignoring reading existing checkPoint file. " + checkPointFile);
     } catch (Throwable t) {
-      LOG.error("Error while checking checkPoint file. " + checkPointFile, t);
+      logger.error("Error while checking checkPoint file. " + checkPointFile, t);
     }
 
     return deleted;
@@ -121,7 +121,7 @@ public class FileCheckpointCleanupHelper {
       if (searchFileBase64.equals(fileBase64)) {
         // even though the file name in the checkpoint file is different from the one it was renamed to, checkpoint files are
         // identified by their name, which is generated from the file key, which would be the same for the renamed file
-        LOG.info("CheckPoint clean: File key matches file " + file.getAbsolutePath() + ", it must have been renamed");
+        logger.info("CheckPoint clean: File key matches file " + file.getAbsolutePath() + ", it must have been renamed");
         return true;
       }
     }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/ResumeLineNumberHelper.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/ResumeLineNumberHelper.java
index 664fa4f..66c686c 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/ResumeLineNumberHelper.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/file/checkpoint/util/ResumeLineNumberHelper.java
@@ -20,8 +20,8 @@ package org.apache.ambari.logfeeder.input.file.checkpoint.util;
 
 import org.apache.ambari.logfeeder.input.InputFile;
 import org.apache.ambari.logfeeder.util.LogFeederUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.EOFException;
 import java.io.File;
@@ -31,7 +31,7 @@ import java.util.Map;
 
 public class ResumeLineNumberHelper {
 
-  private static final Logger LOG = LoggerFactory.getLogger(ResumeLineNumberHelper.class);
+  private static final Logger logger = LogManager.getLogger(ResumeLineNumberHelper.class);
 
   private ResumeLineNumberHelper() {
   }
@@ -41,21 +41,21 @@ public class ResumeLineNumberHelper {
 
     File checkPointFile = null;
     try {
-      LOG.info("Checking existing checkpoint file. " + inputFile.getShortDescription());
+      logger.info("Checking existing checkpoint file. " + inputFile.getShortDescription());
 
       String checkPointFileName = getCheckpointFileName(inputFile);
       checkPointFile = new File(checkPointFolder, checkPointFileName);
       inputFile.getCheckPointFiles().put(inputFile.getBase64FileKey(), checkPointFile);
       Map<String, Object> jsonCheckPoint = null;
       if (!checkPointFile.exists()) {
-        LOG.info("Checkpoint file for log file " + inputFile.getFilePath() + " doesn't exist, starting to read it from the beginning");
+        logger.info("Checkpoint file for log file " + inputFile.getFilePath() + " doesn't exist, starting to read it from the beginning");
       } else {
         try (RandomAccessFile checkPointWriter = new RandomAccessFile(checkPointFile, "rw")) {
           int contentSize = checkPointWriter.readInt();
           byte b[] = new byte[contentSize];
           int readSize = checkPointWriter.read(b, 0, contentSize);
           if (readSize != contentSize) {
-            LOG.error("Couldn't read expected number of bytes from checkpoint file. expected=" + contentSize + ", read=" +
+            logger.error("Couldn't read expected number of bytes from checkpoint file. expected=" + contentSize + ", read=" +
               readSize + ", checkPointFile=" + checkPointFile + ", input=" + inputFile.getShortDescription());
           } else {
             String jsonCheckPointStr = new String(b, 0, readSize);
@@ -63,11 +63,11 @@ public class ResumeLineNumberHelper {
 
             resumeFromLineNumber = LogFeederUtil.objectToInt(jsonCheckPoint.get("line_number"), 0, "line_number");
 
-            LOG.info("CheckPoint. checkPointFile=" + checkPointFile + ", json=" + jsonCheckPointStr +
+            logger.info("CheckPoint. checkPointFile=" + checkPointFile + ", json=" + jsonCheckPointStr +
               ", resumeFromLineNumber=" + resumeFromLineNumber);
           }
         } catch (EOFException eofEx) {
-          LOG.info("EOFException. Will reset checkpoint file " + checkPointFile.getAbsolutePath() + " for " +
+          logger.info("EOFException. Will reset checkpoint file " + checkPointFile.getAbsolutePath() + " for " +
             inputFile.getShortDescription(), eofEx);
         }
       }
@@ -81,7 +81,7 @@ public class ResumeLineNumberHelper {
       inputFile.getJsonCheckPoints().put(inputFile.getBase64FileKey(), jsonCheckPoint);
 
     } catch (Throwable t) {
-      LOG.error("Error while configuring checkpoint file. Will reset file. checkPointFile=" + checkPointFile, t);
+      logger.error("Error while configuring checkpoint file. Will reset file. checkPointFile=" + checkPointFile, t);
     }
 
     return resumeFromLineNumber;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/AbstractLogFileMonitor.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/AbstractLogFileMonitor.java
index e0acde1..a41a257 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/AbstractLogFileMonitor.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/AbstractLogFileMonitor.java
@@ -19,12 +19,12 @@
 package org.apache.ambari.logfeeder.input.monitor;
 
 import org.apache.ambari.logfeeder.input.InputFile;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public abstract class AbstractLogFileMonitor implements Runnable {
 
-  private Logger LOG = LoggerFactory.getLogger(AbstractLogFileMonitor.class);
+  private static final Logger LOG = LogManager.getLogger(AbstractLogFileMonitor.class);
 
   private final InputFile inputFile;
   private final int waitInterval;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/CheckpointCleanupMonitor.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/CheckpointCleanupMonitor.java
index 45404c4..28bf401 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/CheckpointCleanupMonitor.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/CheckpointCleanupMonitor.java
@@ -19,12 +19,12 @@
 package org.apache.ambari.logfeeder.input.monitor;
 
 import org.apache.ambari.logfeeder.plugin.manager.CheckpointManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class CheckpointCleanupMonitor implements Runnable {
 
-  private static final Logger LOG = LoggerFactory.getLogger(CheckpointCleanupMonitor.class);
+  private static final Logger logger = LogManager.getLogger(CheckpointCleanupMonitor.class);
 
   private long waitIntervalMin;
   private CheckpointManager checkpointHandler;
@@ -41,7 +41,7 @@ public class CheckpointCleanupMonitor implements Runnable {
         Thread.sleep(1000 * 60 * waitIntervalMin);
         checkpointHandler.cleanupCheckpoints();
       } catch (Exception e) {
-        LOG.error("Cleanup checkpoint files thread interrupted.", e);
+        logger.error("Cleanup checkpoint files thread interrupted.", e);
       }
     }
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/DockerLogFileUpdateMonitor.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/DockerLogFileUpdateMonitor.java
index 0275827..859e6e0 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/DockerLogFileUpdateMonitor.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/DockerLogFileUpdateMonitor.java
@@ -18,11 +18,11 @@
  */
 package org.apache.ambari.logfeeder.input.monitor;
 
-import org.apache.ambari.logfeeder.docker.DockerContainerRegistry;
-import org.apache.ambari.logfeeder.docker.DockerMetadata;
+import org.apache.ambari.logfeeder.container.docker.DockerContainerRegistry;
+import org.apache.ambari.logfeeder.container.docker.DockerMetadata;
 import org.apache.ambari.logfeeder.input.InputFile;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Date;
 import java.util.HashMap;
@@ -42,7 +42,7 @@ import java.util.Map;
  */
 public class DockerLogFileUpdateMonitor extends AbstractLogFileMonitor {
 
-  private Logger LOG = LoggerFactory.getLogger(DockerLogFileUpdateMonitor.class);
+  private static final Logger logger = LogManager.getLogger(DockerLogFileUpdateMonitor.class);
 
   public DockerLogFileUpdateMonitor(InputFile inputFile, int waitInterval, int detachTime) {
     super(inputFile, waitInterval, detachTime);
@@ -67,26 +67,26 @@ public class DockerLogFileUpdateMonitor extends AbstractLogFileMonitor {
         String containerId = containerEntry.getValue().getId();
         long timestamp = containerEntry.getValue().getTimestamp();
         boolean running = containerEntry.getValue().isRunning();
-        LOG.debug("Found log path: {} (container id: {})", logPath, containerId);
+        logger.debug("Found log path: {} (container id: {})", logPath, containerId);
         if (!copiedChildMap.containsKey(logPath)) {
           if (!running && isItTooOld(timestamp, new Date().getTime(), getDetachTime())) {
-            LOG.debug("Container with id {} is stopped, won't monitor as it stopped for long time.", containerId);
+            logger.debug("Container with id {} is stopped, won't monitor as it stopped for long time.", containerId);
           } else {
-            LOG.info("Found new container (id: {}) with new log path: {}", logPath, containerId);
+            logger.info("Found new container (id: {}) with new log path: {}", logPath, containerId);
             getInputFile().startNewChildDockerInputFileThread(containerEntry.getValue());
           }
         } else {
           if (!running && isItTooOld(timestamp, new Date().getTime(), getDetachTime())) {
-            LOG.info("Removing: {}", logPath);
+            logger.info("Removing: {}", logPath);
             getInputFile().stopChildDockerInputFileThread(containerEntry.getKey());
           }
         }
       }
     } else {
       if (!copiedChildMap.isEmpty()) {
-        LOG.info("Removing all inputs with type: {}", logType);
+        logger.info("Removing all inputs with type: {}", logType);
         for (Map.Entry<String, InputFile> inputFileEntry : copiedChildMap.entrySet()) {
-          LOG.info("Removing: {}", inputFileEntry.getKey());
+          logger.info("Removing: {}", inputFileEntry.getKey());
           getInputFile().stopChildDockerInputFileThread(inputFileEntry.getKey());
         }
       }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/LogFileDetachMonitor.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/LogFileDetachMonitor.java
index a40e118..875bcd4 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/LogFileDetachMonitor.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/LogFileDetachMonitor.java
@@ -20,8 +20,8 @@ package org.apache.ambari.logfeeder.input.monitor;
 
 import org.apache.ambari.logfeeder.input.InputFile;
 import org.apache.ambari.logfeeder.util.FileUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.util.HashMap;
@@ -33,7 +33,7 @@ import java.util.Map;
  */
 public class LogFileDetachMonitor extends AbstractLogFileMonitor {
 
-  private Logger LOG = LoggerFactory.getLogger(LogFileDetachMonitor.class);
+  private static final Logger logger = LogManager.getLogger(LogFileDetachMonitor.class);
 
   public LogFileDetachMonitor(InputFile inputFile, int interval, int detachTime) {
     super(inputFile, interval, detachTime);
@@ -60,13 +60,13 @@ public class LogFileDetachMonitor extends AbstractLogFileMonitor {
             File monitoredFile = entry.getValue().get(0);
             boolean isFileTooOld = FileUtil.isFileTooOld(monitoredFile, getDetachTime());
             if (isFileTooOld) {
-              LOG.info("File ('{}') in folder ('{}') is too old (reached {} minutes), detach input thread.", entry.getKey(), getDetachTime());
+              logger.info("File ('{}') in folder ('{}') is too old (reached {} minutes), detach input thread.", entry.getKey(), getDetachTime());
               getInputFile().stopChildInputFileThread(entry.getKey());
             }
           }
         }
       } else {
-        LOG.info("Folder not exists. ({}) Stop thread.", entry.getKey());
+        logger.info("Folder not exists. ({}) Stop thread.", entry.getKey());
         for (Map.Entry<String, InputFile> inputFileEntry : copiedInputFileMap.entrySet()) {
           if (inputFileEntry.getKey().startsWith(entry.getKey())) {
             getInputFile().stopChildInputFileThread(entry.getKey());
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/LogFilePathUpdateMonitor.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/LogFilePathUpdateMonitor.java
index bfcab5d..9abd71c 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/LogFilePathUpdateMonitor.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/monitor/LogFilePathUpdateMonitor.java
@@ -20,8 +20,8 @@ package org.apache.ambari.logfeeder.input.monitor;
 
 import org.apache.ambari.logfeeder.input.InputFile;
 import org.apache.ambari.logfeeder.util.FileUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.util.List;
@@ -32,7 +32,7 @@ import java.util.Map;
  */
 public class LogFilePathUpdateMonitor extends AbstractLogFileMonitor {
 
-  private Logger LOG = LoggerFactory.getLogger(LogFilePathUpdateMonitor.class);
+  private static final Logger logger = LogManager.getLogger(LogFilePathUpdateMonitor.class);
 
   public LogFilePathUpdateMonitor(InputFile inputFile, int interval, int detachTime) {
     super(inputFile, interval, detachTime);
@@ -54,17 +54,17 @@ public class LogFilePathUpdateMonitor extends AbstractLogFileMonitor {
         if (!entry.getValue().isEmpty()) { // check tail only for now
           File lastFile = entry.getValue().get(0);
           if (!originalLogFiles.get(0).getAbsolutePath().equals(lastFile.getAbsolutePath())) {
-            LOG.info("New file found (old: '{}', new: {}), reload thread for {}",
+            logger.info("New file found (old: '{}', new: {}), reload thread for {}",
               lastFile.getAbsolutePath(), originalLogFiles.get(0).getAbsolutePath(), entry.getKey());
             getInputFile().stopChildInputFileThread(entry.getKey());
             getInputFile().startNewChildInputFileThread(entry);
           }
         }
       } else {
-        LOG.info("New log file folder found: {}, start a new thread if tail file is not too old.", entry.getKey());
+        logger.info("New log file folder found: {}, start a new thread if tail file is not too old.", entry.getKey());
         File monitoredFile = entry.getValue().get(0);
         if (FileUtil.isFileTooOld(monitoredFile, getDetachTime())) {
-          LOG.info("'{}' file is too old. No new thread start needed.", monitoredFile.getAbsolutePath());
+          logger.info("'{}' file is too old. No new thread start needed.", monitoredFile.getAbsolutePath());
         } else {
           getInputFile().startNewChildInputFileThread(entry);
         }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/reader/GZIPReader.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/reader/GZIPReader.java
index 7f78fd1..4f5b516 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/reader/GZIPReader.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/reader/GZIPReader.java
@@ -18,7 +18,8 @@
  */
 package org.apache.ambari.logfeeder.input.reader;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -29,11 +30,11 @@ import java.util.zip.GZIPInputStream;
 
 class GZIPReader extends InputStreamReader {
 
-  private static final Logger LOG = Logger.getLogger(GZIPReader.class);
+  private static final Logger logger = LogManager.getLogger(GZIPReader.class);
 
   GZIPReader(String fileName) throws FileNotFoundException {
     super(getStream(fileName));
-    LOG.info("Created GZIPReader for file : " + fileName);
+    logger.info("Created GZIPReader for file : " + fileName);
   }
 
   private static InputStream getStream(String fileName) {
@@ -43,7 +44,7 @@ class GZIPReader extends InputStreamReader {
       fileStream = new FileInputStream(fileName);
       gzipStream = new GZIPInputStream(fileStream);
     } catch (Exception e) {
-      LOG.error(e, e.getCause());
+      logger.error(e, e.getCause());
     }
     return gzipStream;
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/reader/LogsearchReaderFactory.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/reader/LogsearchReaderFactory.java
index b9393aa..c5453df 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/reader/LogsearchReaderFactory.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/input/reader/LogsearchReaderFactory.java
@@ -18,7 +18,8 @@
  */
 package org.apache.ambari.logfeeder.input.reader;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -27,12 +28,12 @@ import java.io.Reader;
 
 public enum LogsearchReaderFactory {
   INSTANCE;
-  private static final Logger LOG = Logger.getLogger(LogsearchReaderFactory.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchReaderFactory.class);
 
   public Reader getReader(File file) throws FileNotFoundException {
-    LOG.debug("Inside reader factory for file:" + file);
+    logger.debug("Inside reader factory for file:" + file);
     if (GZIPReader.isValidFile(file.getAbsolutePath())) {
-      LOG.info("Reading file " + file + " as gzip file");
+      logger.info("Reading file " + file + " as gzip file");
       return new GZIPReader(file.getAbsolutePath());
     } else {
       return new FileReader(file);
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/loglevelfilter/LogLevelFilterHandler.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/loglevelfilter/LogLevelFilterHandler.java
index ab35f03..3b9f421 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/loglevelfilter/LogLevelFilterHandler.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/loglevelfilter/LogLevelFilterHandler.java
@@ -34,8 +34,8 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.recipes.cache.TreeCache;
 import org.apache.curator.framework.recipes.cache.TreeCacheListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
@@ -49,7 +49,7 @@ import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
 
 public class LogLevelFilterHandler implements LogLevelFilterMonitor {
-  private static final Logger LOG = LoggerFactory.getLogger(LogLevelFilterHandler.class);
+  private static final Logger logger = LogManager.getLogger(LogLevelFilterHandler.class);
 
   private static final String TIMEZONE = "GMT";
   private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS";
@@ -143,7 +143,7 @@ public class LogLevelFilterHandler implements LogLevelFilterMonitor {
 
     boolean isAllowed = applyFilter(jsonObj, defaultLogLevels);
     if (!isAllowed) {
-      LOG.trace("Filter block the content :" + LogFeederUtil.getGson().toJson(jsonObj));
+      logger.trace("Filter block the content :" + LogFeederUtil.getGson().toJson(jsonObj));
     }
     return isAllowed;
   }
@@ -151,7 +151,7 @@ public class LogLevelFilterHandler implements LogLevelFilterMonitor {
 
   public boolean applyFilter(Map<String, Object> jsonObj, List<String> defaultLogLevels) {
     if (MapUtils.isEmpty(jsonObj)) {
-      LOG.warn("Output jsonobj is empty");
+      logger.warn("Output jsonobj is empty");
       return DEFAULT_VALUE;
     }
 
@@ -171,7 +171,7 @@ public class LogLevelFilterHandler implements LogLevelFilterMonitor {
       return logFilter;
     }
 
-    LOG.info("Filter is not present for log " + logId + ", creating default filter");
+    logger.info("Filter is not present for log " + logId + ", creating default filter");
     LogLevelFilter defaultFilter = new LogLevelFilter();
     defaultFilter.setLabel(logId);
     defaultFilter.setDefaultLevels(defaultLogLevels);
@@ -180,7 +180,7 @@ public class LogLevelFilterHandler implements LogLevelFilterMonitor {
       config.getLogLevelFilterManager().createLogLevelFilter(logFeederProps.getClusterName(), logId, defaultFilter);
       filters.put(logId, defaultFilter);
     } catch (Exception e) {
-      LOG.warn("Could not persist the default filter for log " + logId, e);
+      logger.warn("Could not persist the default filter for log " + logId, e);
     }
 
     return defaultFilter;
@@ -201,7 +201,7 @@ public class LogLevelFilterHandler implements LogLevelFilterMonitor {
 
       if (hosts.isEmpty() || hosts.contains(hostName)) {
         if (isFilterExpired(componentFilter)) {
-          LOG.debug("Filter for component " + componentName + " and host :" + hostName + " is expired at " +
+          logger.debug("Filter for component " + componentName + " and host :" + hostName + " is expired at " +
             componentFilter.getExpiryTime());
           return defaultLevels;
         } else {
@@ -223,7 +223,7 @@ public class LogLevelFilterHandler implements LogLevelFilterMonitor {
 
     Date currentDate = new Date();
     if (!currentDate.before(filterEndDate)) {
-      LOG.debug("Filter for  Component :" + logLevelFilter.getLabel() + " and Hosts : [" +
+      logger.debug("Filter for  Component :" + logLevelFilter.getLabel() + " and Hosts : [" +
         StringUtils.join(logLevelFilter.getHosts(), ',') + "] is expired because of filter endTime : " +
         formatter.get().format(filterEndDate) + " is older than currentTime :" + formatter.get().format(currentDate));
       return true;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperAnonymize.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperAnonymize.java
index 8c0fc72..652917f 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperAnonymize.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperAnonymize.java
@@ -27,13 +27,14 @@ import org.apache.ambari.logsearch.config.api.model.inputconfig.MapAnonymizeDesc
 import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldDescriptor;
 import org.apache.commons.lang.CharUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Map;
 
 public class MapperAnonymize extends Mapper<LogFeederProps> {
-  private static final Logger LOG = Logger.getLogger(MapperAnonymize.class);
+  private static final Logger logger = LogManager.getLogger(MapperAnonymize.class);
   
   private static final char DEFAULT_HIDE_CHAR = '*';
 
@@ -47,7 +48,7 @@ public class MapperAnonymize extends Mapper<LogFeederProps> {
     
     pattern = ((MapAnonymizeDescriptor)mapFieldDescriptor).getPattern();
     if (StringUtils.isEmpty(pattern)) {
-      LOG.fatal("pattern is empty.");
+      logger.fatal("pattern is empty.");
       return false;
     }
     
@@ -64,7 +65,7 @@ public class MapperAnonymize extends Mapper<LogFeederProps> {
         hide((String)value, jsonObj);
       } catch (Throwable t) {
         LogFeederUtil.logErrorMessageByInterval(this.getClass().getSimpleName() + ":apply", "Error applying anonymization." +
-            " pattern=" + pattern + ", hideChar=" + hideChar, t, LOG, Level.ERROR);
+            " pattern=" + pattern + ", hideChar=" + hideChar, t, logger, Level.ERROR);
       }
     }
     return value;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperDate.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperDate.java
index 150869b..14ecc33 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperDate.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperDate.java
@@ -28,8 +28,9 @@ import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldDescript
 import org.apache.commons.lang.time.DateUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.FastDateFormat;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.text.ParseException;
 import java.util.Calendar;
@@ -37,7 +38,7 @@ import java.util.Date;
 import java.util.Map;
 
 public class MapperDate extends Mapper<LogFeederProps> {
-  private static final Logger LOG = Logger.getLogger(MapperDate.class);
+  private static final Logger logger = LogManager.getLogger(MapperDate.class);
 
   private FastDateFormat targetDateFormatter = null;
   private boolean isEpoch = false;
@@ -50,9 +51,9 @@ public class MapperDate extends Mapper<LogFeederProps> {
     String targetDateFormat = ((MapDateDescriptor)mapFieldDescriptor).getTargetDatePattern();
     String srcDateFormat = ((MapDateDescriptor)mapFieldDescriptor).getSourceDatePattern();
     if (StringUtils.isEmpty(targetDateFormat)) {
-      LOG.fatal("Date format for map is empty. " + this);
+      logger.fatal("Date format for map is empty. " + this);
     } else {
-      LOG.info("Date mapper format is " + targetDateFormat);
+      logger.info("Date mapper format is " + targetDateFormat);
 
       if (targetDateFormat.equalsIgnoreCase("epoch")) {
         isEpoch = true;
@@ -65,7 +66,7 @@ public class MapperDate extends Mapper<LogFeederProps> {
           }
           return true;
         } catch (Throwable ex) {
-          LOG.fatal("Error creating date format. format=" + targetDateFormat + ". " + this.toString());
+          logger.fatal("Error creating date format. format=" + targetDateFormat + ". " + this.toString());
         }
       } 
     }
@@ -96,7 +97,7 @@ public class MapperDate extends Mapper<LogFeederProps> {
       } catch (Throwable t) {
         LogFeederUtil.logErrorMessageByInterval(this.getClass().getSimpleName() + ":apply", "Error applying date transformation." +
             " isEpoch=" + isEpoch + ", targetDateFormat=" + (targetDateFormatter!=null ?targetDateFormatter.getPattern():"")
-            + ", value=" + value + ". " + this.toString(), t, LOG, Level.ERROR);
+            + ", value=" + value + ". " + this.toString(), t, logger, Level.ERROR);
       }
     }
     return value;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldCopy.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldCopy.java
index bbb6337..ca164d5 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldCopy.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldCopy.java
@@ -24,7 +24,8 @@ import org.apache.ambari.logfeeder.plugin.filter.mapper.Mapper;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldCopyDescriptor;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldDescriptor;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Map;
 
@@ -32,7 +33,7 @@ import java.util.Map;
  * Overrides the value for the field
  */
 public class MapperFieldCopy extends Mapper<LogFeederProps> {
-  private static final Logger LOG = Logger.getLogger(MapperFieldCopy.class);
+  private static final Logger logger = LogManager.getLogger(MapperFieldCopy.class);
   
   private String copyName = null;
 
@@ -41,7 +42,7 @@ public class MapperFieldCopy extends Mapper<LogFeederProps> {
     init(inputDesc, fieldName, mapClassCode);
     copyName = ((MapFieldCopyDescriptor)mapFieldDescriptor).getCopyName();
     if (StringUtils.isEmpty(copyName)) {
-      LOG.fatal("Map copy name is empty.");
+      logger.fatal("Map copy name is empty.");
       return false;
     }
     return true;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldName.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldName.java
index 2b1f70f..dce4e7c 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldName.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldName.java
@@ -25,8 +25,9 @@ import org.apache.ambari.logfeeder.util.LogFeederUtil;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldDescriptor;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldNameDescriptor;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Map;
 
@@ -34,7 +35,7 @@ import java.util.Map;
  * Overrides the value for the field
  */
 public class MapperFieldName extends Mapper<LogFeederProps> {
-  private static final Logger LOG = Logger.getLogger(MapperFieldName.class);
+  private static final Logger logger = LogManager.getLogger(MapperFieldName.class);
 
   private String newValue = null;
 
@@ -44,7 +45,7 @@ public class MapperFieldName extends Mapper<LogFeederProps> {
 
     newValue = ((MapFieldNameDescriptor)mapFieldDescriptor).getNewFieldName();
     if (StringUtils.isEmpty(newValue)) {
-      LOG.fatal("Map field value is empty.");
+      logger.fatal("Map field value is empty.");
       return false;
     }
     return true;
@@ -57,7 +58,7 @@ public class MapperFieldName extends Mapper<LogFeederProps> {
       jsonObj.put(newValue, value);
     } else {
       LogFeederUtil.logErrorMessageByInterval(this.getClass().getSimpleName() + ":apply",
-          "New fieldName is null, so transformation is not applied. " + this.toString(), null, LOG, Level.ERROR);
+          "New fieldName is null, so transformation is not applied. " + this.toString(), null, logger, Level.ERROR);
     }
     return value;
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldValue.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldValue.java
index e3d4924..3c2fc06 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldValue.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/mapper/MapperFieldValue.java
@@ -25,8 +25,9 @@ import org.apache.ambari.logfeeder.util.LogFeederUtil;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldDescriptor;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.MapFieldValueDescriptor;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Map;
 
@@ -34,7 +35,7 @@ import java.util.Map;
  * Overrides the value for the field
  */
 public class MapperFieldValue extends Mapper<LogFeederProps> {
-  private static final Logger LOG = Logger.getLogger(MapperFieldValue.class);
+  private static final Logger logger = LogManager.getLogger(MapperFieldValue.class);
   
   private String prevValue = null;
   private String newValue = null;
@@ -46,7 +47,7 @@ public class MapperFieldValue extends Mapper<LogFeederProps> {
     prevValue = ((MapFieldValueDescriptor)mapFieldDescriptor).getPreValue();
     newValue = ((MapFieldValueDescriptor)mapFieldDescriptor).getPostValue();;
     if (StringUtils.isEmpty(newValue)) {
-      LOG.fatal("Map field value is empty.");
+      logger.fatal("Map field value is empty.");
       return false;
     }
     return true;
@@ -61,7 +62,7 @@ public class MapperFieldValue extends Mapper<LogFeederProps> {
       }
     } else {
       LogFeederUtil.logErrorMessageByInterval(this.getClass().getSimpleName() + ":apply",
-          "New value is null, so transformation is not applied. " + this.toString(), null, LOG, Level.ERROR);
+          "New value is null, so transformation is not applied. " + this.toString(), null, logger, Level.ERROR);
     }
     return value;
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/LogFeederAMSClient.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/LogFeederAMSClient.java
index 0ccdff3..95ea665 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/LogFeederAMSClient.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/LogFeederAMSClient.java
@@ -24,14 +24,15 @@ import org.apache.ambari.logfeeder.conf.MetricsCollectorConfig;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.metrics2.sink.timeline.AbstractTimelineMetricsSink;
 import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Collection;
 import java.util.List;
 
 // TODO: Refactor for failover
 public class LogFeederAMSClient extends AbstractTimelineMetricsSink {
-  private static final Logger LOG = Logger.getLogger(LogFeederAMSClient.class);
+  private static final Logger logger = LogManager.getLogger(LogFeederAMSClient.class);
 
   private final List<String> collectorHosts;
   private final String collectorProtocol;
@@ -42,7 +43,7 @@ public class LogFeederAMSClient extends AbstractTimelineMetricsSink {
     String collectorHostsString = metricsCollectorConfig.getHostsString();
     if (!StringUtils.isBlank(collectorHostsString)) {
       collectorHostsString = collectorHostsString.trim();
-      LOG.info("AMS collector Hosts=" + collectorHostsString);
+      logger.info("AMS collector Hosts=" + collectorHostsString);
       
       collectorHosts = metricsCollectorConfig.getHosts();
       collectorProtocol = metricsCollectorConfig.getProtocol();
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/MetricsManager.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/MetricsManager.java
index f5bc0eb..55e06fd 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/MetricsManager.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/MetricsManager.java
@@ -30,13 +30,14 @@ import org.apache.ambari.logfeeder.plugin.common.MetricData;
 import org.apache.ambari.logfeeder.util.LogFeederUtil;
 import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
 import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
 public class MetricsManager {
-  private static final Logger LOG = Logger.getLogger(MetricsManager.class);
+  private static final Logger logger = LogManager.getLogger(MetricsManager.class);
 
   private boolean isMetricsEnabled = false;
   private String appId = "logfeeder";
@@ -57,7 +58,7 @@ public class MetricsManager {
 
   @PostConstruct
   public void init() {
-    LOG.info("Initializing MetricsManager()");
+    logger.info("Initializing MetricsManager()");
     if (amsClient == null) {
       amsClient = new LogFeederAMSClient(metricsCollectorConfig, logFeederSecurityConfig);
     }
@@ -65,13 +66,13 @@ public class MetricsManager {
     if (amsClient.getCollectorUri(null) != null) {
       if (LogFeederUtil.hostName == null) {
         isMetricsEnabled = false;
-        LOG.error("Failed getting hostname for node. Disabling publishing LogFeeder metrics");
+        logger.error("Failed getting hostname for node. Disabling publishing LogFeeder metrics");
       } else {
         isMetricsEnabled = true;
-        LOG.info("LogFeeder Metrics is enabled. Metrics host=" + amsClient.getCollectorUri(null));
+        logger.info("LogFeeder Metrics is enabled. Metrics host=" + amsClient.getCollectorUri(null));
       }
     } else {
-      LOG.info("LogFeeder Metrics publish is disabled");
+      logger.info("LogFeeder Metrics publish is disabled");
     }
   }
 
@@ -83,7 +84,7 @@ public class MetricsManager {
     if (!isMetricsEnabled) {
       return;
     }
-    LOG.info("useMetrics() metrics.size=" + metricsList.size());
+    logger.info("useMetrics() metrics.size=" + metricsList.size());
     long currMS = System.currentTimeMillis();
     
     gatherMetrics(metricsList, currMS);
@@ -94,21 +95,21 @@ public class MetricsManager {
     Long currMSLong = new Long(currMS);
     for (MetricData metric : metricsList) {
       if (metric.metricsName == null) {
-        LOG.debug("metric.metricsName is null");
+        logger.debug("metric.metricsName is null");
         continue;
       }
       long currCount = metric.value;
       if (!metric.isPointInTime && metric.publishCount > 0 && currCount <= metric.prevPublishValue) {
-        LOG.debug("Nothing changed. " + metric.metricsName + ", currCount=" + currCount + ", prevPublishCount=" +
+        logger.debug("Nothing changed. " + metric.metricsName + ", currCount=" + currCount + ", prevPublishCount=" +
             metric.prevPublishValue);
         continue;
       }
       metric.publishCount++;
 
-      LOG.debug("Ensuring metrics=" + metric.metricsName);
+      logger.debug("Ensuring metrics=" + metric.metricsName);
       TimelineMetric timelineMetric = metricsMap.get(metric.metricsName);
       if (timelineMetric == null) {
-        LOG.debug("Creating new metric obbject for " + metric.metricsName);
+        logger.debug("Creating new metric obbject for " + metric.metricsName);
         timelineMetric = new TimelineMetric();
         timelineMetric.setMetricName(metric.metricsName);
         timelineMetric.setHostName(LogFeederUtil.hostName);
@@ -120,7 +121,7 @@ public class MetricsManager {
         metricsMap.put(metric.metricsName, timelineMetric);
       }
       
-      LOG.debug("Adding metrics=" + metric.metricsName);
+      logger.debug("Adding metrics=" + metric.metricsName);
       if (metric.isPointInTime) {
         timelineMetric.getMetricValues().put(currMSLong, new Double(currCount));
       } else {
@@ -142,20 +143,20 @@ public class MetricsManager {
         timelineMetrics.setMetrics(new ArrayList<TimelineMetric>(metricsMap.values()));
         amsClient.emitMetrics(timelineMetrics);
         
-        LOG.info("Published " + timelineMetrics.getMetrics().size() + " metrics to AMS");
+        logger.info("Published " + timelineMetrics.getMetrics().size() + " metrics to AMS");
         metricsMap.clear();
         lastPublishTimeMS = currMS;
       } catch (Throwable t) {
-        LOG.warn("Error sending metrics to AMS.", t);
+        logger.warn("Error sending metrics to AMS.", t);
         if (currMS - lastFailedPublishTimeMS > maxMetricsBuffer) {
-          LOG.error("AMS was not sent for last " + maxMetricsBuffer / 1000 +
+          logger.error("AMS was not sent for last " + maxMetricsBuffer / 1000 +
               " seconds. Purging it and will start rebuilding it again");
           metricsMap.clear();
           lastFailedPublishTimeMS = currMS;
         }
       }
     } else {
-      LOG.info("Not publishing metrics. metrics.size()=" + metricsMap.size() + ", lastPublished=" +
+      logger.info("Not publishing metrics. metrics.size()=" + metricsMap.size() + ", lastPublished=" +
           (currMS - lastPublishTimeMS) / 1000 + " seconds ago, intervalConfigured=" + publishIntervalMS / 1000);
     }
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/StatsLogger.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/StatsLogger.java
index 91de1d8..e72fd43 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/StatsLogger.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/metrics/StatsLogger.java
@@ -20,8 +20,8 @@ package org.apache.ambari.logfeeder.metrics;
 
 import org.apache.ambari.logfeeder.common.ConfigHandler;
 import org.apache.ambari.logfeeder.plugin.common.MetricData;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
@@ -30,7 +30,7 @@ import java.util.List;
 
 public class StatsLogger extends Thread {
 
-  private static final Logger LOG = LoggerFactory.getLogger(StatsLogger.class);
+  private static final Logger logger = LogManager.getLogger(StatsLogger.class);
 
   private static final int CHECKPOINT_CLEAN_INTERVAL_MS = 24 * 60 * 60 * 60 * 1000; // 24 hours
 
@@ -63,7 +63,7 @@ public class StatsLogger extends Thread {
       try {
         logStats();
       } catch (Throwable t) {
-        LOG.error("LogStats: Caught exception while logging stats.", t);
+        logger.error("LogStats: Caught exception while logging stats.", t);
       }
 
       if (System.currentTimeMillis() > (lastCheckPointCleanedMS + CHECKPOINT_CLEAN_INTERVAL_MS)) {
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputDevNull.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputDevNull.java
index 2113cbd..032bde4 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputDevNull.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputDevNull.java
@@ -21,7 +21,8 @@ package org.apache.ambari.logfeeder.output;
 import org.apache.ambari.logfeeder.conf.LogFeederProps;
 import org.apache.ambari.logfeeder.plugin.input.InputMarker;
 import org.apache.ambari.logfeeder.plugin.output.Output;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 
@@ -30,11 +31,11 @@ import java.io.File;
  */
 public class OutputDevNull extends Output<LogFeederProps, InputMarker> {
 
-  private static final Logger LOG = Logger.getLogger(OutputDevNull.class);
+  private static final Logger logger = LogManager.getLogger(OutputDevNull.class);
 
   @Override
   public void write(String block, InputMarker inputMarker){
-    LOG.trace("Ignore log block: " + block);
+    logger.trace("Ignore log block: " + block);
   }
 
   @Override
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputFile.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputFile.java
index 850daaf..910d4d6 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputFile.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputFile.java
@@ -27,7 +27,8 @@ import org.apache.ambari.logfeeder.util.LogFeederUtil;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.BufferedWriter;
 import java.io.File;
@@ -37,7 +38,7 @@ import java.io.PrintWriter;
 import java.util.Map;
 
 public class OutputFile extends Output<LogFeederProps, InputFileMarker> {
-  private static final Logger LOG = Logger.getLogger(OutputFile.class);
+  private static final Logger logger = LogManager.getLogger(OutputFile.class);
 
   private PrintWriter outWriter;
   private String filePath = null;
@@ -49,7 +50,7 @@ public class OutputFile extends Output<LogFeederProps, InputFileMarker> {
     this.logFeederProps = logFeederProps;
     filePath = getStringValue("path");
     if (StringUtils.isEmpty(filePath)) {
-      LOG.error("Filepath config property <path> is not set in config file.");
+      logger.error("Filepath config property <path> is not set in config file.");
       return;
     }
     codec = getStringValue("codec");
@@ -61,11 +62,11 @@ public class OutputFile extends Output<LogFeederProps, InputFileMarker> {
       } else if (codec.trim().equalsIgnoreCase("json")) {
         codec = "csv";
       } else {
-        LOG.error("Unsupported codec type. codec=" + codec + ", will use json");
+        logger.error("Unsupported codec type. codec=" + codec + ", will use json");
         codec = "json";
       }
     }
-    LOG.info("Out filePath=" + filePath + ", codec=" + codec);
+    logger.info("Out filePath=" + filePath + ", codec=" + codec);
     File outFile = new File(filePath);
     if (outFile.getParentFile() != null) {
       File parentDir = outFile.getParentFile();
@@ -76,12 +77,12 @@ public class OutputFile extends Output<LogFeederProps, InputFileMarker> {
 
     outWriter = new PrintWriter(new BufferedWriter(new FileWriter(outFile, true)));
 
-    LOG.info("init() is successfull. filePath=" + outFile.getAbsolutePath());
+    logger.info("init() is successfull. filePath=" + outFile.getAbsolutePath());
   }
 
   @Override
   public void close() {
-    LOG.info("Closing file." + getShortDescription());
+    logger.info("Closing file." + getShortDescription());
     if (outWriter != null) {
       try {
         outWriter.close();
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputHDFSFile.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputHDFSFile.java
index 03669fe..13bb772 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputHDFSFile.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputHDFSFile.java
@@ -32,7 +32,8 @@ import org.apache.ambari.logfeeder.util.LogFeederUtil;
 import org.apache.ambari.logfeeder.util.PlaceholderUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.fs.FileSystem;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.util.Date;
@@ -46,7 +47,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
  * The events are spooled on the local file system and uploaded in batches asynchronously.
  */
 public class OutputHDFSFile extends Output<LogFeederProps, InputFileMarker> implements RolloverHandler, RolloverCondition {
-  private static final Logger LOG = Logger.getLogger(OutputHDFSFile.class);
+  private static final Logger logger = LogManager.getLogger(OutputHDFSFile.class);
   
   private static final long DEFAULT_ROLLOVER_THRESHOLD_TIME_SECONDS = 5 * 60L;// 5 min by default
 
@@ -78,20 +79,20 @@ public class OutputHDFSFile extends Output<LogFeederProps, InputFileMarker> impl
     rolloverThresholdTimeMillis = rolloverThresholdTimeSeconds * 1000L;
     filenamePrefix = getStringValue("file_name_prefix", filenamePrefix);
     if (StringUtils.isEmpty(hdfsOutDir)) {
-      LOG.error("HDFS config property <hdfs_out_dir> is not set in config file.");
+      logger.error("HDFS config property <hdfs_out_dir> is not set in config file.");
       return;
     }
     if (StringUtils.isEmpty(hdfsHost)) {
-      LOG.error("HDFS config property <hdfs_host> is not set in config file.");
+      logger.error("HDFS config property <hdfs_host> is not set in config file.");
       return;
     }
     if (StringUtils.isEmpty(hdfsPort)) {
-      LOG.error("HDFS config property <hdfs_port> is not set in config file.");
+      logger.error("HDFS config property <hdfs_port> is not set in config file.");
       return;
     }
     HashMap<String, String> contextParam = buildContextParam();
     hdfsOutDir = PlaceholderUtil.replaceVariables(hdfsOutDir, contextParam);
-    LOG.info("hdfs Output dir=" + hdfsOutDir);
+    logger.info("hdfs Output dir=" + hdfsOutDir);
     String localFileDir = logFeederProps.getTmpDir() + "hdfs/service/";
     logSpooler = new LogSpooler(localFileDir, filenamePrefix, this, this);
     this.startHDFSCopyThread();
@@ -99,7 +100,7 @@ public class OutputHDFSFile extends Output<LogFeederProps, InputFileMarker> impl
 
   @Override
   public void close() {
-    LOG.info("Closing file." + getShortDescription());
+    logger.info("Closing file." + getShortDescription());
     logSpooler.rollover();
     this.stopHDFSCopyThread();
     setClosed(true);
@@ -138,10 +139,10 @@ public class OutputHDFSFile extends Output<LogFeederProps, InputFileMarker> impl
                 boolean isCopied = LogFeederHDFSUtil.copyFromLocal(localFile.getAbsolutePath(), destFilePath, fileSystem,
                     overWrite, delSrc);
                 if (isCopied) {
-                  LOG.debug("File copy to hdfs hdfspath :" + destFilePath + " and deleted local file :" + localPath);
+                  logger.debug("File copy to hdfs hdfspath :" + destFilePath + " and deleted local file :" + localPath);
                 } else {
                   // TODO Need to write retry logic, in next release we can handle it
-                  LOG.error("Hdfs file copy  failed for hdfspath :" + destFilePath + " and localpath :" + localPath);
+                  logger.error("Hdfs file copy  failed for hdfspath :" + destFilePath + " and localpath :" + localPath);
                 }
               }
               localFileIterator.remove();
@@ -154,11 +155,11 @@ public class OutputHDFSFile extends Output<LogFeederProps, InputFileMarker> impl
                 }
               }
             } catch (InterruptedException e) {
-              LOG.error(e.getLocalizedMessage(),e);
+              logger.error(e.getLocalizedMessage(),e);
             }
           }
         } catch (Exception e) {
-          LOG.error("Exception in hdfsCopyThread errorMsg:" + e.getLocalizedMessage(), e);
+          logger.error("Exception in hdfsCopyThread errorMsg:" + e.getLocalizedMessage(), e);
         }
       }
     };
@@ -168,20 +169,20 @@ public class OutputHDFSFile extends Output<LogFeederProps, InputFileMarker> impl
 
   private void stopHDFSCopyThread() {
     if (hdfsCopyThread != null) {
-      LOG.info("waiting till copy all local files to hdfs.......");
+      logger.info("waiting till copy all local files to hdfs.......");
       while (!localReadyFiles.isEmpty()) {
         try {
           Thread.sleep(1000);
         } catch (InterruptedException e) {
-          LOG.error(e.getLocalizedMessage(), e);
+          logger.error(e.getLocalizedMessage(), e);
         }
-        LOG.debug("still waiting to copy all local files to hdfs.......");
+        logger.debug("still waiting to copy all local files to hdfs.......");
       }
-      LOG.info("calling interrupt method for hdfsCopyThread to stop it.");
+      logger.info("calling interrupt method for hdfsCopyThread to stop it.");
       try {
         hdfsCopyThread.interrupt();
       } catch (SecurityException exception) {
-        LOG.error(" Current thread : '" + Thread.currentThread().getName() +
+        logger.error(" Current thread : '" + Thread.currentThread().getName() +
             "' does not have permission to interrupt the Thread: '" + hdfsCopyThread.getName() + "'");
       }
       LogFeederHDFSUtil.closeFileSystem(fileSystem);
@@ -201,7 +202,7 @@ public class OutputHDFSFile extends Output<LogFeederProps, InputFileMarker> impl
         readyMonitor.notifyAll();
       }
     } catch (Exception e) {
-      LOG.error(e.getLocalizedMessage(),e);
+      logger.error(e.getLocalizedMessage(),e);
     }
   }
 
@@ -233,7 +234,7 @@ public class OutputHDFSFile extends Output<LogFeederProps, InputFileMarker> impl
     long timeSinceCreation = new Date().getTime() - currentSpoolerContext.getActiveLogCreationTime().getTime();
     boolean shouldRollover = timeSinceCreation > rolloverThresholdTimeMillis;
     if (shouldRollover) {
-      LOG.info("Detecting that time since file creation time " + currentSpoolerContext.getActiveLogCreationTime() +
+      logger.info("Detecting that time since file creation time " + currentSpoolerContext.getActiveLogCreationTime() +
           " has crossed threshold (msecs) " + rolloverThresholdTimeMillis);
     }
     return shouldRollover;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputKafka.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputKafka.java
index a82ede0..3073211 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputKafka.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputKafka.java
@@ -30,8 +30,9 @@ import org.apache.kafka.clients.producer.KafkaProducer;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.kafka.clients.producer.RecordMetadata;
 import org.apache.kafka.common.serialization.StringSerializer;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.util.Properties;
@@ -40,7 +41,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.LinkedTransferQueue;
 
 public class OutputKafka extends Output<LogFeederProps, InputFileMarker> {
-  private static final Logger LOG = Logger.getLogger(OutputKafka.class);
+  private static final Logger logger = LogManager.getLogger(OutputKafka.class);
 
   private static final int FAILED_RETRY_INTERVAL = 30;
   private static final int CATCHUP_RETRY_INTERVAL = 5;
@@ -110,7 +111,7 @@ public class OutputKafka extends Output<LogFeederProps, InputFileMarker> {
           continue;
         }
         String kafkaKey = key.substring("kafka.".length());
-        LOG.info("Adding custom Kafka property. " + kafkaKey + "=" + value);
+        logger.info("Adding custom Kafka property. " + kafkaKey + "=" + value);
         props.put(kafkaKey, value);
       }
     }
@@ -127,7 +128,7 @@ public class OutputKafka extends Output<LogFeederProps, InputFileMarker> {
       @Override
       public void run() {
         KafkaCallBack kafkaCallBack = null;
-        LOG.info("Started thread to monitor failed messsages. " + getShortDescription());
+        logger.info("Started thread to monitor failed messsages. " + getShortDescription());
         while (true) {
           try {
             if (kafkaCallBack == null) {
@@ -136,7 +137,7 @@ public class OutputKafka extends Output<LogFeederProps, InputFileMarker> {
             if (publishMessage(kafkaCallBack.message, kafkaCallBack.inputMarker)) {
               kafkaCallBack = null;
             } else {
-              LOG.error("Kafka is down. messageNumber=" + kafkaCallBack.thisMessageNumber + ". Going to sleep for " +
+              logger.error("Kafka is down. messageNumber=" + kafkaCallBack.thisMessageNumber + ". Going to sleep for " +
                   FAILED_RETRY_INTERVAL + " seconds");
               Thread.sleep(FAILED_RETRY_INTERVAL * 1000);
             }
@@ -144,7 +145,7 @@ public class OutputKafka extends Output<LogFeederProps, InputFileMarker> {
           } catch (Throwable t) {
             String logMessageKey = this.getClass().getSimpleName() + "_KAFKA_RETRY_WRITE_ERROR";
             LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Error sending message to Kafka during retry. message=" +
-                (kafkaCallBack == null ? null : kafkaCallBack.message), t, LOG, Level.ERROR);
+                (kafkaCallBack == null ? null : kafkaCallBack.message), t, logger, Level.ERROR);
           }
         }
 
@@ -167,10 +168,10 @@ public class OutputKafka extends Output<LogFeederProps, InputFileMarker> {
           break;
         }
         if (!isKafkaBrokerUp) {
-          LOG.error("Kafka is down. Going to sleep for " + FAILED_RETRY_INTERVAL + " seconds");
+          logger.error("Kafka is down. Going to sleep for " + FAILED_RETRY_INTERVAL + " seconds");
           Thread.sleep(FAILED_RETRY_INTERVAL * 1000);
         } else {
-          LOG.warn("Kafka is still catching up from previous failed messages. outstanding messages=" + failedMessages.size() +
+          logger.warn("Kafka is still catching up from previous failed messages. outstanding messages=" + failedMessages.size() +
               " Going to sleep for " + CATCHUP_RETRY_INTERVAL + " seconds");
           Thread.sleep(CATCHUP_RETRY_INTERVAL * 1000);
         }
@@ -187,22 +188,22 @@ public class OutputKafka extends Output<LogFeederProps, InputFileMarker> {
   }
 
   public void flush() {
-    LOG.info("Flush called...");
+    logger.info("Flush called...");
     setDrain(true);
   }
 
   @Override
   public void close() {
-    LOG.info("Closing Kafka client...");
+    logger.info("Closing Kafka client...");
     flush();
     if (producer != null) {
       try {
         producer.close();
       } catch (Throwable t) {
-        LOG.error("Error closing Kafka topic. topic=" + topic);
+        logger.error("Error closing Kafka topic. topic=" + topic);
       }
     }
-    LOG.info("Closed Kafka client");
+    logger.info("Closed Kafka client");
     super.close();
   }
 
@@ -219,24 +220,24 @@ public class OutputKafka extends Output<LogFeederProps, InputFileMarker> {
           writeBytesMetric.value += block.length();
         }
         if (!isKafkaBrokerUp) {
-          LOG.info("Started writing to kafka. " + getShortDescription());
+          logger.info("Started writing to kafka. " + getShortDescription());
           isKafkaBrokerUp = true;
         }
         return true;
       } catch (InterruptedException e) {
         isKafkaBrokerUp = false;
         String logKeyMessage = this.getClass().getSimpleName() + "_KAFKA_INTERRUPT";
-        LogFeederUtil.logErrorMessageByInterval(logKeyMessage, "InterruptedException-Error sending message to Kafka", e, LOG,
+        LogFeederUtil.logErrorMessageByInterval(logKeyMessage, "InterruptedException-Error sending message to Kafka", e, logger,
             Level.ERROR);
       } catch (ExecutionException e) {
         isKafkaBrokerUp = false;
         String logKeyMessage = this.getClass().getSimpleName() + "_KAFKA_EXECUTION";
-        LogFeederUtil.logErrorMessageByInterval(logKeyMessage, "ExecutionException-Error sending message to Kafka", e, LOG,
+        LogFeederUtil.logErrorMessageByInterval(logKeyMessage, "ExecutionException-Error sending message to Kafka", e, logger,
             Level.ERROR);
       } catch (Throwable t) {
         isKafkaBrokerUp = false;
         String logKeyMessage = this.getClass().getSimpleName() + "_KAFKA_WRITE_ERROR";
-        LogFeederUtil.logErrorMessageByInterval(logKeyMessage, "GenericException-Error sending message to Kafka", t, LOG,
+        LogFeederUtil.logErrorMessageByInterval(logKeyMessage, "GenericException-Error sending message to Kafka", t, logger,
             Level.ERROR);
       }
     }
@@ -265,7 +266,7 @@ public class OutputKafka extends Output<LogFeederProps, InputFileMarker> {
     public void onCompletion(RecordMetadata metadata, Exception exception) {
       if (metadata != null) {
         if (!output.isKafkaBrokerUp) {
-          LOG.info("Started writing to kafka. " + output.getShortDescription());
+          logger.info("Started writing to kafka. " + output.getShortDescription());
           output.isKafkaBrokerUp = true;
         }
         output.incrementStat(1);
@@ -273,7 +274,7 @@ public class OutputKafka extends Output<LogFeederProps, InputFileMarker> {
       } else {
         output.isKafkaBrokerUp = false;
         String logKeyMessage = this.getClass().getSimpleName() + "_KAFKA_ASYNC_ERROR";
-        LogFeederUtil.logErrorMessageByInterval(logKeyMessage, "Error sending message to Kafka. Async Callback", exception, LOG,
+        LogFeederUtil.logErrorMessageByInterval(logKeyMessage, "Error sending message to Kafka. Async Callback", exception, logger,
             Level.ERROR);
 
         output.failedMessages.add(this);
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputLineFilter.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputLineFilter.java
index 04600a3..f10cb9b 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputLineFilter.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputLineFilter.java
@@ -21,18 +21,17 @@ package org.apache.ambari.logfeeder.output;
 import org.apache.ambari.logfeeder.common.LogFeederConstants;
 import org.apache.ambari.logfeeder.plugin.input.cache.LRUCache;
 import org.apache.ambari.logfeeder.plugin.input.Input;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.Map;
 
-
 /**
  * Filter for outputs based on input configs, which can drop lines if the filter applies.
  */
 public class OutputLineFilter {
 
-  private static final Logger LOG = LoggerFactory.getLogger(OutputLineFilter.class);
+  private static final Logger logger = LogManager.getLogger(OutputLineFilter.class);
 
   /**
    * Applies filter based on input cache (on service log only).
@@ -52,7 +51,7 @@ public class OutputLineFilter {
         if (!isLogFilteredOut) {
           inputLruCache.put(logMessage, timestamp);
         } else {
-          LOG.debug("Log line filtered out: {} (file: {}, dedupInterval: {}, lastDedupEnabled: {})",
+          logger.debug("Log line filtered out: {} (file: {}, dedupInterval: {}, lastDedupEnabled: {})",
             logMessage, inputLruCache.getFileName(), inputLruCache.getDedupInterval(), inputLruCache.isLastDedupEnabled());
         }
       }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputManagerImpl.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputManagerImpl.java
index 390a770..595a738 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputManagerImpl.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputManagerImpl.java
@@ -33,8 +33,9 @@ import org.apache.ambari.logfeeder.util.LogFeederUtil;
 import org.apache.ambari.logsearch.config.api.OutputConfigMonitor;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.inject.Inject;
 import java.io.File;
@@ -44,7 +45,7 @@ import java.util.List;
 import java.util.Map;
 
 public class OutputManagerImpl extends OutputManager {
-  private static final Logger LOG = Logger.getLogger(OutputManagerImpl.class);
+  private static final Logger logger = LogManager.getLogger(OutputManagerImpl.class);
 
   private static final int MAX_OUTPUT_SIZE = 32765; // 32766-1
 
@@ -155,7 +156,7 @@ public class OutputManagerImpl extends OutputManager {
           }
           output.write(jsonObj, inputMarker);
         } catch (Exception e) {
-          LOG.error("Error writing. to " + output.getShortDescription(), e);
+          logger.error("Error writing. to " + output.getShortDescription(), e);
         }
       }
     }
@@ -178,7 +179,7 @@ public class OutputManagerImpl extends OutputManager {
       String logMessageKey = this.getClass().getSimpleName() + "_MESSAGESIZE";
       LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Message is too big. size=" + logMessage.getBytes().length +
         ", input=" + input.getShortDescription() + ". Truncating to " + MAX_OUTPUT_SIZE + ", first upto 100 characters=" +
-        StringUtils.abbreviate(logMessage, 100), null, LOG, Level.WARN);
+        StringUtils.abbreviate(logMessage, 100), null, logger, Level.WARN);
       logMessage = new String(logMessage.getBytes(), 0, MAX_OUTPUT_SIZE);
       jsonObj.put("log_message", logMessage);
       List<String> tagsList = (List<String>) jsonObj.get("tags");
@@ -199,7 +200,7 @@ public class OutputManagerImpl extends OutputManager {
         try {
           output.write(jsonBlock, inputMarker);
         } catch (Exception e) {
-          LOG.error("Error writing. to " + output.getShortDescription(), e);
+          logger.error("Error writing. to " + output.getShortDescription(), e);
         }
       }
     }
@@ -212,7 +213,7 @@ public class OutputManagerImpl extends OutputManager {
       try {
         output.copyFile(inputFile, inputMarker);
       }catch (Exception e) {
-        LOG.error("Error coyping file . to " + output.getShortDescription(), e);
+        logger.error("Error coyping file . to " + output.getShortDescription(), e);
       }
     }
   }
@@ -232,7 +233,7 @@ public class OutputManagerImpl extends OutputManager {
   }
 
   public void close() {
-    LOG.info("Close called for outputs ...");
+    logger.info("Close called for outputs ...");
     for (Output output : outputs) {
       try {
         output.setDrain(true);
@@ -251,7 +252,7 @@ public class OutputManagerImpl extends OutputManager {
         if (!output.isClosed()) {
           try {
             allClosed = false;
-            LOG.warn("Waiting for output to close. " + output.getShortDescription() + ", " + (iterations - i) + " more seconds");
+            logger.warn("Waiting for output to close. " + output.getShortDescription() + ", " + (iterations - i) + " more seconds");
             Thread.sleep(waitTimeMS);
           } catch (Throwable t) {
             // Ignore
@@ -259,15 +260,15 @@ public class OutputManagerImpl extends OutputManager {
         }
       }
       if (allClosed) {
-        LOG.info("All outputs are closed. Iterations=" + i);
+        logger.info("All outputs are closed. Iterations=" + i);
         return;
       }
     }
 
-    LOG.warn("Some outpus were not closed after " + iterations + "  iterations");
+    logger.warn("Some outpus were not closed after " + iterations + "  iterations");
     for (Output output : outputs) {
       if (!output.isClosed()) {
-        LOG.warn("Output not closed. Will ignore it." + output.getShortDescription() + ", pendingCound=" + output.getPendingCount());
+        logger.warn("Output not closed. Will ignore it." + output.getShortDescription() + ", pendingCound=" + output.getPendingCount());
       }
     }
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputS3File.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputS3File.java
index fc64d4b..38a2937 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputS3File.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputS3File.java
@@ -37,14 +37,14 @@ import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputConfi
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputConfigImpl;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputDescriptorImpl;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputS3FileDescriptorImpl;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
-
 /**
  * Write log file into s3 bucket.
  *
@@ -55,7 +55,7 @@ import java.util.Map;
  * </ul>
  */
 public class OutputS3File extends OutputFile implements RolloverCondition, RolloverHandler {
-  private static final Logger LOG = Logger.getLogger(OutputS3File.class);
+  private static final Logger logger = LogManager.getLogger(OutputS3File.class);
 
   public static final String GLOBAL_CONFIG_S3_PATH_SUFFIX = "global.config.json";
 
@@ -130,8 +130,8 @@ public class OutputS3File extends OutputFile implements RolloverCondition, Rollo
     String s3ResolvedKey = new S3LogPathResolver().getResolvedPath(getStringValue("s3_config_dir"), s3KeySuffix,
         s3OutputConfiguration.getCluster());
 
-    S3Util.writeIntoS3File(configJson, s3OutputConfiguration.getS3BucketName(), s3ResolvedKey,
-        s3OutputConfiguration.getS3AccessKey(), s3OutputConfiguration.getS3SecretKey());
+    S3Util.writeDataIntoS3File(configJson, s3OutputConfiguration.getS3BucketName(), s3ResolvedKey,
+      s3OutputConfiguration.getS3Endpoint(), s3OutputConfiguration.getS3AccessKey(), s3OutputConfiguration.getS3SecretKey());
   }
 
   private String getComponentConfigFileName(String componentName) {
@@ -200,7 +200,7 @@ public class OutputS3File extends OutputFile implements RolloverCondition, Rollo
         s3Uploader = createUploader(input.getInputDescriptor().getType());
         logSpooler.add(block);
       } else {
-        LOG.error("Cannot write from non local file...");
+        logger.error("Cannot write from non local file...");
       }
     }
   }
@@ -215,7 +215,7 @@ public class OutputS3File extends OutputFile implements RolloverCondition, Rollo
   @VisibleForTesting
   protected LogSpooler createSpooler(String filePath) {
     String spoolDirectory = logFeederProps.getTmpDir() + "/s3/service";
-    LOG.info(String.format("Creating spooler with spoolDirectory=%s, filePath=%s", spoolDirectory, filePath));
+    logger.info(String.format("Creating spooler with spoolDirectory=%s, filePath=%s", spoolDirectory, filePath));
     return new LogSpooler(spoolDirectory, new File(filePath).getName()+"-", this, this,
         s3OutputConfiguration.getRolloverTimeThresholdSecs());
   }
@@ -234,7 +234,7 @@ public class OutputS3File extends OutputFile implements RolloverCondition, Rollo
     long currentSize = spoolFile.length();
     boolean result = (currentSize >= s3OutputConfiguration.getRolloverSizeThresholdBytes());
     if (result) {
-      LOG.info(String.format("Rolling over %s, current size %d, threshold size %d", spoolFile, currentSize,
+      logger.info(String.format("Rolling over %s, current size %d, threshold size %d", spoolFile, currentSize,
           s3OutputConfiguration.getRolloverSizeThresholdBytes()));
     }
     return result;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputSolr.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputSolr.java
index 350986e..5d8e59d 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputSolr.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/OutputSolr.java
@@ -28,8 +28,9 @@ import org.apache.ambari.logfeeder.util.DateUtil;
 import org.apache.ambari.logfeeder.util.LogFeederUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
@@ -57,7 +58,7 @@ import java.util.stream.Collectors;
 
 public class OutputSolr extends Output<LogFeederProps, InputMarker> {
 
-  private static final Logger LOG = Logger.getLogger(OutputSolr.class);
+  private static final Logger logger = LogManager.getLogger(OutputSolr.class);
 
   private static final int SHARDS_WAIT_MS = 10000;
 
@@ -153,18 +154,18 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
 
     maxBufferSize = getIntValue("flush_size", DEFAULT_MAX_BUFFER_SIZE);
     if (maxBufferSize < 1) {
-      LOG.warn("maxBufferSize is less than 1. Making it 1");
+      logger.warn("maxBufferSize is less than 1. Making it 1");
       maxBufferSize = 1;
     }
 
-    LOG.info(String.format("Config: Number of workers=%d, splitMode=%s, splitInterval=%d."
+    logger.info(String.format("Config: Number of workers=%d, splitMode=%s, splitInterval=%d."
         + getShortDescription(), workers, splitMode, splitInterval));
 
     implicitRouting = logFeederProps.isSolrImplicitRouting(); // TODO: in the future, load it from output config (can be a use case to use different routing for audit/service logs)
     if (implicitRouting) {
-      LOG.info("Config: Use implicit routing globally for adding docs to Solr.");
+      logger.info("Config: Use implicit routing globally for adding docs to Solr.");
     } else {
-      LOG.info("Config: Use compositeId globally for adding docs to Solr.");
+      logger.info("Config: Use compositeId globally for adding docs to Solr.");
     }
   }
 
@@ -173,14 +174,14 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
     if (securityEnabled) {
       String javaSecurityConfig = System.getProperty(JAVA_SECURITY_AUTH_LOGIN_CONFIG);
       String solrHttpBuilderFactory = System.getProperty(SOLR_HTTPCLIENT_BUILDER_FACTORY);
-      LOG.info("setupSecurity() called for kerberos configuration, jaas file: "
+      logger.info("setupSecurity() called for kerberos configuration, jaas file: "
         + javaSecurityConfig + ", solr http client factory: " + solrHttpBuilderFactory);
     }
   }
 
   private void createOutgoingBuffer() {
     int bufferSize = maxBufferSize * (workers + 3);
-    LOG.info("Creating blocking queue with bufferSize=" + bufferSize);
+    logger.info("Creating blocking queue with bufferSize=" + bufferSize);
     outgoingBuffer = new LinkedBlockingQueue<OutputData>(bufferSize);
   }
 
@@ -199,17 +200,17 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
 
   private void pingSolr(int count, SolrClient solrClient) {
     try {
-      LOG.info("Pinging Solr server.");
+      logger.info("Pinging Solr server.");
       SolrPingResponse response = solrClient.ping();
       if (response.getStatus() == 0) {
-        LOG.info("Ping to Solr server is successful for worker=" + count);
+        logger.info("Ping to Solr server is successful for worker=" + count);
       } else {
-        LOG.warn(
+        logger.warn(
             String.format("Ping to Solr server failed. It would check again. worker=%d, collection=%s, " +
                 "response=%s", count, collection, response));
       }
     } catch (Throwable t) {
-      LOG.warn(String.format(
+      logger.warn(String.format(
           "Ping to Solr server failed. It would check again. worker=%d, collection=%s", count, collection), t);
     }
   }
@@ -243,7 +244,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
   }
 
   public void flush() {
-    LOG.info("Flush called...");
+    logger.info("Flush called...");
     setDrain(true);
 
     int wrapUpTimeSecs = 30;
@@ -263,7 +264,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
       }
       if (isPending) {
         try {
-          LOG.info("Will give " + (wrapUpTimeSecs - i) + " seconds to wrap up");
+          logger.info("Will give " + (wrapUpTimeSecs - i) + " seconds to wrap up");
           Thread.sleep(1000);
         } catch (InterruptedException e) {
           // ignore
@@ -289,10 +290,10 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
 
   @Override
   public void close() {
-    LOG.info("Closing Solr client...");
+    logger.info("Closing Solr client...");
     flush();
 
-    LOG.info("Closed Solr client");
+    logger.info("Closed Solr client");
     super.close();
   }
 
@@ -316,7 +317,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
 
     @Override
     public void run() {
-      LOG.info("SolrWorker thread started");
+      logger.info("SolrWorker thread started");
       long lastDispatchTime = System.currentTimeMillis();
 
       while (true) {
@@ -340,7 +341,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
             boolean response = sendToSolr(outputData);
             if (isDrain() && !response) {
               //Since sending to Solr response failed and it is in draining mode, let's break;
-              LOG.warn("In drain mode and sending to Solr failed. So exiting. output=" + getShortDescription());
+              logger.warn("In drain mode and sending to Solr failed. So exiting. output=" + getShortDescription());
               break;
             }
           }
@@ -352,7 +353,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
           // Handle thread exiting
         } catch (Throwable t) {
           String logMessageKey = this.getClass().getSimpleName() + "_SOLR_MAINLOOP_EXCEPTION";
-          LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Caught exception in main loop. " + outputData, t, LOG,
+          LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Caught exception in main loop. " + outputData, t, logger,
                 Level.ERROR);
         }
       }
@@ -360,7 +361,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
       closeSolrClient();
 
       resetLocalBuffer();
-      LOG.info("Exiting Solr worker thread. output=" + getShortDescription());
+      logger.info("Exiting Solr worker thread. output=" + getShortDescription());
     }
     
     /**
@@ -385,7 +386,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
         } catch (IOException | SolrException exception) {
           // Transient error, lets block till it is available
           try {
-            LOG.warn("Solr is not reachable. Going to retry after " + RETRY_INTERVAL + " seconds. " + "output="
+            logger.warn("Solr is not reachable. Going to retry after " + RETRY_INTERVAL + " seconds. " + "output="
                 + getShortDescription(), exception);
             Thread.sleep(RETRY_INTERVAL * 1000);
           } catch (Throwable t) {
@@ -396,7 +397,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
           // Clear the buffer
           String logMessageKey = this.getClass().getSimpleName() + "_SOLR_UPDATE_EXCEPTION";
           LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Error sending log message to server. Dropping logs",
-              serverException, LOG, Level.ERROR);
+              serverException, logger, Level.ERROR);
           resetLocalBuffer();
           break;
         }
@@ -424,7 +425,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
           localBufferBytesSize += obj.toString().length();
         } catch (Throwable t) {
           String logMessageKey = this.getClass().getSimpleName() + "_BYTE_COUNT_ERROR";
-          LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Error calculating byte size. object=" + obj, t, LOG,
+          LogFeederUtil.logErrorMessageByInterval(logMessageKey, "Error calculating byte size. object=" + obj, t, logger,
               Level.ERROR);
         }
       }
@@ -452,7 +453,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
       String shard = shards.get(slotByMin);
 
       if (lastSlotByMin != slotByMin) {
-        LOG.info("Switching to shard " + shard + ", output=" + getShortDescription());
+        logger.info("Switching to shard " + shard + ", output=" + getShortDescription());
         lastSlotByMin = slotByMin;
       }
 
@@ -466,7 +467,7 @@ public class OutputSolr extends Output<LogFeederProps, InputMarker> {
       if (response.getStatus() != 0) {
         String logMessageKey = this.getClass().getSimpleName() + "_SOLR_UPDATE_ERROR";
         LogFeederUtil.logErrorMessageByInterval(logMessageKey,
-            String.format("Error writing to Solr. response=%s, log=%s", response, outputData), null, LOG, Level.ERROR);
+            String.format("Error writing to Solr. response=%s, log=%s", response, outputData), null, logger, Level.ERROR);
       }
       statMetric.value += localBuffer.size();
       writeBytesMetric.value += localBufferBytesSize;
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/S3OutputConfiguration.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/S3OutputConfiguration.java
index a2d7692..293f011 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/S3OutputConfiguration.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/S3OutputConfiguration.java
@@ -37,6 +37,8 @@ public class S3OutputConfiguration {
   public static final String S3_LOG_DIR_KEY = "s3_log_dir";
   public static final String S3_ACCESS_KEY = "s3_access_key";
   public static final String S3_SECRET_KEY = "s3_secret_key";
+  public static final String S3_ENDPOINT = "s3_endpoint";
+  public static final String DEFAULT_S3_ENDPOINT = "https://s3.amazonaws.com";
   public static final String COMPRESSION_ALGO_KEY = "compression_algo";
   public static final String ADDITIONAL_FIELDS_KEY = "add_fields";
   public static final String CLUSTER_KEY = "cluster";
@@ -51,6 +53,10 @@ public class S3OutputConfiguration {
     return (String) configs.get(S3_BUCKET_NAME_KEY);
   }
 
+  public String getS3Endpoint() {
+    return (String) configs.getOrDefault(S3_ENDPOINT, DEFAULT_S3_ENDPOINT);
+  }
+
   public String getS3Path() {
     return (String) configs.get(S3_LOG_DIR_KEY);
   }
@@ -84,7 +90,7 @@ public class S3OutputConfiguration {
     Map<String, Object> configs = new HashMap<>();
     String[] stringValuedKeysToCopy = new String[] {
         SPOOL_DIR_KEY, S3_BUCKET_NAME_KEY, S3_LOG_DIR_KEY,
-        S3_ACCESS_KEY, S3_SECRET_KEY, COMPRESSION_ALGO_KEY
+        S3_ACCESS_KEY, S3_SECRET_KEY, COMPRESSION_ALGO_KEY, S3_ENDPOINT
     };
 
     for (String key : stringValuedKeysToCopy) {
@@ -108,6 +114,8 @@ public class S3OutputConfiguration {
 
     configs.put(ADDITIONAL_FIELDS_KEY, configItem.getNVList(ADDITIONAL_FIELDS_KEY));
 
+    configs.putIfAbsent(S3_ENDPOINT, DEFAULT_S3_ENDPOINT);
+
     return new S3OutputConfiguration(configs);
   }
 }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/S3Uploader.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/S3Uploader.java
index ddf3995..4273cc7 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/S3Uploader.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/S3Uploader.java
@@ -18,14 +18,12 @@
 
 package org.apache.ambari.logfeeder.output;
 
-import com.amazonaws.AmazonClientException;
-import com.amazonaws.services.s3.transfer.TransferManager;
-import com.amazonaws.services.s3.transfer.Upload;
 import com.google.common.annotations.VisibleForTesting;
 import org.apache.ambari.logfeeder.common.LogFeederConstants;
 import org.apache.ambari.logfeeder.util.CompressionUtil;
 import org.apache.ambari.logfeeder.util.S3Util;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.util.Date;
@@ -42,7 +40,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
  * {@link org.apache.ambari.logfeeder.input.InputFile}.
  */
 public class S3Uploader implements Runnable {
-  private static final Logger LOG = Logger.getLogger(S3Uploader.class);
+  private static final Logger logger = LogManager.getLogger(S3Uploader.class);
   
   public static final String POISON_PILL = "POISON-PILL";
 
@@ -82,7 +80,7 @@ public class S3Uploader implements Runnable {
     stopRunningThread.set(true);
     boolean offerStatus = fileContextsToUpload.offer(POISON_PILL);
     if (!offerStatus) {
-      LOG.warn("Could not add poison pill to interrupt uploader thread.");
+      logger.warn("Could not add poison pill to interrupt uploader thread.");
     }
   }
 
@@ -93,7 +91,7 @@ public class S3Uploader implements Runnable {
   void addFileForUpload(String fileToUpload) {
     boolean offerStatus = fileContextsToUpload.offer(fileToUpload);
     if (!offerStatus) {
-      LOG.error("Could not add file " + fileToUpload + " for upload.");
+      logger.error("Could not add file " + fileToUpload + " for upload.");
     }
   }
 
@@ -103,12 +101,12 @@ public class S3Uploader implements Runnable {
       try {
         String fileNameToUpload = fileContextsToUpload.take();
         if (POISON_PILL.equals(fileNameToUpload)) {
-          LOG.warn("Found poison pill while waiting for files to upload, exiting");
+          logger.warn("Found poison pill while waiting for files to upload, exiting");
           return;
         }
         uploadFile(new File(fileNameToUpload), logType);
       } catch (InterruptedException e) {
-        LOG.error("Interrupted while waiting for elements from fileContextsToUpload", e);
+        logger.error("Interrupted while waiting for elements from fileContextsToUpload", e);
         return;
       }
     }
@@ -129,39 +127,33 @@ public class S3Uploader implements Runnable {
     String s3AccessKey = s3OutputConfiguration.getS3AccessKey();
     String s3SecretKey = s3OutputConfiguration.getS3SecretKey();
     String compressionAlgo = s3OutputConfiguration.getCompressionAlgo();
+    String s3Endpoint = s3OutputConfiguration.getS3Endpoint();
 
     String keySuffix = fileToUpload.getName() + "." + compressionAlgo;
     String s3Path = new S3LogPathResolver().getResolvedPath(
         s3OutputConfiguration.getS3Path() + LogFeederConstants.S3_PATH_SEPARATOR + logType, keySuffix,
         s3OutputConfiguration.getCluster());
-    LOG.info(String.format("keyPrefix=%s, keySuffix=%s, s3Path=%s", s3OutputConfiguration.getS3Path(), keySuffix, s3Path));
+    logger.info(String.format("keyPrefix=%s, keySuffix=%s, s3Path=%s", s3OutputConfiguration.getS3Path(), keySuffix, s3Path));
     File sourceFile = createCompressedFileForUpload(fileToUpload, compressionAlgo);
 
-    LOG.info("Starting S3 upload " + sourceFile + " -> " + bucketName + ", " + s3Path);
-    uploadFileToS3(bucketName, s3Path, sourceFile, s3AccessKey, s3SecretKey);
+    logger.info("Starting S3 upload " + sourceFile + " -> " + bucketName + ", " + s3Path);
+    writeFileIntoS3File(sourceFile, bucketName, s3Path, s3Endpoint, s3AccessKey, s3SecretKey);
 
     // delete local compressed file
     sourceFile.delete();
     if (deleteOnEnd) {
-      LOG.info("Deleting input file as required");
+      logger.info("Deleting input file as required");
       if (!fileToUpload.delete()) {
-        LOG.error("Could not delete file " + fileToUpload.getAbsolutePath() + " after upload to S3");
+        logger.error("Could not delete file " + fileToUpload.getAbsolutePath() + " after upload to S3");
       }
     }
     return s3Path;
   }
 
   @VisibleForTesting
-  protected void uploadFileToS3(String bucketName, String s3Key, File localFile, String accessKey, String secretKey) {
-    TransferManager transferManager = S3Util.getTransferManager(accessKey, secretKey);
-    try {
-      Upload upload = transferManager.upload(bucketName, s3Key, localFile);
-      upload.waitForUploadResult();
-    } catch (AmazonClientException | InterruptedException e) {
-      LOG.error("s3 uploading failed for file :" + localFile.getAbsolutePath(), e);
-    } finally {
-      S3Util.shutdownTransferManager(transferManager);
-    }
+  protected void writeFileIntoS3File(File sourceFile, String bucketName, String s3Path,
+                                     String s3Endpoint, String s3AccessKey, String s3SecretKey) {
+    S3Util.writeFileIntoS3File(sourceFile.getAbsolutePath(), bucketName, s3Path, s3Endpoint, s3AccessKey, s3SecretKey);
   }
 
   @VisibleForTesting
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/spool/LogSpooler.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/spool/LogSpooler.java
index 7fc47a9..7d7d111 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/spool/LogSpooler.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/output/spool/LogSpooler.java
@@ -20,7 +20,8 @@ package org.apache.ambari.logfeeder.output.spool;
 
 import com.google.common.annotations.VisibleForTesting;
 import org.apache.ambari.logfeeder.util.DateUtil;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.BufferedWriter;
 import java.io.File;
@@ -43,7 +44,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
  */
 public class LogSpooler {
   
-  private static final Logger LOG = Logger.getLogger(LogSpooler.class);
+  private static final Logger logger = LogManager.getLogger(LogSpooler.class);
   public static final long TIME_BASED_ROLLOVER_DISABLED_THRESHOLD = 0;
   static final String fileDateFormat = "yyyy-MM-dd-HH-mm-ss";
 
@@ -102,7 +103,7 @@ public class LogSpooler {
   private void initializeSpoolDirectory() {
     File spoolDir = new File(spoolDirectory);
     if (!spoolDir.exists()) {
-      LOG.info("Creating spool directory: " + spoolDir);
+      logger.info("Creating spool directory: " + spoolDir);
       boolean result = spoolDir.mkdirs();
       if (!result) {
         throw new LogSpoolerException("Could not create spool directory: " + spoolDirectory);
@@ -120,7 +121,7 @@ public class LogSpooler {
           + ", error message: " + e.getLocalizedMessage(), e);
     }
     currentSpoolerContext = new LogSpoolerContext(currentSpoolFile);
-    LOG.info("Initialized spool file at path: " + currentSpoolFile);
+    logger.info("Initialized spool file at path: " + currentSpoolFile);
   }
 
   @VisibleForTesting
@@ -145,7 +146,7 @@ public class LogSpooler {
     currentSpoolBufferedWriter.println(logEvent);
     currentSpoolerContext.logEventSpooled();
     if (rolloverCondition.shouldRollover(currentSpoolerContext)) {
-      LOG.info("Trying to rollover based on rollover condition");
+      logger.info("Trying to rollover based on rollover condition");
       tryRollover();
     }
   }
@@ -158,19 +159,19 @@ public class LogSpooler {
    * rolled over file.
    */
   public void rollover() {
-    LOG.info("Rollover condition detected, rolling over file: " + currentSpoolFile);
+    logger.info("Rollover condition detected, rolling over file: " + currentSpoolFile);
     currentSpoolBufferedWriter.flush();
     if (currentSpoolFile.length()==0) {
-      LOG.info("No data in file " + currentSpoolFile + ", not doing rollover");
+      logger.info("No data in file " + currentSpoolFile + ", not doing rollover");
     } else {
       currentSpoolBufferedWriter.close();
       rolloverHandler.handleRollover(currentSpoolFile);
-      LOG.info("Invoked rollover handler with file: " + currentSpoolFile);
+      logger.info("Invoked rollover handler with file: " + currentSpoolFile);
       initializeSpoolState();
     }
     boolean status = rolloverInProgress.compareAndSet(true, false);
     if (!status) {
-      LOG.error("Should have reset rollover flag!!");
+      logger.error("Should have reset rollover flag!!");
     }
   }
 
@@ -178,7 +179,7 @@ public class LogSpooler {
     if (rolloverInProgress.compareAndSet(false, true)) {
       rollover();
     } else {
-      LOG.warn("Ignoring rollover call as rollover already in progress for file " +
+      logger.warn("Ignoring rollover call as rollover already in progress for file " +
           currentSpoolFile);
     }
   }
@@ -201,7 +202,7 @@ public class LogSpooler {
   private class LogSpoolerRolloverTimerTask extends TimerTask {
     @Override
     public void run() {
-      LOG.info("Trying rollover based on time");
+      logger.info("Trying rollover based on time");
       tryRollover();
     }
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/AWSUtil.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/AWSUtil.java
deleted file mode 100644
index f814a92..0000000
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/AWSUtil.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logfeeder.util;
-
-import org.apache.log4j.Logger;
-
-import com.amazonaws.auth.AWSCredentials;
-import com.amazonaws.auth.BasicAWSCredentials;
-
-public class AWSUtil {
-  private static final Logger LOG = Logger.getLogger(AWSUtil.class);
-
-  private AWSUtil() {
-    throw new UnsupportedOperationException();
-  }
-
-  public static AWSCredentials createAWSCredentials(String accessKey, String secretKey) {
-    if (accessKey != null && secretKey != null) {
-      LOG.debug("Creating aws client as per new accesskey and secretkey");
-      AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
-      return awsCredentials;
-    } else {
-      return null;
-    }
-  }
-}
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/CompressionUtil.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/CompressionUtil.java
index c460ab3..cd39b00 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/CompressionUtil.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/CompressionUtil.java
@@ -26,11 +26,12 @@ import java.io.OutputStream;
 import org.apache.commons.compress.compressors.CompressorOutputStream;
 import org.apache.commons.compress.compressors.CompressorStreamFactory;
 import org.apache.commons.compress.utils.IOUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class CompressionUtil {
 
-  private static final Logger LOG = Logger.getLogger(CompressionUtil.class);
+  private static final Logger logger = LogManager.getLogger(CompressionUtil.class);
 
   public static File compressFile(File inputFile, File outputFile, String algoName) {
     CompressorOutputStream cos = null;
@@ -54,20 +55,20 @@ public class CompressionUtil {
       ios = new FileInputStream(inputFile);
       IOUtils.copy(ios, cos);
     } catch (Exception e) {
-      LOG.error(e);
+      logger.error(e);
     } finally {
       if (cos != null) {
         try {
           cos.close();
         } catch (IOException e) {
-          LOG.error(e);
+          logger.error(e);
         }
       }
       if (ios != null) {
         try {
           ios.close();
         } catch (IOException e) {
-          LOG.error(e);
+          logger.error(e);
         }
       }
     }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/DateUtil.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/DateUtil.java
index 6321e17..811feeb 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/DateUtil.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/DateUtil.java
@@ -18,14 +18,15 @@
  */
 package org.apache.ambari.logfeeder.util;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.TimeZone;
 
-import org.apache.log4j.Logger;
-
 public class DateUtil {
-  private static final Logger LOG = Logger.getLogger(DateUtil.class);
+  private static final Logger logger = LogManager.getLogger(DateUtil.class);
   
   private DateUtil() {
     throw new UnsupportedOperationException();
@@ -39,7 +40,7 @@ public class DateUtil {
       SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);
       return formatter.format(date).toString();
     } catch (Exception e) {
-      LOG.error("Error in coverting dateToString  format :" + dateFormat, e);
+      logger.error("Error in coverting dateToString  format :" + dateFormat, e);
     }
     return "";
   }
@@ -58,7 +59,7 @@ public class DateUtil {
     try {
       return dateFormatter.get().format(new Date(Long.parseLong(timeStampStr)));
     } catch (Exception ex) {
-      LOG.error(ex);
+      logger.error(ex);
       return null;
     }
   }
@@ -67,7 +68,7 @@ public class DateUtil {
     try {
       return dateFormatter.get().format(new Date());
     } catch (Exception ex) {
-      LOG.error(ex);
+      logger.error(ex);
       return null;
     }
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/FileUtil.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/FileUtil.java
index 3270d29..8e2b2c9 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/FileUtil.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/FileUtil.java
@@ -34,14 +34,14 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.tools.ant.DirectoryScanner;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.type.TypeReference;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class FileUtil {
-  private static final Logger LOG = LoggerFactory.getLogger(FileUtil.class);
+  private static final Logger logger = LogManager.getLogger(FileUtil.class);
   private static final String FOLDER_SEPARATOR = "/";
 
   private FileUtil() {
@@ -50,9 +50,9 @@ public class FileUtil {
 
   public static List<File> getAllFileFromDir(File directory, String extension, boolean checkInSubDir) {
     if (!directory.exists()) {
-      LOG.error(directory.getAbsolutePath() + " is not exists ");
+      logger.error(directory.getAbsolutePath() + " is not exists ");
     } else if (!directory.isDirectory()) {
-      LOG.error(directory.getAbsolutePath() + " is not Directory ");
+      logger.error(directory.getAbsolutePath() + " is not Directory ");
     } else {
       return (List<File>) FileUtils.listFiles(directory, new String[]{extension}, checkInSubDir);
     }
@@ -68,19 +68,19 @@ public class FileUtil {
         return basicAttr.fileKey();
       }
     } catch (Throwable ex) {
-      LOG.error("Error getting file attributes for file=" + file, ex);
+      logger.error("Error getting file attributes for file=" + file, ex);
     }
     return file.toString();
   }
 
   public static File getFileFromClasspath(String filename) {
     URL fileCompleteUrl = Thread.currentThread().getContextClassLoader().getResource(filename);
-    LOG.debug("File Complete URI :" + fileCompleteUrl);
+    logger.debug("File Complete URI :" + fileCompleteUrl);
     File file = null;
     try {
       file = new File(fileCompleteUrl.toURI());
     } catch (Exception exception) {
-      LOG.debug(exception.getMessage(), exception.getCause());
+      logger.debug(exception.getMessage(), exception.getCause());
     }
     return file;
   }
@@ -91,7 +91,7 @@ public class FileUtil {
       HashMap<String, Object> jsonmap = mapper.readValue(jsonFile, new TypeReference<HashMap<String, Object>>() {});
       return jsonmap;
     } catch (IOException e) {
-      LOG.error("{}", e);
+      logger.error("{}", e);
     }
     return new HashMap<String, Object>();
   }
@@ -121,11 +121,11 @@ public class FileUtil {
             return files;
           }
         } catch (Exception e) {
-          LOG.info("Input file was not found by pattern (exception thrown); {}, message: {}", searchPath, e.getMessage());
+          logger.info("Input file was not found by pattern (exception thrown); {}, message: {}", searchPath, e.getMessage());
         }
 
       } else {
-        LOG.info("Input file config was not found by pattern; {}", searchPath);
+        logger.debug("Input file config was not found by pattern; {}", searchPath);
       }
       return new File[]{};
     }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederHDFSUtil.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederHDFSUtil.java
index 4248ae1..a225a12 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederHDFSUtil.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederHDFSUtil.java
@@ -23,10 +23,11 @@ import java.io.IOException;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 public class LogFeederHDFSUtil {
-  private static final Logger LOG = Logger.getLogger(LogFeederHDFSUtil.class);
+  private static final Logger logger = LogManager.getLogger(LogFeederHDFSUtil.class);
 
   private LogFeederHDFSUtil() {
     throw new UnsupportedOperationException();
@@ -38,11 +39,11 @@ public class LogFeederHDFSUtil {
     Path dst = new Path(destFilePath);
     boolean isCopied = false;
     try {
-      LOG.info("copying localfile := " + sourceFilepath + " to hdfsPath := " + destFilePath);
+      logger.info("copying localfile := " + sourceFilepath + " to hdfsPath := " + destFilePath);
       fileSystem.copyFromLocalFile(delSrc, overwrite, src, dst);
       isCopied = true;
     } catch (Exception e) {
-      LOG.error("Error copying local file :" + sourceFilepath + " to hdfs location : " + destFilePath, e);
+      logger.error("Error copying local file :" + sourceFilepath + " to hdfs location : " + destFilePath, e);
     }
     return isCopied;
   }
@@ -53,7 +54,7 @@ public class LogFeederHDFSUtil {
       FileSystem fs = FileSystem.get(configuration);
       return fs;
     } catch (Exception e) {
-      LOG.error("Exception is buildFileSystem :", e);
+      logger.error("Exception is buildFileSystem :", e);
     }
     return null;
   }
@@ -70,7 +71,7 @@ public class LogFeederHDFSUtil {
       try {
         fileSystem.close();
       } catch (IOException e) {
-        LOG.error(e.getLocalizedMessage(), e.getCause());
+        logger.error(e.getLocalizedMessage(), e.getCause());
       }
     }
   }
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederUtil.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederUtil.java
index 9b0b0e8..faa9284 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederUtil.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/LogFeederUtil.java
@@ -25,8 +25,9 @@ import org.apache.ambari.logfeeder.input.InputFile;
 import org.apache.ambari.logfeeder.plugin.common.MetricData;
 import org.apache.ambari.logfeeder.plugin.input.InputMarker;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.lang.reflect.Type;
 import java.net.InetAddress;
@@ -36,7 +37,7 @@ import java.util.Hashtable;
 import java.util.Map;
 
 public class LogFeederUtil {
-  private static final Logger LOG = Logger.getLogger(LogFeederUtil.class);
+  private static final Logger logger = LogManager.getLogger(LogFeederUtil.class);
 
   private final static String GSON_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
   private static Gson gson = new GsonBuilder().setDateFormat(GSON_DATE_FORMAT).create();
@@ -55,16 +56,16 @@ public class LogFeederUtil {
       String getHostName = ip.getHostName();
       String getCanonicalHostName = ip.getCanonicalHostName();
       if (!getCanonicalHostName.equalsIgnoreCase(ipAddress)) {
-        LOG.info("Using getCanonicalHostName()=" + getCanonicalHostName);
+        logger.info("Using getCanonicalHostName()=" + getCanonicalHostName);
         hostName = getCanonicalHostName;
       } else {
-        LOG.info("Using getHostName()=" + getHostName);
+        logger.info("Using getHostName()=" + getHostName);
         hostName = getHostName;
       }
-      LOG.info("ipAddress=" + ipAddress + ", getHostName=" + getHostName + ", getCanonicalHostName=" + getCanonicalHostName +
+      logger.info("ipAddress=" + ipAddress + ", getHostName=" + getHostName + ", getCanonicalHostName=" + getCanonicalHostName +
         ", hostName=" + hostName);
     } catch (UnknownHostException e) {
-      LOG.error("Error getting hostname.", e);
+      logger.error("Error getting hostname.", e);
     }
   }
 
@@ -72,7 +73,7 @@ public class LogFeederUtil {
     long currStat = metric.value;
     long currMS = System.currentTimeMillis();
     if (currStat > metric.prevLogValue) {
-      LOG.info(prefixStr + ": total_count=" + metric.value + ", duration=" + (currMS - metric.prevLogTime) / 1000 +
+      logger.info(prefixStr + ": total_count=" + metric.value + ", duration=" + (currMS - metric.prevLogTime) / 1000 +
         " secs, count=" + (currStat - metric.prevLogValue) + postFix);
     }
     metric.prevLogValue = currStat;
@@ -105,7 +106,7 @@ public class LogFeederUtil {
       try {
         retValue = Integer.parseInt(strValue);
       } catch (Throwable t) {
-        LOG.error("Error parsing integer value. str=" + strValue + ", " + errMessage);
+        logger.error("Error parsing integer value. str=" + strValue + ", " + errMessage);
       }
     }
     return retValue;
@@ -116,12 +117,12 @@ public class LogFeederUtil {
     private int counter = 0;
   }
 
-  private static Map<String, LogFeederUtil.LogHistory> logHistoryList = new Hashtable<>();
+  private static Map<String, LogHistory> logHistoryList = new Hashtable<>();
 
   public static boolean logErrorMessageByInterval(String key, String message, Throwable e, Logger callerLogger, Level level) {
-    LogFeederUtil.LogHistory log = logHistoryList.get(key);
+    LogHistory log = logHistoryList.get(key);
     if (log == null) {
-      log = new LogFeederUtil.LogHistory();
+      log = new LogHistory();
       logHistoryList.put(key, log);
     }
 
diff --git a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/S3Util.java b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/S3Util.java
index 31a38d0..07b5f4f 100644
--- a/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/S3Util.java
+++ b/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/util/S3Util.java
@@ -19,63 +19,33 @@
 package org.apache.ambari.logfeeder.util;
 
 import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.ByteArrayInputStream;
 import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.zip.GZIPInputStream;
 
+import io.minio.MinioClient;
+import io.minio.errors.InvalidEndpointException;
+import io.minio.errors.InvalidPortException;
 import org.apache.ambari.logfeeder.common.LogFeederConstants;
-import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
 
-import com.amazonaws.AmazonClientException;
-import com.amazonaws.auth.AWSCredentials;
-import com.amazonaws.services.s3.AmazonS3;
-import com.amazonaws.services.s3.AmazonS3Client;
-import com.amazonaws.services.s3.model.GetObjectRequest;
-import com.amazonaws.services.s3.model.ObjectMetadata;
-import com.amazonaws.services.s3.model.PutObjectRequest;
-import com.amazonaws.services.s3.model.S3Object;
-import com.amazonaws.services.s3.transfer.TransferManager;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * Utility to connect to s3
  */
 public class S3Util {
-  private static final Logger LOG = Logger.getLogger(S3Util.class);
+  private static final Logger logger = LogManager.getLogger(S3Util.class);
 
   private S3Util() {
     throw new UnsupportedOperationException();
   }
   
-  public static AmazonS3 getS3Client(String accessKey, String secretKey) {
-    AWSCredentials awsCredentials = AWSUtil.createAWSCredentials(accessKey, secretKey);
-    AmazonS3 s3client;
-    if (awsCredentials != null) {
-      s3client = new AmazonS3Client(awsCredentials);
-    } else {
-      s3client = new AmazonS3Client();
-    }
-    return s3client;
-  }
-
-  public static TransferManager getTransferManager(String accessKey, String secretKey) {
-    AWSCredentials awsCredentials = AWSUtil.createAWSCredentials(accessKey, secretKey);
-    TransferManager transferManager;
-    if (awsCredentials != null) {
-      transferManager = new TransferManager(awsCredentials);
-    } else {
-      transferManager = new TransferManager();
-    }
-    return transferManager;
-  }
-
-  public static void shutdownTransferManager(TransferManager transferManager) {
-    if (transferManager != null) {
-      transferManager.shutdownNow();
-    }
+  public static MinioClient getS3Client(String endpoint, String accessKey, String secretKey) throws InvalidPortException, InvalidEndpointException {
+    return new MinioClient(endpoint, accessKey, secretKey);
   }
 
   public static String getBucketName(String s3Path) {
@@ -92,7 +62,7 @@ public class S3Util {
     StringBuilder s3Key = new StringBuilder();
     if (s3Path != null) {
       String[] s3PathParts = s3Path.replace(LogFeederConstants.S3_PATH_START_WITH, "").split(LogFeederConstants.S3_PATH_SEPARATOR);
-      ArrayList<String> s3PathList = new ArrayList<String>(Arrays.asList(s3PathParts));
+      ArrayList<String> s3PathList = new ArrayList<>(Arrays.asList(s3PathParts));
       s3PathList.remove(0);// remove bucketName
       for (int index = 0; index < s3PathList.size(); index++) {
         if (index > 0) {
@@ -107,49 +77,58 @@ public class S3Util {
   /**
    * Get the buffer reader to read s3 file as a stream
    */
-  public static BufferedReader getReader(String s3Path, String accessKey, String secretKey) throws IOException {
+  public static BufferedReader getReader(String s3Path, String s3Endpoint, String accessKey, String secretKey) throws Exception {
     // TODO error handling
     // Compression support
     // read header and decide the compression(auto detection)
     // For now hard-code GZIP compression
     String s3Bucket = getBucketName(s3Path);
     String s3Key = getS3Key(s3Path);
-    S3Object fileObj = getS3Client(accessKey, secretKey).getObject(new GetObjectRequest(s3Bucket, s3Key));
+    GZIPInputStream objectInputStream = null;
+    InputStreamReader inputStreamReader = null;
+    BufferedReader bufferedReader = null;
     try {
-      GZIPInputStream objectInputStream = new GZIPInputStream(fileObj.getObjectContent());
-      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(objectInputStream));
+      MinioClient s3Client = getS3Client(s3Endpoint, accessKey, secretKey);
+      s3Client.statObject(s3Bucket, s3Key);
+      objectInputStream = new GZIPInputStream(s3Client.getObject(s3Bucket, s3Key));
+      inputStreamReader = new InputStreamReader(objectInputStream);
+      bufferedReader = new BufferedReader(inputStreamReader);
       return bufferedReader;
-    } catch (IOException e) {
-      LOG.error("Error in creating stream reader for s3 file :" + s3Path, e.getCause());
+    } catch (Exception e) {
+      logger.error("Error in creating stream reader for s3 file :" + s3Path, e.getCause());
       throw e;
+    } finally {
+      try {
+        if (inputStreamReader != null) {
+          inputStreamReader.close();
+        }
+        if (bufferedReader != null) {
+          bufferedReader.close();
+        }
+        if (objectInputStream != null) {
+          objectInputStream.close();
+        }
+      } catch (Exception e) {
+        // do nothing
+      }
     }
   }
 
-  public static void writeIntoS3File(String data, String bucketName, String s3Key, String accessKey, String secretKey) {
-    InputStream in = null;
+  public static void writeFileIntoS3File(String filename, String bucketName, String s3Key, String endpoint, String accessKey, String secretKey) {
     try {
-      in = IOUtils.toInputStream(data, "UTF-8");
-    } catch (IOException e) {
-      LOG.error(e);
+      MinioClient s3Client = getS3Client(endpoint, accessKey, secretKey);
+      s3Client.putObject(bucketName, s3Key, filename);
+    } catch (Exception e) {
+      logger.error("Could not write file to s3", e);
     }
-    
-    if (in != null) {
-      TransferManager transferManager = getTransferManager(accessKey, secretKey);
-      try {
-        if (transferManager != null) {
-          transferManager.upload(new PutObjectRequest(bucketName, s3Key, in, new ObjectMetadata())).waitForUploadResult();
-          LOG.debug("Data Uploaded to s3 file :" + s3Key + " in bucket :" + bucketName);
-        }
-      } catch (AmazonClientException | InterruptedException e) {
-        LOG.error(e);
-      } finally {
-        try {
-          shutdownTransferManager(transferManager);
-          in.close();
-        } catch (IOException e) {
-          // ignore
-        }
-      }
+  }
+
+  public static void writeDataIntoS3File(String data, String bucketName, String s3Key, String endpoint, String accessKey, String secretKey) {
+    try (ByteArrayInputStream bai = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8))) {
+      MinioClient s3Client = getS3Client(endpoint, accessKey, secretKey);
+      s3Client.putObject(bucketName, s3Key, bai, bai.available(), "application/octet-stream");
+    } catch (Exception e) {
+      logger.error("Could not write data to s3", e);
     }
   }
 }
diff --git a/ambari-logsearch-logfeeder/src/main/resources/log-samples/logs/service_sample.txt b/ambari-logsearch-logfeeder/src/main/resources/log-samples/logs/service_sample.txt
deleted file mode 100644
index 21048ac..0000000
--- a/ambari-logsearch-logfeeder/src/main/resources/log-samples/logs/service_sample.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-2016-07-13 10:45:49,640 [WARN] Sample log line 1 - warn level
-2016-07-13 10:45:49,640 [ERROR] Sample log line 2 - error level
-2016-07-13 10:45:50,351 [INFO] Sample log line 3 - info level
\ No newline at end of file
diff --git a/ambari-logsearch-logfeeder/src/main/resources/log4j.xml b/ambari-logsearch-logfeeder/src/main/resources/log4j.xml
deleted file mode 100644
index d01160c..0000000
--- a/ambari-logsearch-logfeeder/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,67 +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 "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/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 [%t] %-5p %C{6} (%F:%L) - %m%n" />
-    </layout>
-  </appender>
-
-  <appender name="daily_rolling_file" class="org.apache.log4j.DailyRollingFileAppender"> 
-    <param name="file" value="target/logs/logsearch-logfeeder.log" />
-    <param name="datePattern"  value="'.'yyyy-MM-dd" /> 
-    <param name="append" value="true" /> 
-    <layout class="org.apache.log4j.PatternLayout"> 
-      <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n"/> 
-    </layout> 
-  </appender>
-
-  <appender name="rolling_file_json"
-    class="org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender">
-    <param name="file" value="target/logs/logsearch-logfeeder.json" />
-    <param name="append" value="true" />
-    <param name="maxFileSize" value="10MB" />
-    <param name="maxBackupIndex" value="10" />
-    <layout class="org.apache.ambari.logsearch.appender.LogsearchConversion" />
-  </appender>
-
-  <category name="org.apache.solr.common.cloud.ZkStateReader" additivity="false">
-    <priority value="error" />
-    <appender-ref ref="daily_rolling_file" />
-  </category>
-
-  <category name="apache.solr.client.solrj.impl.CloudSolrClient" additivity="false">
-    <priority value="fatal" />
-    <appender-ref ref="daily_rolling_file" />
-  </category>
-
-  <category name="org.apache.ambari.logfeeder" additivity="false">
-    <priority value="INFO" />
-    <appender-ref ref="console" />
-  </category>
-
-  <root>
-    <priority value="info"/>
-    <appender-ref ref="console"/>
-  </root>
- 
-</log4j:configuration>  
diff --git a/ambari-logsearch-logfeeder/src/main/resources/log4j2.yml b/ambari-logsearch-logfeeder/src/main/resources/log4j2.yml
new file mode 100644
index 0000000..21e3312
--- /dev/null
+++ b/ambari-logsearch-logfeeder/src/main/resources/log4j2.yml
@@ -0,0 +1,74 @@
+# 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.
+Configutation:
+  name: LogFeederConfig
+  packages: org.apache.ambari.logsearch.layout
+
+  Properties:
+    Property:
+      name: log-path
+      value: "target/logs"
+
+  Appenders:
+
+    Console:
+      name: Console_Appender
+      target: SYSTEM_OUT
+      PatternLayout:
+        pattern: "%d [%t] %-5p %C{6} (%F:%L) - %m%n"
+
+    RollingFile:
+    - name: RollingFile_Appender
+      fileName: ${log-path}/logfeeder.log
+      filePattern: "logfeeder.log.%d{yyyy-MM-dd-hh-mm}.gz"
+      PatternLayout:
+        pattern: "%d [%t] %-5p %C{6} (%F:%L) - %m%n"
+      Policies:
+        SizeBasedTriggeringPolicy:
+          size: 10 MB
+      DefaultRollOverStrategy:
+        max: 10
+    - name: RollingFileJson_Appender
+      fileName: ${log-path}/logfeeder.json
+      filePattern: "logfeeder.json.%d{yyyy-MM-dd-hh-mm}.gz"
+      ignoreExceptions: false
+      LogSearchJsonLayout:
+        charset: UTF-8
+      Policies:
+        SizeBasedTriggeringPolicy:
+          size: 10 MB
+      DefaultRollOverStrategy:
+        max: 10
+
+  Loggers:
+
+    Root:
+      level: info
+      AppenderRef:
+      - ref: Console_Appender
+      - ref: RollingFile_Appender
+      - ref: RollingFileJson_Appender
+
+    Logger:
+    - name: org.apache.solr.common.cloud.ZkStateReader
+      additivity: false
+      level: error
+      AppenderRef:
+      - ref: Console_Appender
+    - name: org.apache.solr.client.solrj.impl.CloudSolrClient
+      additivity: false
+      level: info
+      AppenderRef:
+      - ref: Console_Appender
\ No newline at end of file
diff --git a/ambari-logsearch-logfeeder/src/main/scripts/logfeeder.sh b/ambari-logsearch-logfeeder/src/main/scripts/logfeeder.sh
index 7f1d8ec..b9141f0 100755
--- a/ambari-logsearch-logfeeder/src/main/scripts/logfeeder.sh
+++ b/ambari-logsearch-logfeeder/src/main/scripts/logfeeder.sh
@@ -80,7 +80,7 @@ else
   LOGFEEDER_GC_LOGFILE="$LOG_PATH_WITHOUT_SLASH/$LOGFEEDER_GC_LOGFILE"
 fi
 
-LOGFEEDER_GC_OPTS="-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$LOGFEEDER_GC_LOGFILE"
+LOGFEEDER_GC_OPTS="-Xlog:gc*:file=$LOGFEEDER_GC_LOGFILE:time"
 
 function print_usage() {
   cat << EOF
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterGrokTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterGrokTest.java
index 8d3967b..f3d9078 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterGrokTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterGrokTest.java
@@ -26,7 +26,6 @@ import org.apache.ambari.logfeeder.plugin.input.Input;
 import org.apache.ambari.logfeeder.plugin.manager.OutputManager;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterGrokDescriptor;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.FilterGrokDescriptorImpl;
-import org.apache.log4j.Logger;
 import org.easymock.Capture;
 import org.easymock.CaptureType;
 import org.easymock.EasyMock;
@@ -39,7 +38,6 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 public class FilterGrokTest {
-  private static final Logger LOG = Logger.getLogger(FilterGrokTest.class);
 
   private FilterGrok filterGrok;
   private OutputManager mockOutputManager;
@@ -58,8 +56,6 @@ public class FilterGrokTest {
 
   @Test
   public void testFilterGrok_parseMessage() throws Exception {
-    LOG.info("testFilterGrok_parseMessage()");
-
     FilterGrokDescriptorImpl filterGrokDescriptor = new FilterGrokDescriptorImpl();
     filterGrokDescriptor.setMessagePattern("(?m)^%{TIMESTAMP_ISO8601:logtime}%{SPACE}%{LOGLEVEL:level}%{SPACE}%{GREEDYDATA:log_message}");
     filterGrokDescriptor.setMultilinePattern("^(%{TIMESTAMP_ISO8601:logtime})");
@@ -84,8 +80,6 @@ public class FilterGrokTest {
 
   @Test
   public void testFilterGrok_parseMultiLineMessage() throws Exception {
-    LOG.info("testFilterGrok_parseMultiLineMessage()");
-
     FilterGrokDescriptorImpl filterGrokDescriptor = new FilterGrokDescriptorImpl();
     filterGrokDescriptor.setMessagePattern("(?m)^%{TIMESTAMP_ISO8601:logtime}%{SPACE}%{LOGLEVEL:level}%{SPACE}%{GREEDYDATA:log_message}");
     filterGrokDescriptor.setMultilinePattern("^(%{TIMESTAMP_ISO8601:logtime})");
@@ -114,8 +108,6 @@ public class FilterGrokTest {
 
   @Test
   public void testFilterGrok_notMatchingMesagePattern() throws Exception {
-    LOG.info("testFilterGrok_notMatchingMesagePattern()");
-
     FilterGrokDescriptorImpl filterGrokDescriptor = new FilterGrokDescriptorImpl();
     filterGrokDescriptor.setMessagePattern("(?m)^%{TIMESTAMP_ISO8601:logtime}%{SPACE}%{LOGLEVEL:level}%{SPACE}%{GREEDYDATA:log_message}");
     filterGrokDescriptor.setMultilinePattern("^(%{TIMESTAMP_ISO8601:logtime})");
@@ -134,8 +126,6 @@ public class FilterGrokTest {
 
   @Test
   public void testFilterGrok_noMesagePattern() throws Exception {
-    LOG.info("testFilterGrok_noMesagePattern()");
-
     FilterGrokDescriptorImpl filterGrokDescriptor = new FilterGrokDescriptorImpl();
     filterGrokDescriptor.setMultilinePattern("^(%{TIMESTAMP_ISO8601:logtime})");
     init(filterGrokDescriptor);
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterJSONTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterJSONTest.java
index a328eb8..b1b0c55 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterJSONTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterJSONTest.java
@@ -30,7 +30,6 @@ import org.apache.ambari.logfeeder.conf.LogFeederProps;
 import org.apache.ambari.logfeeder.input.InputFileMarker;
 import org.apache.ambari.logfeeder.plugin.manager.OutputManager;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.FilterJsonDescriptorImpl;
-import org.apache.log4j.Logger;
 import org.easymock.Capture;
 import org.easymock.CaptureType;
 import org.easymock.EasyMock;
@@ -42,7 +41,6 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 public class FilterJSONTest {
-  private static final Logger LOG = Logger.getLogger(FilterJSONTest.class);
 
   private FilterJSON filterJson;
   private OutputManager mockOutputManager;
@@ -60,8 +58,6 @@ public class FilterJSONTest {
 
   @Test
   public void testJSONFilterCode_convertFields() throws Exception {
-    LOG.info("testJSONFilterCode_convertFields()");
-
     init(new FilterJsonDescriptorImpl());
 
     mockOutputManager.write(EasyMock.capture(capture), EasyMock.anyObject(InputFileMarker.class));
@@ -85,8 +81,6 @@ public class FilterJSONTest {
 
   @Test
   public void testJSONFilterCode_logTimeOnly() throws Exception {
-    LOG.info("testJSONFilterCode_logTimeOnly()");
-
     init(new FilterJsonDescriptorImpl());
 
     mockOutputManager.write(EasyMock.capture(capture), EasyMock.anyObject(InputFileMarker.class));
@@ -110,8 +104,6 @@ public class FilterJSONTest {
 
   @Test
   public void testJSONFilterCode_lineNumberOnly() throws Exception {
-    LOG.info("testJSONFilterCode_lineNumberOnly()");
-
     init(new FilterJsonDescriptorImpl());
 
     mockOutputManager.write(EasyMock.capture(capture), EasyMock.anyObject(InputFileMarker.class));
@@ -131,8 +123,6 @@ public class FilterJSONTest {
   
   @Test
   public void testJSONFilterCode_invalidJson() throws Exception {
-    LOG.info("testJSONFilterCode_invalidJson()");
-    
     init(new FilterJsonDescriptorImpl());
     
     String inputStr = "invalid json";
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterKeyValueTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterKeyValueTest.java
index efda7e2..bba8d8b 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterKeyValueTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/filter/FilterKeyValueTest.java
@@ -25,7 +25,6 @@ import org.apache.ambari.logfeeder.input.InputFileMarker;
 import org.apache.ambari.logfeeder.plugin.manager.OutputManager;
 import org.apache.ambari.logsearch.config.api.model.inputconfig.FilterKeyValueDescriptor;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.FilterKeyValueDescriptorImpl;
-import org.apache.log4j.Logger;
 import org.easymock.Capture;
 import org.easymock.CaptureType;
 import org.easymock.EasyMock;
@@ -37,7 +36,6 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public class FilterKeyValueTest {
-  private static final Logger LOG = Logger.getLogger(FilterKeyValueTest.class);
 
   private FilterKeyValue filterKeyValue;
   private OutputManager mockOutputManager;
@@ -55,8 +53,6 @@ public class FilterKeyValueTest {
 
   @Test
   public void testFilterKeyValue_extraction() throws Exception {
-    LOG.info("testFilterKeyValue_extraction()");
-
     FilterKeyValueDescriptorImpl filterKeyValueDescriptor = new FilterKeyValueDescriptorImpl();
     filterKeyValueDescriptor.setSourceField("keyValueField");
     filterKeyValueDescriptor.setFieldSplit("&");
@@ -79,8 +75,6 @@ public class FilterKeyValueTest {
 
   @Test
   public void testFilterKeyValue_extractionWithBorders() throws Exception {
-    LOG.info("testFilterKeyValue_extractionWithBorders()");
-
     FilterKeyValueDescriptorImpl filterKeyValueDescriptor = new FilterKeyValueDescriptorImpl();
     filterKeyValueDescriptor.setSourceField("keyValueField");
     filterKeyValueDescriptor.setFieldSplit("&");
@@ -104,8 +98,6 @@ public class FilterKeyValueTest {
 
   @Test
   public void testFilterKeyValue_missingSourceField() throws Exception {
-    LOG.info("testFilterKeyValue_missingSourceField()");
-
     FilterKeyValueDescriptorImpl filterKeyValueDescriptor = new FilterKeyValueDescriptorImpl();
     filterKeyValueDescriptor.setFieldSplit("&");
     init(filterKeyValueDescriptor);
@@ -122,7 +114,6 @@ public class FilterKeyValueTest {
 
   @Test
   public void testFilterKeyValue_noSourceFieldPresent() throws Exception {
-    LOG.info("testFilterKeyValue_noSourceFieldPresent()");
 
     FilterKeyValueDescriptorImpl filterKeyValueDescriptor = new FilterKeyValueDescriptorImpl();
     filterKeyValueDescriptor.setSourceField("keyValueField");
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/input/InputFileTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/input/InputFileTest.java
index 0a95342..02d141f 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/input/InputFileTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/input/InputFileTest.java
@@ -33,7 +33,6 @@ import org.apache.ambari.logfeeder.plugin.manager.CheckpointManager;
 import org.apache.ambari.logfeeder.plugin.manager.InputManager;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.InputFileDescriptorImpl;
 import org.apache.commons.io.FileUtils;
-import org.apache.log4j.Logger;
 import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -46,7 +45,6 @@ import org.junit.rules.ExpectedException;
 import static org.junit.Assert.assertEquals;
 
 public class InputFileTest {
-  private static final Logger LOG = Logger.getLogger(InputFileTest.class);
 
   private static final String TEST_DIR_NAME = "/logfeeder_test_dir/";
   private static final File TEST_DIR = new File(FileUtils.getTempDirectoryPath() + TEST_DIR_NAME);
@@ -133,8 +131,6 @@ public class InputFileTest {
 
   @Test
   public void testInputFile_process3Rows() throws Exception {
-    LOG.info("testInputFile_process3Rows()");
-
     File testFile = createFile("process3.log");
 
     init(testFile.getAbsolutePath());
@@ -157,8 +153,6 @@ public class InputFileTest {
 
   @Test
   public void testInputFile_noLogPath() throws Exception {
-    LOG.info("testInputFile_noLogPath()");
-
     expectedException.expect(NullPointerException.class);
 
     init(null);
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperAnonymizeTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperAnonymizeTest.java
index c22f312..7953615 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperAnonymizeTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperAnonymizeTest.java
@@ -22,7 +22,6 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.MapAnonymizeDescriptorImpl;
-import org.apache.log4j.Logger;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -30,11 +29,9 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public class MapperAnonymizeTest {
-  private static final Logger LOG = Logger.getLogger(MapperAnonymizeTest.class);
 
   @Test
   public void testMapperAnonymize_anonymize() {
-    LOG.info("testMapperAnonymize_anonymize()");
 
     MapAnonymizeDescriptorImpl mapAnonymizeDescriptorImpl = new MapAnonymizeDescriptorImpl();
     mapAnonymizeDescriptorImpl.setPattern("secret <hide> / <hide> is here");
@@ -51,7 +48,6 @@ public class MapperAnonymizeTest {
 
   @Test
   public void testMapperAnonymize_anonymize2() {
-    LOG.info("testMapperAnonymize_anonymize2()");
 
     MapAnonymizeDescriptorImpl mapAnonymizeDescriptorImpl = new MapAnonymizeDescriptorImpl();
     mapAnonymizeDescriptorImpl.setPattern("<hide> / <hide> is the secret");
@@ -69,7 +65,6 @@ public class MapperAnonymizeTest {
 
   @Test
   public void testMapperAnonymize_noPattern() {
-    LOG.info("testMapperAnonymize_noPattern()");
 
     MapAnonymizeDescriptorImpl mapAnonymizeDescriptorImpl = new MapAnonymizeDescriptorImpl();
 
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperDateTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperDateTest.java
index 5e94996..d0643ea 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperDateTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperDateTest.java
@@ -27,7 +27,6 @@ import java.util.Map;
 import org.apache.ambari.logfeeder.common.LogFeederConstants;
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.MapDateDescriptorImpl;
 import org.apache.commons.lang3.time.DateUtils;
-import org.apache.log4j.Logger;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -35,11 +34,9 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public class MapperDateTest {
-  private static final Logger LOG = Logger.getLogger(MapperDateTest.class);
 
   @Test
   public void testMapperDate_epoch() {
-    LOG.info("testMapperDate_epoch()");
 
     MapDateDescriptorImpl mapDateDescriptor = new MapDateDescriptorImpl();
     mapDateDescriptor.setTargetDatePattern("epoch");
@@ -60,7 +57,6 @@ public class MapperDateTest {
 
   @Test
   public void testMapperDate_pattern() throws Exception {
-    LOG.info("testMapperDate_pattern()");
 
     MapDateDescriptorImpl mapDateDescriptor = new MapDateDescriptorImpl();
     mapDateDescriptor.setTargetDatePattern("yyyy-MM-dd HH:mm:ss.SSS");
@@ -82,7 +78,6 @@ public class MapperDateTest {
 
   @Test
   public void testMapperDate_noDatePattern() {
-    LOG.info("testMapperDate_noDatePattern()");
 
     MapDateDescriptorImpl mapDateDescriptor = new MapDateDescriptorImpl();
 
@@ -92,7 +87,6 @@ public class MapperDateTest {
 
   @Test
   public void testMapperDate_notParsableDatePattern() {
-    LOG.info("testMapperDate_notParsableDatePattern()");
 
     MapDateDescriptorImpl mapDateDescriptor = new MapDateDescriptorImpl();
     mapDateDescriptor.setTargetDatePattern("not_parsable_content");
@@ -103,7 +97,6 @@ public class MapperDateTest {
 
   @Test
   public void testMapperDate_invalidEpochValue() {
-    LOG.info("testMapperDate_invalidEpochValue()");
 
     MapDateDescriptorImpl mapDateDescriptor = new MapDateDescriptorImpl();
     mapDateDescriptor.setTargetDatePattern("epoch");
@@ -121,7 +114,6 @@ public class MapperDateTest {
 
   @Test
   public void testMapperDate_invalidDateStringValue() {
-    LOG.info("testMapperDate_invalidDateStringValue()");
 
     MapDateDescriptorImpl mapDateDescriptor = new MapDateDescriptorImpl();
     mapDateDescriptor.setTargetDatePattern("yyyy-MM-dd HH:mm:ss.SSS");
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldCopyTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldCopyTest.java
index 5c6cc93..32c8b99 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldCopyTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldCopyTest.java
@@ -22,7 +22,6 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.MapFieldCopyDescriptorImpl;
-import org.apache.log4j.Logger;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -30,11 +29,9 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public class MapperFieldCopyTest {
-  private static final Logger LOG = Logger.getLogger(MapperFieldCopyTest.class);
 
   @Test
   public void testMapperFieldCopy_copyField() {
-    LOG.info("testMapperFieldCopy_copyField()");
 
     MapFieldCopyDescriptorImpl mapFieldCopyDescriptor = new MapFieldCopyDescriptorImpl();
     mapFieldCopyDescriptor.setCopyName("someOtherField");
@@ -54,7 +51,6 @@ public class MapperFieldCopyTest {
 
   @Test
   public void testMapperFieldCopy_noNewFieldName() {
-    LOG.info("testMapperFieldCopy_noNewFieldName()");
 
     MapFieldCopyDescriptorImpl mapFieldCopyDescriptor = new MapFieldCopyDescriptorImpl();
 
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldNameTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldNameTest.java
index f74c9f8..b1dbd4d 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldNameTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldNameTest.java
@@ -22,7 +22,6 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.MapFieldNameDescriptorImpl;
-import org.apache.log4j.Logger;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -30,11 +29,9 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public class MapperFieldNameTest {
-  private static final Logger LOG = Logger.getLogger(MapperFieldNameTest.class);
 
   @Test
   public void testMapperFieldName_replaceField() {
-    LOG.info("testMapperFieldName_replaceField()");
 
     MapFieldNameDescriptorImpl mapFieldNameDescriptor = new MapFieldNameDescriptorImpl();
     mapFieldNameDescriptor.setNewFieldName("someOtherField");
@@ -54,7 +51,6 @@ public class MapperFieldNameTest {
 
   @Test
   public void testMapperFieldName_noNewFieldName() {
-    LOG.info("testMapperFieldName_noNewFieldName()");
 
     MapFieldNameDescriptorImpl mapFieldNameDescriptor = new MapFieldNameDescriptorImpl();
 
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldValueTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldValueTest.java
index 92befa9..1c82a1e 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldValueTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/mapper/MapperFieldValueTest.java
@@ -22,7 +22,6 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.ambari.logsearch.config.json.model.inputconfig.impl.MapFieldValueDescriptorImpl;
-import org.apache.log4j.Logger;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -30,11 +29,9 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public class MapperFieldValueTest {
-  private static final Logger LOG = Logger.getLogger(MapperFieldValueTest.class);
 
   @Test
   public void testMapperFieldValue_replaceValue() {
-    LOG.info("testMapperFieldValue_replaceValue()");
 
     MapFieldValueDescriptorImpl mapFieldValueDescriptor = new MapFieldValueDescriptorImpl();
     mapFieldValueDescriptor.setPreValue("someValue");
@@ -54,7 +51,6 @@ public class MapperFieldValueTest {
 
   @Test
   public void testMapperFieldValue_noPostValue() {
-    LOG.info("testMapperFieldValue_noPostValue()");
 
     MapFieldValueDescriptorImpl mapFieldValueDescriptor = new MapFieldValueDescriptorImpl();
 
@@ -64,7 +60,6 @@ public class MapperFieldValueTest {
 
   @Test
   public void testMapperFieldValue_noPreValueFound() {
-    LOG.info("testMapperFieldValue_noPreValueFound()");
 
     MapFieldValueDescriptorImpl mapFieldValueDescriptor = new MapFieldValueDescriptorImpl();
     mapFieldValueDescriptor.setPreValue("someValue");
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputKafkaTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputKafkaTest.java
index 1623738..ad8c225 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputKafkaTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputKafkaTest.java
@@ -39,7 +39,6 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
 public class OutputKafkaTest {
-  private static final Logger LOG = Logger.getLogger(OutputKafkaTest.class);
 
   private static final String TEST_TOPIC = "test topic";
 
@@ -63,7 +62,6 @@ public class OutputKafkaTest {
 
   @Test
   public void testOutputKafka_uploadData() throws Exception {
-    LOG.info("testOutputKafka_uploadData()");
 
     Map<String, Object> config = new HashMap<String, Object>();
     config.put("broker_list", "some broker list");
@@ -95,7 +93,6 @@ public class OutputKafkaTest {
 
   @Test
   public void testOutputKafka_noBrokerList() throws Exception {
-    LOG.info("testOutputKafka_noBrokerList()");
 
     expectedException.expect(Exception.class);
     expectedException.expectMessage("For kafka output, bootstrap broker_list is needed");
@@ -109,7 +106,6 @@ public class OutputKafkaTest {
 
   @Test
   public void testOutputKafka_noTopic() throws Exception {
-    LOG.info("testOutputKafka_noBrokerList()");
 
     expectedException.expect(Exception.class);
     expectedException.expectMessage("For kafka output, topic is needed");
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputS3FileTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputS3FileTest.java
index 6674be1..63799e3 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputS3FileTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/OutputS3FileTest.java
@@ -21,6 +21,7 @@ package org.apache.ambari.logfeeder.output;
 import org.apache.ambari.logfeeder.conf.LogFeederProps;
 import org.apache.ambari.logfeeder.output.spool.LogSpoolerContext;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.File;
@@ -63,6 +64,7 @@ public class OutputS3FileTest {
     }
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldRolloverWhenSufficientSizeIsReached() throws Exception {
 
@@ -81,6 +83,7 @@ public class OutputS3FileTest {
     assertTrue(outputS3File.shouldRollover(logSpoolerContext));
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldNotRolloverBeforeSufficientSizeIsReached() throws Exception {
     String thresholdSize = Long.toString(15 * 1024 * 1024L);
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/S3UploaderTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/S3UploaderTest.java
index 5477f5c..facc77f 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/S3UploaderTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/S3UploaderTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.logfeeder.output;
 
+import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.File;
@@ -36,6 +37,7 @@ public class S3UploaderTest {
   public static final String ACCESS_KEY_VALUE = "accessKeyValue";
   public static final String SECRET_KEY_VALUE = "secretKeyValue";
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldUploadToS3ToRightBucket() {
     File fileToUpload = mock(File.class);
@@ -45,6 +47,7 @@ public class S3UploaderTest {
     Map<String, Object> configs = setupS3Configs();
 
     S3OutputConfiguration s3OutputConfiguration = new S3OutputConfiguration(configs);
+    expect(compressedFile.getAbsolutePath()).andReturn(TEST_BUCKET + "/" + LOG_TYPE + "/" +fileName);
     expect(compressedFile.delete()).andReturn(true);
     expect(fileToUpload.delete()).andReturn(true);
     replay(fileToUpload, compressedFile);
@@ -54,7 +57,8 @@ public class S3UploaderTest {
       protected File createCompressedFileForUpload(File fileToUpload, String compressionAlgo) {
         return compressedFile;
       }
-      protected void uploadFileToS3(String bucketName, String s3Key, File localFile, String accessKey, String secretKey) {
+      @Override
+      protected void writeFileIntoS3File(File sourceFile, String bucketName, String s3Path, String s3Endpoint, String s3AccessKey, String s3SecretKey) {
       }
     };
     String resolvedPath = s3Uploader.uploadFile(fileToUpload, LOG_TYPE);
@@ -62,6 +66,7 @@ public class S3UploaderTest {
     assertEquals("test_path/hdfs_namenode/hdfs_namenode.log.123343493473948.gz", resolvedPath);
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldCleanupLocalFilesOnSuccessfulUpload() {
     File fileToUpload = mock(File.class);
@@ -80,7 +85,9 @@ public class S3UploaderTest {
       protected File createCompressedFileForUpload(File fileToUpload, String compressionAlgo) {
         return compressedFile;
       }
-      protected void uploadFileToS3(String bucketName, String s3Key, File localFile, String accessKey, String secretKey) {
+
+      @Override
+      protected void writeFileIntoS3File(File sourceFile, String bucketName, String s3Path, String s3Endpoint, String s3AccessKey, String s3SecretKey) {
       }
     };
     s3Uploader.uploadFile(fileToUpload, LOG_TYPE);
@@ -89,6 +96,7 @@ public class S3UploaderTest {
     verify(compressedFile);
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldNotCleanupUncompressedFileIfNotRequired() {
     File fileToUpload = mock(File.class);
@@ -106,7 +114,8 @@ public class S3UploaderTest {
       protected File createCompressedFileForUpload(File fileToUpload, String compressionAlgo) {
         return compressedFile;
       }
-      protected void uploadFileToS3(String bucketName, String s3Key, File localFile, String accessKey, String secretKey) {
+      @Override
+      protected void writeFileIntoS3File(File sourceFile, String bucketName, String s3Path, String s3Endpoint, String s3AccessKey, String s3SecretKey) {
       }
     };
     s3Uploader.uploadFile(fileToUpload, LOG_TYPE);
@@ -115,6 +124,7 @@ public class S3UploaderTest {
     verify(compressedFile);
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldExpandVariablesInPath() {
     File fileToUpload = mock(File.class);
@@ -128,6 +138,7 @@ public class S3UploaderTest {
     S3OutputConfiguration s3OutputConfiguration = new S3OutputConfiguration(configs);
     expect(compressedFile.delete()).andReturn(true);
     expect(fileToUpload.delete()).andReturn(true);
+    expect(compressedFile.getAbsolutePath()).andReturn(TEST_BUCKET + "/" + LOG_TYPE + "/" +fileName);
     replay(fileToUpload, compressedFile);
 
     S3Uploader s3Uploader = new S3Uploader(s3OutputConfiguration, true, LOG_TYPE) {
@@ -135,7 +146,8 @@ public class S3UploaderTest {
       protected File createCompressedFileForUpload(File fileToUpload, String compressionAlgo) {
         return compressedFile;
       }
-      protected void uploadFileToS3(String bucketName, String s3Key, File localFile, String accessKey, String secretKey) {
+      @Override
+      protected void writeFileIntoS3File(File sourceFile, String bucketName, String s3Path, String s3Endpoint, String s3AccessKey, String s3SecretKey) {
       }
     };
     s3Uploader.uploadFile(fileToUpload, LOG_TYPE);
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/spool/LogSpoolerTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/spool/LogSpoolerTest.java
index 2cfe9ff..4a7b9b0 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/spool/LogSpoolerTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/output/spool/LogSpoolerTest.java
@@ -22,6 +22,7 @@ import org.easymock.EasyMockRule;
 import org.easymock.LogicalOperator;
 import org.easymock.Mock;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -55,6 +56,7 @@ public class LogSpoolerTest {
     spoolDirectory = testFolder.getRoot().getAbsolutePath();
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldSpoolEventToFile() {
     final PrintWriter spoolWriter = mock(PrintWriter.class);
@@ -91,6 +93,7 @@ public class LogSpoolerTest {
     return mockFile;
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldIncrementSpooledEventsCount() {
 
@@ -123,6 +126,7 @@ public class LogSpoolerTest {
     verify(rolloverCondition);
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldCloseCurrentSpoolFileOnRollOver() {
     final PrintWriter spoolWriter = mock(PrintWriter.class);
@@ -157,6 +161,7 @@ public class LogSpoolerTest {
     verify(spoolWriter);
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldReinitializeFileOnRollover() {
     final PrintWriter spoolWriter1 = mock(PrintWriter.class);
@@ -212,6 +217,7 @@ public class LogSpoolerTest {
     verify(spoolWriter1, spoolWriter2, rolloverCondition);
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldCallRolloverHandlerOnRollover() {
     final PrintWriter spoolWriter = mock(PrintWriter.class);
@@ -249,6 +255,7 @@ public class LogSpoolerTest {
   // Rollover twice - the second rollover should work if the "rolloverInProgress"
   // flag is being reset correctly. Third file expectations being setup due
   // to auto-initialization.
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldResetRolloverInProgressFlag() {
     final PrintWriter spoolWriter1 = mock(PrintWriter.class);
@@ -322,6 +329,7 @@ public class LogSpoolerTest {
     verify(spoolWriter1, spoolWriter2, rolloverCondition);
   }
 
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void shouldNotRolloverZeroLengthFiles() {
     final PrintWriter spoolWriter = mock(PrintWriter.class);
diff --git a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/util/S3UtilTest.java b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/util/S3UtilTest.java
index 02918be..51c34a2 100644
--- a/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/util/S3UtilTest.java
+++ b/ambari-logsearch-logfeeder/src/test/java/org/apache/ambari/logfeeder/util/S3UtilTest.java
@@ -21,8 +21,11 @@ package org.apache.ambari.logfeeder.util;
 import static org.junit.Assert.assertEquals;
 
 import org.apache.ambari.logfeeder.util.S3Util;
+import org.junit.Test;
 
 public class S3UtilTest {
+
+  @Test
   public void testS3Util_pathToBucketName() throws Exception {
     String s3Path = "s3://bucket_name/path/file.txt";
     String expectedBucketName = "bucket_name";
@@ -30,6 +33,7 @@ public class S3UtilTest {
     assertEquals(expectedBucketName, actualBucketName);
   }
 
+  @Test
   public void testS3Util_pathToS3Key() throws Exception {
     String s3Path = "s3://bucket_name/path/file.txt";
     String expectedS3key = "path/file.txt";
diff --git a/ambari-logsearch-logfeeder/src/test/resources/log4j.xml b/ambari-logsearch-logfeeder/src/test/resources/log4j.xml
deleted file mode 100644
index 1d28fcc..0000000
--- a/ambari-logsearch-logfeeder/src/test/resources/log4j.xml
+++ /dev/null
@@ -1,53 +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 "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/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 [%t] %-5p %C{6} (%F:%L) - %m%n" />
-      <!-- <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/> -->
-    </layout>
-  </appender>
-
-  <!-- Logs to suppress BEGIN -->
-  <category name="org.apache.solr.common.cloud.ZkStateReader" additivity="false">
-    <priority value="error" />
-    <appender-ref ref="console" />
-  </category>
-
-  <category name="apache.solr.client.solrj.impl.CloudSolrClient" additivity="false">
-    <priority value="fatal" />
-    <appender-ref ref="console" />
-  </category>
-  <!-- Logs to suppress END -->
-
-  <category name="org.apache.ambari.logfeeder" additivity="false">
-    <priority value="info" />
-    <appender-ref ref="console" /> 
-    <!-- <appender-ref ref="daily_rolling_file" /> -->
-  </category>
-
-  <root>
-    <priority value="warn" />
-    <!-- <appender-ref ref="console" /> -->
-    <!-- <appender-ref ref="daily_rolling_file" /> -->
-  </root>
- 
-</log4j:configuration>  
diff --git a/ambari-logsearch-logfeeder/src/test/resources/log4j2-test.xml b/ambari-logsearch-logfeeder/src/test/resources/log4j2-test.xml
new file mode 100644
index 0000000..a8694ce
--- /dev/null
+++ b/ambari-logsearch-logfeeder/src/test/resources/log4j2-test.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<Configuration>
+  <Loggers>
+    <Root level="fatal">
+    </Root>
+  </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/ambari-logsearch-server/build.xml b/ambari-logsearch-server/build.xml
index 15ceedc..b509a15 100644
--- a/ambari-logsearch-server/build.xml
+++ b/ambari-logsearch-server/build.xml
@@ -43,7 +43,7 @@
     </copy>
     <copy todir="target/package/conf" includeEmptyDirs="no">
       <fileset file="src/main/scripts/logsearch-env.sh"/>
-      <fileset file="target/classes/log4j.xml"/>
+      <fileset file="target/classes/log4j2.yml"/>
       <fileset file="target/classes/default.properties"/>
       <fileset file="target/classes/logsearch.properties"/>
       <fileset file="target/classes/info.properties"/>
diff --git a/ambari-logsearch-server/pom.xml b/ambari-logsearch-server/pom.xml
index 783fba3..39a174e 100755
--- a/ambari-logsearch-server/pom.xml
+++ b/ambari-logsearch-server/pom.xml
@@ -27,15 +27,19 @@
   <url>http://maven.apache.org</url>
   <name>Ambari Logsearch Server</name>
   <properties>
-    <spring.version>4.3.17.RELEASE</spring.version>
-    <spring.security.version>4.2.4.RELEASE</spring.security.version>
-    <spring.ldap.version>2.3.2.RELEASE</spring.ldap.version>
-    <jersey.version>2.25.1</jersey.version>
-    <jetty.version>9.4.11.v20180605</jetty.version>
+    <spring-boot.version>2.0.5.RELEASE</spring-boot.version>
+    <!-- <spring-boot.version>2.1.0.M2</spring-boot.version> -->
+    <spring.version>5.1.0.RELEASE</spring.version>
+    <spring-session.version>1.3.3.RELEASE</spring-session.version>
+    <spring.security.version>5.1.0.RELEASE</spring.security.version>
+    <jersey.version>2.27</jersey.version>
+    <jetty.version>9.4.12.v20180830</jetty.version>
     <swagger.version>1.5.16</swagger.version>
-    <spring-data-solr.version>2.0.2.RELEASE</spring-data-solr.version>
+    <spring.ldap.version>2.3.2.RELEASE</spring.ldap.version>
+    <spring-data-solr.version>3.0.10.RELEASE</spring-data-solr.version>
+    <spring-data.version>2.0.10.RELEASE</spring-data.version>
     <jjwt.version>0.6.0</jjwt.version>
-    <spring-boot.version>1.5.13.RELEASE</spring-boot.version>
+    <javax-servlet.version>4.0.1</javax-servlet.version>
   </properties>
   <profiles>
     <profile>
@@ -53,10 +57,6 @@
         <pluginManagement>
           <plugins>
             <plugin>
-              <artifactId>maven-compiler-plugin</artifactId>
-              <version>3.0</version>
-            </plugin>
-            <plugin>
               <artifactId>maven-dependency-plugin</artifactId>
               <version>2.8</version>
             </plugin>
@@ -66,7 +66,6 @@
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-compiler-plugin</artifactId>
-            <version>3.0</version>
             <configuration>
               <source>${jdk.version}</source>
               <target>${jdk.version}</target>
@@ -107,7 +106,9 @@
                   <goal>copy-dependencies</goal>
                 </goals>
                 <configuration>
-                  <excludeArtifactIds>ambari-logsearch-web</excludeArtifactIds>
+                  <excludeArtifactIds>ambari-logsearch-web,spring-boot-starter,spring-boot-starter-actuator,
+                    spring-boot-starter-freemarker,spring-boot-starter-jersey,spring-boot-starter-jetty,spring-boot-starter-json,
+                    spring-boot-starter-log4j2,spring-boot-starter-security,spring-boot-starter-validation,spring-boot-starter-web</excludeArtifactIds>
                   <outputAbsoluteArtifactFilename>true</outputAbsoluteArtifactFilename>
                   <outputDirectory>${basedir}/target/libs</outputDirectory>
                   <overWriteReleases>false</overWriteReleases>
@@ -170,9 +171,14 @@
     <dependency>
       <groupId>org.easymock</groupId>
       <artifactId>easymock</artifactId>
-      <version>3.4</version>
+      <version>3.6</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>javax.validation</groupId>
+      <artifactId>validation-api</artifactId>
+      <version>2.0.1.Final</version>
+    </dependency>
     <!-- Spring dependencies -->
     <dependency>
       <groupId>org.springframework</groupId>
@@ -210,6 +216,11 @@
       <artifactId>spring-security-ldap</artifactId>
       <version>${spring.security.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.springframework.session</groupId>
+      <artifactId>spring-session</artifactId>
+      <version>${spring-session.version}</version>
+    </dependency>
 
     <dependency>
       <groupId>org.springframework.security.kerberos</groupId>
@@ -245,13 +256,19 @@
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
-      <artifactId>spring-boot-starter-log4j</artifactId>
-      <version>1.3.8.RELEASE</version>
+      <artifactId>spring-boot-starter-log4j2</artifactId>
+      <version>${spring-boot.version}</version>
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
       <version>${spring-boot.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.springframework.boot</groupId>
+          <artifactId>spring-boot-starter-tomcat</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
@@ -271,7 +288,13 @@
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-jersey</artifactId>
-      <version>${spring-boot.version}</version>
+      <version>2.1.0.M2</version>
+      <exclusions>
+        <exclusion>
+          <artifactId>tomcat-embed-el</artifactId>
+          <groupId>org.apache.tomcat.embed</groupId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
@@ -294,6 +317,11 @@
       <version>${jersey.version}</version>
     </dependency>
     <dependency>
+      <groupId>org.glassfish.jaxb</groupId>
+      <artifactId>jaxb-runtime</artifactId>
+      <version>2.3.0.1</version>
+    </dependency>
+    <dependency>
         <artifactId>guava</artifactId>
         <groupId>com.google.guava</groupId>
         <version>25.0-jre</version>
@@ -312,7 +340,24 @@
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>javax.servlet-api</artifactId>
-      <version>3.1.0</version>
+      <version>${javax-servlet.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.xml.bind</groupId>
+      <artifactId>jaxb-api</artifactId>
+      <version>2.3.0</version>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.annotation</groupId>
+      <artifactId>javax.annotation-api</artifactId>
+      <version>1.3.2</version>
+    </dependency>
+    <dependency>
+      <groupId>javax.activation</groupId>
+      <artifactId>activation</artifactId>
+      <version>1.1.1</version>
     </dependency>
     <dependency>
       <groupId>org.apache.solr</groupId>
@@ -353,7 +398,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.ambari</groupId>
-      <artifactId>ambari-logsearch-appender</artifactId>
+      <artifactId>ambari-logsearch-log4j2-appender</artifactId>
       <version>${project.version}</version>
     </dependency>
     <dependency>
@@ -484,7 +529,7 @@
     <dependency>
       <groupId>org.springframework.data</groupId>
       <artifactId>spring-data-commons</artifactId>
-      <version>1.13.11.RELEASE</version>
+      <version>${spring-data.version}</version>
     </dependency>
     <dependency>
       <groupId>org.springframework</groupId>
@@ -524,18 +569,35 @@
       <groupId>com.fasterxml.jackson.dataformat</groupId>
       <artifactId>jackson-dataformat-xml</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-jcl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.17</version>
+    </dependency>
     <!-- Exclude jars globally-->
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-tomcat</artifactId>
       <version>${spring-boot.version}</version>
       <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.tomcat.embed</groupId>
-      <artifactId>tomcat-embed-el</artifactId>
-      <version>8.5.16</version>
-      <scope>provided</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.tomcat.embed</groupId>
+          <artifactId>tomcat-embed-el</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.tomcat.embed</groupId>
+          <artifactId>tomcat-embed-core</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.tomcat.embed</groupId>
+          <artifactId>tomcat-embed-websocket</artifactId>
+        </exclusion>
+      </exclusions>
     </dependency>
     <dependency>
       <groupId>commons-beanutils</groupId>
@@ -546,7 +608,25 @@
     <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
-      <version>1.1.1</version>
+      <version>1.2</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <version>1.7.25</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jcl-over-slf4j</artifactId>
+      <version>1.7.25</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jul-to-slf4j</artifactId>
+      <version>1.7.25</version>
       <scope>provided</scope>
     </dependency>
   </dependencies>
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/LogSearch.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/LogSearch.java
index 7d42a92..92c2b32 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/LogSearch.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/LogSearch.java
@@ -21,17 +21,22 @@ package org.apache.ambari.logsearch;
 import org.springframework.boot.Banner;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration;
+import org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration;
 import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration;
-import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
+import org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration;
+import org.springframework.boot.autoconfigure.web.servlet.TomcatServletWebServerFactoryCustomizer;
+import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
+import org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration;
 import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.system.ApplicationPidFileWriter;
+import org.springframework.boot.context.ApplicationPidFileWriter;
 
 @SpringBootApplication(
   scanBasePackages = {"org.apache.ambari.logsearch"},
   exclude = {
     RepositoryRestMvcAutoConfiguration.class,
     WebMvcAutoConfiguration.class,
-    SolrAutoConfiguration.class
+    SolrAutoConfiguration.class,
+    SolrRepositoriesAutoConfiguration.class
   }
 )
 public class LogSearch {
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/filter/AbstractJWTFilter.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/filter/AbstractJWTFilter.java
index 9b02e2e..3aba589 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/filter/AbstractJWTFilter.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/auth/filter/AbstractJWTFilter.java
@@ -27,8 +27,8 @@ import io.jsonwebtoken.SignatureException;
 import org.apache.ambari.logsearch.auth.model.JWTAuthenticationToken;
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.client.utils.URIBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.authentication.AnonymousAuthenticationToken;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.core.Authentication;
@@ -61,7 +61,7 @@ import java.util.Map;
 
 public abstract class AbstractJWTFilter extends AbstractAuthenticationProcessingFilter {
 
-  private static final Logger LOG = LoggerFactory.getLogger(AbstractJWTFilter.class);
+  private static final Logger logger = LogManager.getLogger(AbstractJWTFilter.class);
 
   private static final String PEM_HEADER = "-----BEGIN CERTIFICATE-----\n";
   private static final String PEM_FOOTER = "\n-----END CERTIFICATE-----";
@@ -87,8 +87,8 @@ public abstract class AbstractJWTFilter extends AbstractAuthenticationProcessing
         .parseClaimsJws(getJWTFromCookie(request))
         .getBody();
       String userName  = claims.getSubject();
-      LOG.info("USERNAME: " + userName);
-      LOG.info("URL = " + request.getRequestURL());
+      logger.info("USERNAME: " + userName);
+      logger.info("URL = " + request.getRequestURL());
       if (StringUtils.isNotEmpty(claims.getAudience()) && !getAudiences().contains(claims.getAudience())) {
         throw new IllegalArgumentException(String.format("Audience validation failed. (Not found: %s)", claims.getAudience()));
       }
@@ -97,8 +97,8 @@ public abstract class AbstractJWTFilter extends AbstractAuthenticationProcessing
       SecurityContextHolder.getContext().setAuthentication(authentication);
       return authentication;
     } catch (ExpiredJwtException | MalformedJwtException | SignatureException | IllegalArgumentException e) {
-      LOG.info("URL = " + request.getRequestURL());
-      LOG.warn("Error during JWT authentication: {}", e.getMessage());
+      logger.info("URL = " + request.getRequestURL());
+      logger.warn("Error during JWT authentication: {}", e.getMessage());
       throw new BadCredentialsException(e.getMessage(), e);
     }
   }
@@ -148,7 +148,7 @@ public abstract class AbstractJWTFilter extends AbstractAuthenticationProcessing
     if (cookies != null) {
       for (Cookie cookie : cookies) {
         if (getCookieName().equals(cookie.getName())) {
-          LOG.info(getCookieName() + " cookie has been found and is being processed");
+          logger.info(getCookieName() + " cookie has been found and is being processed");
           serializedJWT = cookie.getValue();
           break;
         }
@@ -218,7 +218,7 @@ public abstract class AbstractJWTFilter extends AbstractAuthenticationProcessing
 
         return builder.build().toString();
       } catch (URISyntaxException ue) {
-        LOG.error("URISyntaxException while build xforward url ", ue);
+        logger.error("URISyntaxException while build xforward url ", ue);
         return request.getRequestURL().toString();
       }
     } else {
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ApiDocStorage.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ApiDocStorage.java
index d7b8666..e31a3b4 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ApiDocStorage.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ApiDocStorage.java
@@ -21,8 +21,8 @@ package org.apache.ambari.logsearch.common;
 import io.swagger.jaxrs.config.BeanConfig;
 import io.swagger.models.Swagger;
 import io.swagger.util.Yaml;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
@@ -33,7 +33,7 @@ import java.util.concurrent.ConcurrentHashMap;
 @Named
 public class ApiDocStorage {
 
-  private static final Logger LOG = LoggerFactory.getLogger(ApiDocStorage.class);
+  private static final Logger logger = LogManager.getLogger(ApiDocStorage.class);
 
   private final Map<String, Object> swaggerMap = new ConcurrentHashMap<>();
 
@@ -45,7 +45,7 @@ public class ApiDocStorage {
     Thread loadApiDocThread = new Thread("load_swagger_api_doc") {
       @Override
       public void run() {
-        LOG.info("Start thread to scan REST API doc from endpoints.");
+        logger.info("Start thread to scan REST API doc from endpoints.");
         Swagger swagger = beanConfig.getSwagger();
         beanConfig.configure(swagger);
         beanConfig.scanAndRead();
@@ -64,7 +64,7 @@ public class ApiDocStorage {
         } catch (Exception e) {
           e.printStackTrace();
         }
-        LOG.info("Scanning REST API endpoints and generating docs has been successful.");
+        logger.info("Scanning REST API endpoints and generating docs has been successful.");
       }
     };
     loadApiDocThread.setDaemon(true);
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ExternalServerClient.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ExternalServerClient.java
index 76d43e5..4247bc0 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ExternalServerClient.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/common/ExternalServerClient.java
@@ -27,7 +27,8 @@ import javax.ws.rs.core.Response;
 import org.apache.ambari.logsearch.conf.AuthPropsConfig;
 import org.apache.ambari.logsearch.configurer.SslConfigurer;
 import org.apache.http.auth.InvalidCredentialsException;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.glassfish.jersey.client.JerseyClient;
 import org.glassfish.jersey.client.JerseyClientBuilder;
 import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
@@ -41,7 +42,7 @@ public class ExternalServerClient {
   @Inject
   private SslConfigurer sslConfigurer;
 
-  private static Logger LOG = Logger.getLogger(ExternalServerClient.class);
+  private static final Logger logger = LogManager.getLogger(ExternalServerClient.class);
   private ThreadLocal<JerseyClient> localJerseyClient;
 
   @Inject
@@ -69,7 +70,7 @@ public class ExternalServerClient {
     client.register(authFeature);
 
     WebTarget target = client.target(url);
-    LOG.debug("URL: " + url);
+    logger.debug("URL: " + url);
     
     Invocation.Builder invocationBuilder =  target.request();
     try {
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchHttpConfig.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchHttpConfig.java
index 4a7280d..39d8095 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchHttpConfig.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchHttpConfig.java
@@ -57,6 +57,16 @@ public class LogSearchHttpConfig {
   @Value("${logsearch.protocol:http}")
   private String protocol;
 
+  @LogSearchPropertyDescription(
+    name = "logsearch.session.timeout",
+    description = "Log Search http session timeout in minutes.",
+    examples = {"300"},
+    defaultValue = "30",
+    sources = {LOGSEARCH_PROPERTIES_FILE}
+  )
+  @Value("${logsearch.session.timeout:30}")
+  private Integer sessionTimeout;
+
   public String getProtocol() {
     return protocol;
   }
@@ -80,4 +90,12 @@ public class LogSearchHttpConfig {
   public void setHttpsPort(int httpsPort) {
     this.httpsPort = httpsPort;
   }
+
+  public Integer getSessionTimeout() {
+    return sessionTimeout;
+  }
+
+  public void setSessionTimeout(Integer sessionTimeout) {
+    this.sessionTimeout = sessionTimeout;
+  }
 }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchJerseyResourceConfig.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchJerseyResourceConfig.java
index a3ce260..8027096 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchJerseyResourceConfig.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchJerseyResourceConfig.java
@@ -21,6 +21,7 @@ package org.apache.ambari.logsearch.conf;
 import javax.ws.rs.ApplicationPath;
 
 import org.apache.ambari.logsearch.rest.ServiceLogsResource;
+import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.servlet.ServletProperties;
 
@@ -29,7 +30,7 @@ public class LogSearchJerseyResourceConfig extends ResourceConfig {
 
   public LogSearchJerseyResourceConfig() {
     packages(ServiceLogsResource.class.getPackage().getName());
-    register(com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider.class);
+    register(JacksonJaxbJsonProvider.class);
     property(ServletProperties.FILTER_FORWARD_ON_404, true);
   }
 
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchServletConfig.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchServletConfig.java
index a7a27da..9e23e5c 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchServletConfig.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchServletConfig.java
@@ -21,31 +21,26 @@ package org.apache.ambari.logsearch.conf;
 import org.apache.ambari.logsearch.configurer.SslConfigurer;
 import org.apache.ambari.logsearch.web.listener.LogSearchSessionListener;
 import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
 import org.glassfish.jersey.servlet.ServletContainer;
 import org.glassfish.jersey.servlet.ServletProperties;
 import org.springframework.boot.autoconfigure.web.ServerProperties;
-import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
-import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainer;
-import org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory;
-import org.springframework.boot.context.embedded.jetty.JettyServerCustomizer;
+import org.springframework.boot.web.embedded.jetty.JettyServerCustomizer;
+import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory;
+import org.springframework.boot.web.server.WebServerFactory;
 import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
+import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 import javax.inject.Inject;
 import javax.servlet.http.HttpSessionListener;
 
-import static org.apache.ambari.logsearch.common.LogSearchConstants.LOGSEARCH_APPLICATION_NAME;
-import static org.apache.ambari.logsearch.common.LogSearchConstants.LOGSEARCH_SESSION_ID;
-
 @Configuration
 public class LogSearchServletConfig {
 
-  private static final Integer SESSION_TIMEOUT = 60 * 30;
-
   @Inject
   private ServerProperties serverProperties;
 
@@ -68,28 +63,8 @@ public class LogSearchServletConfig {
   }
 
   @Bean
-  public EmbeddedServletContainerFactory containerFactory() {
-    final JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory = new JettyEmbeddedServletContainerFactory() {
-      @Override
-      protected JettyEmbeddedServletContainer getJettyEmbeddedServletContainer(Server server) {
-        return new JettyEmbeddedServletContainer(server);
-      }
-    };
-    jettyEmbeddedServletContainerFactory.setSessionTimeout(SESSION_TIMEOUT);
-    serverProperties.getSession().getCookie().setName(LOGSEARCH_SESSION_ID);
-    serverProperties.setDisplayName(LOGSEARCH_APPLICATION_NAME);
-    if ("https".equals(logSearchHttpConfig.getProtocol())) {
-      sslConfigurer.ensureStorePasswords();
-      sslConfigurer.loadKeystore();
-      jettyEmbeddedServletContainerFactory.addServerCustomizers((JettyServerCustomizer) server -> {
-        SslContextFactory sslContextFactory = sslConfigurer.getSslContextFactory();
-        ServerConnector sslConnector = new ServerConnector(server, sslContextFactory);
-        sslConnector.setPort(logSearchHttpConfig.getHttpsPort());
-        server.setConnectors(new Connector[]{sslConnector});
-      });
-    } else {
-      jettyEmbeddedServletContainerFactory.setPort(logSearchHttpConfig.getHttpPort());
-    }
-    return jettyEmbeddedServletContainerFactory;
+  public ServletWebServerFactory webServerFactory() {
+    return new JettyServletWebServerFactory();
   }
+
 }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchSessionConfig.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchSessionConfig.java
new file mode 100644
index 0000000..8023094
--- /dev/null
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchSessionConfig.java
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ */
+package org.apache.ambari.logsearch.conf;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.session.MapSessionRepository;
+import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession;
+import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;
+import org.springframework.session.web.http.DefaultCookieSerializer;
+
+import static org.apache.ambari.logsearch.common.LogSearchConstants.LOGSEARCH_SESSION_ID;
+
+@Configuration
+@EnableSpringHttpSession
+public class LogSearchSessionConfig extends AbstractHttpSessionApplicationInitializer {
+
+  @Bean
+  public DefaultCookieSerializer defaultCookieSerializer(){
+    DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
+    defaultCookieSerializer.setCookieName(LOGSEARCH_SESSION_ID);
+    return defaultCookieSerializer;
+  }
+
+  @Bean
+  public MapSessionRepository sessionRepository() {
+    return new MapSessionRepository();
+  }
+
+}
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchWebServerCustomizer.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchWebServerCustomizer.java
new file mode 100644
index 0000000..fb83829
--- /dev/null
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/LogSearchWebServerCustomizer.java
@@ -0,0 +1,67 @@
+/*
+ * 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.
+ */
+package org.apache.ambari.logsearch.conf;
+
+import org.apache.ambari.logsearch.configurer.SslConfigurer;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.web.embedded.jetty.JettyServerCustomizer;
+import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory;
+import org.springframework.boot.web.server.WebServerFactoryCustomizer;
+import org.springframework.stereotype.Component;
+
+import javax.inject.Inject;
+import java.time.Duration;
+
+import static org.apache.ambari.logsearch.common.LogSearchConstants.LOGSEARCH_SESSION_ID;
+
+@Component
+public class LogSearchWebServerCustomizer implements WebServerFactoryCustomizer<JettyServletWebServerFactory> {
+
+  private static final Integer SESSION_TIMEOUT = 30;
+
+  @Inject
+  private ServerProperties serverProperties;
+
+  @Inject
+  private LogSearchHttpConfig logSearchHttpConfig;
+
+  @Inject
+  private SslConfigurer sslConfigurer;
+
+  @Override
+  public void customize(JettyServletWebServerFactory webServerFactory) {
+    serverProperties.getServlet().getSession().setTimeout(Duration.ofMinutes(logSearchHttpConfig.getSessionTimeout()));
+    serverProperties.getServlet().getSession().getCookie().setName(LOGSEARCH_SESSION_ID);
+    if ("https".equals(logSearchHttpConfig.getProtocol())) {
+      sslConfigurer.ensureStorePasswords();
+      sslConfigurer.loadKeystore();
+      webServerFactory.addServerCustomizers((JettyServerCustomizer) server -> {
+        SslContextFactory sslContextFactory = sslConfigurer.getSslContextFactory();
+        ServerConnector sslConnector = new ServerConnector(server, sslContextFactory);
+        sslConnector.setPort(logSearchHttpConfig.getHttpsPort());
+        server.setConnectors(new Connector[]{sslConnector});
+      });
+    } else {
+      webServerFactory.setPort(logSearchHttpConfig.getHttpPort());
+    }
+  }
+}
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
index 87dc22f..b1ca062 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
@@ -60,6 +60,8 @@ import org.springframework.security.ldap.authentication.NullLdapAuthoritiesPopul
 import org.springframework.security.ldap.search.FilterBasedLdapUserSearch;
 import org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator;
 import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.web.access.intercept.FilterSecurityInterceptor;
 import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
 import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
@@ -187,7 +189,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
   @Bean
   public LdapAuthoritiesPopulator ldapAuthoritiesPopulator() {
-    if (StringUtils.isNotBlank(authPropsConfig.getLdapAuthConfig().getLdapGroupSearchBase())) {
+    if (authPropsConfig.isAuthLdapEnabled() || StringUtils.isNotBlank(authPropsConfig.getLdapAuthConfig().getLdapGroupSearchBase())) {
       final DefaultLdapAuthoritiesPopulator ldapAuthoritiesPopulator =
         new DefaultLdapAuthoritiesPopulator(ldapContextSource(), authPropsConfig.getLdapAuthConfig().getLdapGroupSearchBase());
       ldapAuthoritiesPopulator.setGroupSearchFilter(authPropsConfig.getLdapAuthConfig().getLdapGroupSearchFilter());
@@ -262,6 +264,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
     return filter;
   }
 
+  @Bean
+  public PasswordEncoder passwordEncoder() {
+    return new BCryptPasswordEncoder();
+  }
+
   private LogsearchFilter logsearchServiceLogFilter() {
     return new LogsearchFilter(serviceLogsRequestMatcher(), new GlobalStateProvider(solrServiceLogsState, solrServiceLogPropsConfig));
   }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
index 33f4f6f..4dc74ee 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
@@ -20,17 +20,14 @@ package org.apache.ambari.logsearch.conf;
 
 import org.apache.ambari.logsearch.conf.global.SolrAuditLogsState;
 import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
-import org.apache.ambari.logsearch.conf.global.LogLevelFilterManagerState;
 import org.apache.ambari.logsearch.conf.global.SolrServiceLogsState;
 import org.apache.ambari.logsearch.conf.global.SolrEventHistoryState;
 import org.apache.ambari.logsearch.dao.SolrSchemaFieldDao;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.data.solr.repository.config.EnableSolrRepositories;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 @Configuration
-@EnableSolrRepositories
 @EnableScheduling
 public class SolrConfig {
 
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/LogLevelManagerFilterConfigurer.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/LogLevelManagerFilterConfigurer.java
index 5efca85..9e6ec29 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/LogLevelManagerFilterConfigurer.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/LogLevelManagerFilterConfigurer.java
@@ -26,8 +26,8 @@ import org.apache.ambari.logsearch.config.zookeeper.LogLevelFilterManagerZK;
 import org.apache.ambari.logsearch.config.zookeeper.LogSearchConfigZKHelper;
 import org.apache.ambari.logsearch.dao.EventHistorySolrDao;
 import org.apache.curator.framework.CuratorFramework;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
@@ -35,7 +35,7 @@ import javax.inject.Named;
 
 @Named
 public class LogLevelManagerFilterConfigurer implements Configurer {
-  private static final Logger logger = LoggerFactory.getLogger(LogLevelManagerFilterConfigurer.class);
+  private static final Logger logger = LogManager.getLogger(LogLevelManagerFilterConfigurer.class);
 
   private static final int RETRY_INTERVAL_SECONDS = 10;
 
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/LogSearchConfigConfigurer.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/LogSearchConfigConfigurer.java
index fc71409..88ea77d 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/LogSearchConfigConfigurer.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/LogSearchConfigConfigurer.java
@@ -29,12 +29,12 @@ import org.apache.ambari.logsearch.conf.global.LogSearchConfigState;
 import org.apache.ambari.logsearch.config.api.LogSearchConfigFactory;
 import org.apache.ambari.logsearch.config.api.LogSearchConfigServer;
 import org.apache.ambari.logsearch.config.zookeeper.LogSearchConfigServerZK;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 @Named
 public class LogSearchConfigConfigurer implements Configurer {
-  private static final Logger logger = LoggerFactory.getLogger(LogSearchConfigConfigurer.class);
+  private static final Logger logger = LogManager.getLogger(LogSearchConfigConfigurer.class);
   
   private static final int RETRY_INTERVAL_SECONDS = 10;
   
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SolrAuditAliasConfigurer.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SolrAuditAliasConfigurer.java
index 679c1f5..cba0702 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SolrAuditAliasConfigurer.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SolrAuditAliasConfigurer.java
@@ -23,12 +23,12 @@ import org.apache.ambari.logsearch.conf.global.SolrAuditLogsState;
 import org.apache.ambari.logsearch.dao.AuditSolrDao;
 import org.apache.ambari.logsearch.handler.ListCollectionHandler;
 import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.response.CollectionAdminResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -38,7 +38,7 @@ import java.util.List;
 
 public class SolrAuditAliasConfigurer implements Configurer {
 
-  private static final Logger LOG = LoggerFactory.getLogger(SolrAuditAliasConfigurer.class);
+  private static final Logger logger = LogManager.getLogger(SolrAuditAliasConfigurer.class);
 
   private static final int ALIAS_SETUP_RETRY_SECOND = 30 * 60;
 
@@ -56,16 +56,16 @@ public class SolrAuditAliasConfigurer implements Configurer {
       Arrays.asList(solrPropsConfig.getCollection(), solrPropsConfig.getRangerCollection().trim());
 
     if (solrPropsConfig.getAliasNameIn() == null || collectionListIn.size() == 0) {
-      LOG.info("Will not create alias {} for {}", solrPropsConfig.getAliasNameIn(), collectionListIn.toString());
+      logger.info("Will not create alias {} for {}", solrPropsConfig.getAliasNameIn(), collectionListIn.toString());
       return;
     }
 
-    LOG.info("setupAlias " + solrPropsConfig.getAliasNameIn() + " for " + collectionListIn.toString());
+    logger.info("setupAlias " + solrPropsConfig.getAliasNameIn() + " for " + collectionListIn.toString());
     // Start a background thread to do setup
     Thread setupThread = new Thread("setup_alias_" + solrPropsConfig.getAliasNameIn()) {
       @Override
       public void run() {
-        LOG.info("Started monitoring thread to check availability of Solr server. alias=" + solrPropsConfig.getAliasNameIn() +
+        logger.info("Started monitoring thread to check availability of Solr server. alias=" + solrPropsConfig.getAliasNameIn() +
           ", collections=" + collectionListIn.toString());
         int retryCount = 0;
         while (true) {
@@ -76,22 +76,22 @@ public class SolrAuditAliasConfigurer implements Configurer {
               if (count > 0) {
                 solrClient.setDefaultCollection(solrPropsConfig.getAliasNameIn());
                 if (count == collectionListIn.size()) {
-                  LOG.info("Setup for alias " + solrPropsConfig.getAliasNameIn() + " is successful. Exiting setup retry thread. " +
+                  logger.info("Setup for alias " + solrPropsConfig.getAliasNameIn() + " is successful. Exiting setup retry thread. " +
                     "Collections=" + collectionListIn);
                   state.setSolrAliasReady(true);
                   break;
                 }
               } else {
-                LOG.warn("Not able to create alias=" + solrPropsConfig.getAliasNameIn() + ", retryCount=" + retryCount);
+                logger.warn("Not able to create alias=" + solrPropsConfig.getAliasNameIn() + ", retryCount=" + retryCount);
               }
             } catch (Exception e) {
-              LOG.error("Error setting up alias=" + solrPropsConfig.getAliasNameIn(), e);
+              logger.error("Error setting up alias=" + solrPropsConfig.getAliasNameIn(), e);
             }
           }
           try {
             Thread.sleep(ALIAS_SETUP_RETRY_SECOND * 1000);
           } catch (InterruptedException sleepInterrupted) {
-            LOG.info("Sleep interrupted while setting up alias " + solrPropsConfig.getAliasNameIn());
+            logger.info("Sleep interrupted while setting up alias " + solrPropsConfig.getAliasNameIn());
             break;
           }
           retryCount++;
@@ -108,7 +108,7 @@ public class SolrAuditAliasConfigurer implements Configurer {
     try {
       collectionToAdd = new ListCollectionHandler().handle(solrClient, null);
     } catch (Exception e) {
-      LOG.error("Invalid state during getting collections for creating alias");
+      logger.error("Invalid state during getting collections for creating alias");
     }
     collectionToAdd.retainAll(collectionListIn);
 
@@ -118,15 +118,15 @@ public class SolrAuditAliasConfigurer implements Configurer {
       CollectionAdminRequest.CreateAlias aliasCreateRequest = CollectionAdminRequest.createAlias(aliasNameIn, collectionsCSV);
       CollectionAdminResponse createResponse = aliasCreateRequest.process(solrClient);
       if (createResponse.getStatus() != 0) {
-        LOG.error("Error creating alias. alias=" + aliasNameIn + ", collectionList=" + collectionsCSV
+        logger.error("Error creating alias. alias=" + aliasNameIn + ", collectionList=" + collectionsCSV
           + ", response=" + createResponse);
         return 0;
       }
     }
     if (collectionToAdd.size() == collectionListIn.size()) {
-      LOG.info("Created alias for all collections. alias=" + aliasNameIn + ", collectionsCSV=" + collectionsCSV);
+      logger.info("Created alias for all collections. alias=" + aliasNameIn + ", collectionsCSV=" + collectionsCSV);
     } else {
-      LOG.info("Created alias for " + collectionToAdd.size() + " out of " + collectionListIn.size() + " collections. " +
+      logger.info("Created alias for " + collectionToAdd.size() + " out of " + collectionListIn.size() + " collections. " +
         "alias=" + aliasNameIn + ", collectionsCSV=" + collectionsCSV);
     }
     return collectionToAdd.size();
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SolrCollectionConfigurer.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SolrCollectionConfigurer.java
index 9625736..26ff70b 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SolrCollectionConfigurer.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SolrCollectionConfigurer.java
@@ -28,13 +28,13 @@ import org.apache.ambari.logsearch.handler.ListCollectionHandler;
 import org.apache.ambari.logsearch.handler.ReloadCollectionHandler;
 import org.apache.ambari.logsearch.handler.UploadConfigurationHandler;
 import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.zookeeper.WatchedEvent;
 import org.apache.zookeeper.Watcher;
 import org.apache.zookeeper.ZooKeeper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.data.solr.core.SolrTemplate;
 
 import java.io.File;
@@ -46,7 +46,7 @@ import java.util.concurrent.TimeUnit;
 
 public class SolrCollectionConfigurer implements Configurer {
 
-  private Logger LOG = LoggerFactory.getLogger(SolrCollectionConfigurer.class);
+  private Logger logger = LogManager.getLogger(SolrCollectionConfigurer.class);
 
   private static final int SETUP_RETRY_SECOND = 10;
   private static final int SESSION_TIMEOUT = 15000;
@@ -82,7 +82,7 @@ public class SolrCollectionConfigurer implements Configurer {
     Thread setupThread = new Thread("setup_collection_" + solrPropsConfig.getCollection()) {
       @Override
       public void run() {
-        LOG.info("Started monitoring thread to check availability of Solr server. collection=" + solrPropsConfig.getCollection());
+        logger.info("Started monitoring thread to check availability of Solr server. collection=" + solrPropsConfig.getCollection());
         while (!stopSetupCondition(state)) {
           int retryCount = 0;
           try {
@@ -98,7 +98,7 @@ public class SolrCollectionConfigurer implements Configurer {
             createCollectionsIfNeeded(cloudSolrClient, state, solrPropsConfig, reloadCollectionNeeded);
           } catch (Exception e) {
             retryCount++;
-            LOG.error("Error setting collection. collection=" + solrPropsConfig.getCollection() + ", retryCount=" + retryCount, e);
+            logger.error("Error setting collection. collection=" + solrPropsConfig.getCollection() + ", retryCount=" + retryCount, e);
           }
         }
       }
@@ -145,7 +145,7 @@ public class SolrCollectionConfigurer implements Configurer {
     if (securityEnabled) {
       String javaSecurityConfig = System.getProperty(JAVA_SECURITY_AUTH_LOGIN_CONFIG);
       String solrHttpBuilderFactory = System.getProperty(SOLR_HTTPCLIENT_BUILDER_FACTORY);
-      LOG.info("setupSecurity() called for kerberos configuration, jaas file: {}, solr http client factory: {}",
+      logger.info("setupSecurity() called for kerberos configuration, jaas file: {}, solr http client factory: {}",
         javaSecurityConfig, solrHttpBuilderFactory);
     }
   }
@@ -153,14 +153,14 @@ public class SolrCollectionConfigurer implements Configurer {
   private void openZkConnectionAndUpdateStatus(final SolrCollectionState state, final SolrPropsConfig solrPropsConfig) throws Exception {
     ZooKeeper zkClient = null;
     try {
-      LOG.info("Checking that Znode ('{}') is ready or not... ", solrPropsConfig.getZkConnectString());
+      logger.info("Checking that Znode ('{}') is ready or not... ", solrPropsConfig.getZkConnectString());
       zkClient = openZookeeperConnection(solrPropsConfig);
       if (!state.isZnodeReady()) {
-        LOG.info("State change: Zookeeper ZNode is available for {}", solrPropsConfig.getZkConnectString());
+        logger.info("State change: Zookeeper ZNode is available for {}", solrPropsConfig.getZkConnectString());
         state.setZnodeReady(true);
       }
     } catch (Exception e) {
-      LOG.error("Error occurred during the creation of zk client (connection string: {})", solrPropsConfig.getZkConnectString());
+      logger.error("Error occurred during the creation of zk client (connection string: {})", solrPropsConfig.getZkConnectString());
       throw e;
     } finally {
       try {
@@ -168,7 +168,7 @@ public class SolrCollectionConfigurer implements Configurer {
           zkClient.close();
         }
       } catch (Exception e) {
-        LOG.error("Could not close zk connection properly.", e);
+        logger.error("Could not close zk connection properly.", e);
       }
     }
   }
@@ -198,26 +198,26 @@ public class SolrCollectionConfigurer implements Configurer {
         try {
           List<String> collectionList = new ListCollectionHandler().handle(cloudSolrClient, null);
           if (collectionList != null) {
-            LOG.info("checkSolrStatus(): Solr getCollections() is success. collectionList=" + collectionList);
+            logger.info("checkSolrStatus(): Solr getCollections() is success. collectionList=" + collectionList);
             status = true;
             break;
           }
         } catch (Exception ex) {
-          LOG.error("Error while doing Solr check", ex);
+          logger.error("Error while doing Solr check", ex);
         }
         if (System.currentTimeMillis() - beginTimeMS > waitDurationMS) {
-          LOG.error("Solr is not reachable even after " + (System.currentTimeMillis() - beginTimeMS) + " ms. " +
+          logger.error("Solr is not reachable even after " + (System.currentTimeMillis() - beginTimeMS) + " ms. " +
             "If you are using alias, then you might have to restart LogSearch after Solr is up and running.");
           break;
         } else {
-          LOG.warn("Solr is not not reachable yet. getCollections() attempt count=" + pingCount + ". " +
+          logger.warn("Solr is not not reachable yet. getCollections() attempt count=" + pingCount + ". " +
             "Will sleep for " + waitIntervalMS + " ms and try again.");
         }
         Thread.sleep(waitIntervalMS);
 
       }
     } catch (Throwable t) {
-      LOG.error("Seems Solr is not up.");
+      logger.error("Seems Solr is not up.");
     }
     return status;
   }
@@ -238,7 +238,7 @@ public class SolrCollectionConfigurer implements Configurer {
         state.setSolrCollectionReady(true);
       }
     } catch (Exception ex) {
-      LOG.error("Error during creating/updating collection. collectionName=" + solrPropsConfig.getCollection(), ex);
+      logger.error("Error during creating/updating collection. collectionName=" + solrPropsConfig.getCollection(), ex);
     }
   }
 }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SslConfigurer.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SslConfigurer.java
index f4e2947..6ecabbf 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SslConfigurer.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/configurer/SslConfigurer.java
@@ -29,6 +29,8 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.bouncycastle.asn1.ASN1InputStream;
 import org.bouncycastle.asn1.x500.X500Name;
 import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
@@ -45,8 +47,6 @@ import org.bouncycastle.cert.X509v3CertificateBuilder;
 import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
 import org.bouncycastle.crypto.params.RSAKeyParameters;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -76,7 +76,7 @@ import static org.apache.ambari.logsearch.conf.LogSearchSslConfig.LOGSEARCH_CERT
 
 @Named
 public class SslConfigurer {
-  private static final Logger LOG = LoggerFactory.getLogger(SslConfigurer.class);
+  private static final Logger logger = LogManager.getLogger(SslConfigurer.class);
   
   private static final String KEYSTORE_LOCATION_ARG = "javax.net.ssl.keyStore";
   private static final String KEYSTORE_PASSWORD_ARG = "javax.net.ssl.keyStorePassword";
@@ -154,13 +154,13 @@ public class SslConfigurer {
       sslContextFactory.start();
       return sslContextFactory.getSslContext();
     } catch (Exception e) {
-      LOG.error("Could not create SSL Context", e);
+      logger.error("Could not create SSL Context", e);
       return null;
     } finally {
       try {
         sslContextFactory.stop();
       } catch (Exception e) {
-        LOG.error("Could not stop sslContextFactory", e);
+        logger.error("Could not stop sslContextFactory", e);
       }
     }
   }
@@ -175,7 +175,7 @@ public class SslConfigurer {
         return FileUtils.readFileToString(pwdFile);
       }
     } catch (Exception e) {
-      LOG.warn("Exception occurred during read/write password file for keystore/truststore.", e);
+      logger.warn("Exception occurred during read/write password file for keystore/truststore.", e);
       return null;
     }
   }
@@ -192,7 +192,7 @@ public class SslConfigurer {
       char[] passwordChars = config.getPassword(propertyName);
       return (ArrayUtils.isNotEmpty(passwordChars)) ? new String(passwordChars) : null;
     } catch (Exception e) {
-      LOG.warn(String.format("Could not load password %s from credential store, using default password", propertyName), e);
+      logger.warn(String.format("Could not load password %s from credential store, using default password", propertyName), e);
       return null;
     }
   }
@@ -222,7 +222,7 @@ public class SslConfigurer {
       keyStore.setKeyEntry("logsearch.alias", keyPair.getPrivate(), password, certChain);
       keyStore.store(fos, password);
     } catch (Exception e) {
-      LOG.error("Could not write certificate to Keystore", e);
+      logger.error("Could not write certificate to Keystore", e);
       throw e;
     }
   }
@@ -244,7 +244,7 @@ public class SslConfigurer {
     try {
       File certFile = new File(certificateLocation);
       if (certFile.exists()) {
-        LOG.info("Certificate file exists ({}), skip the generation.", certificateLocation);
+        logger.info("Certificate file exists ({}), skip the generation.", certificateLocation);
         return getCertFile(certificateLocation);
       } else {
         Security.addProvider(new BouncyCastleProvider());
@@ -253,7 +253,7 @@ public class SslConfigurer {
         return cert;
       }
     } catch (Exception e) {
-      LOG.error("Could not create certificate.", e);
+      logger.error("Could not create certificate.", e);
       throw e;
     }
   }
@@ -275,7 +275,7 @@ public class SslConfigurer {
       CertificateFactory factory = CertificateFactory.getInstance("X.509");
       return (X509Certificate) factory.generateCertificate(fos);
     } catch (Exception e) {
-      LOG.error("Cannot read cert file. ('" + location + "')", e);
+      logger.error("Cannot read cert file. ('" + location + "')", e);
       throw e;
     }
   }
@@ -333,12 +333,12 @@ public class SslConfigurer {
       boolean keyStoreFileExists = new File(keyStoreLocation).exists();
       if (!keyStoreFileExists) {
         FileUtil.createDirectory(certFolder);
-        LOG.warn("Keystore file ('{}') does not exist, creating new one. " +
+        logger.warn("Keystore file ('{}') does not exist, creating new one. " +
           "If the file exists, make sure you have proper permissions on that.", keyStoreLocation);
         if (isKeyStoreSpecified() && !"JKS".equalsIgnoreCase(getKeyStoreType())) {
           throw new RuntimeException(String.format("Keystore does not exist. Only JKS keystore can be auto generated. (%s)", keyStoreLocation));
         }
-        LOG.info("SSL keystore is not specified. Generating it with certificate ... (using default format: JKS)");
+        logger.info("SSL keystore is not specified. Generating it with certificate ... (using default format: JKS)");
         Security.addProvider(new BouncyCastleProvider());
         KeyPair keyPair = createKeyPair("RSA", 2048);
         File privateKeyFile = new File(String.format("%s/%s", certFolder, LOGSEARCH_KEYSTORE_PRIVATE_KEY));
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/AuditSolrDao.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/AuditSolrDao.java
index 4bef51e..37123c9 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/AuditSolrDao.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/AuditSolrDao.java
@@ -31,13 +31,14 @@ import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
 import org.apache.ambari.logsearch.configurer.SolrAuditAliasConfigurer;
 import org.apache.ambari.logsearch.configurer.SolrCollectionConfigurer;
 import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.data.solr.core.SolrTemplate;
 
 @Named
 public class AuditSolrDao extends SolrDaoBase {
 
-  private static final Logger LOG = Logger.getLogger(AuditSolrDao.class);
+  private static final Logger logger = LogManager.getLogger(AuditSolrDao.class);
 
   @Inject
   private SolrAuditLogPropsConfig solrAuditLogPropsConfig;
@@ -77,7 +78,7 @@ public class AuditSolrDao extends SolrDaoBase {
         new SolrAuditAliasConfigurer(this).start();
       }
     } catch (Exception e) {
-      LOG.error("Error while connecting to Solr for audit logs : solrUrl=" + solrAuditLogPropsConfig.getSolrUrl() + ", zkConnectString=" +
+      logger.error("Error while connecting to Solr for audit logs : solrUrl=" + solrAuditLogPropsConfig.getSolrUrl() + ", zkConnectString=" +
         solrAuditLogPropsConfig.getZkConnectString() + ", collection=" + solrAuditLogPropsConfig.getCollection(), e);
     }
   }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java
index e375424..e56f47f 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java
@@ -33,20 +33,21 @@ import org.apache.ambari.logsearch.conf.SolrPropsConfig;
 import org.apache.ambari.logsearch.conf.SolrEventHistoryPropsConfig;
 import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
 import org.apache.ambari.logsearch.configurer.SolrCollectionConfigurer;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.response.UpdateResponse;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
 
-import org.apache.log4j.Logger;
 import org.springframework.data.solr.core.SolrTemplate;
 
 @Named
 public class EventHistorySolrDao extends SolrDaoBase {
 
-  private static final Logger LOG = Logger.getLogger(EventHistorySolrDao.class);
+  private static final Logger logger = LogManager.getLogger(EventHistorySolrDao.class);
 
-  private static final Logger LOG_PERFORMANCE = Logger.getLogger("org.apache.ambari.logsearch.performance");
+  private static final Logger LOG_PERFORMANCE = LogManager.getLogger("org.apache.ambari.logsearch.performance");
 
   @Inject
   private SolrEventHistoryPropsConfig solrEventHistoryPropsConfig;
@@ -83,7 +84,7 @@ public class EventHistorySolrDao extends SolrDaoBase {
     try {
       new SolrCollectionConfigurer(this, false, solrClientsHolder, SolrClientsHolder.CollectionType.HISTORY).start();
     } catch (Exception e) {
-      LOG.error("error while connecting to Solr for history logs : solrUrl=" + solrUrl + ", zkConnectString=" + zkConnectString +
+      logger.error("error while connecting to Solr for history logs : solrUrl=" + solrUrl + ", zkConnectString=" + zkConnectString +
           ", collection=" + collection, e);
     }
   }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/RoleDao.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/RoleDao.java
index d6dbd91..bb8f589 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/RoleDao.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/RoleDao.java
@@ -25,8 +25,8 @@ import org.apache.ambari.logsearch.util.FileUtil;
 import org.apache.ambari.logsearch.util.JSONUtil;
 import org.apache.ambari.logsearch.web.model.Privilege;
 import org.apache.ambari.logsearch.web.model.Role;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.core.GrantedAuthority;
 
 import javax.annotation.PostConstruct;
@@ -47,7 +47,7 @@ import static java.util.Collections.singletonList;
 @Named
 public class RoleDao {
 
-  private static final Logger LOG = LoggerFactory.getLogger(RoleDao.class);
+  private static final Logger logger = LogManager.getLogger(RoleDao.class);
 
   @Inject
   private AuthPropsConfig authPropsConfig;
@@ -60,10 +60,10 @@ public class RoleDao {
     if (authPropsConfig.isFileAuthorization()) {
       try {
         String userRoleFileName = authPropsConfig.getRoleFile();
-        LOG.info("USER ROLE JSON file NAME:" + userRoleFileName);
+        logger.info("USER ROLE JSON file NAME:" + userRoleFileName);
         File jsonFile = FileUtil.getFileFromClasspath(userRoleFileName);
         if (jsonFile == null || !jsonFile.exists()) {
-          LOG.error("Role json file not found on the classpath :" + userRoleFileName);
+          logger.error("Role json file not found on the classpath :" + userRoleFileName);
           System.exit(1);
         }
         Map<String, Object> userRoleInfo = JSONUtil.readJsonFromFile(jsonFile);
@@ -72,10 +72,10 @@ public class RoleDao {
           simpleRolesMap.put(roleEntry.getKey(), (List<String>) roleEntry.getValue());
         }
       } catch (Exception e) {
-        LOG.error("Error while reading user role file: {}", e.getMessage());
+        logger.error("Error while reading user role file: {}", e.getMessage());
       }
     } else {
-      LOG.info("File authorization is disabled");
+      logger.info("File authorization is disabled");
     }
   }
 
@@ -86,11 +86,11 @@ public class RoleDao {
         if (!Collections.isEmpty(roles)) {
           for (String role : roles) {
             String roleName = "ROLE_" + role;
-            LOG.debug("Found role '{}' for user '{}'", roleName, user);
+            logger.debug("Found role '{}' for user '{}'", roleName, user);
             authorities.add(createRoleWithReadPrivilage(roleName));
           }
         } else {
-          LOG.warn("Not found roles for user '{}'", user);
+          logger.warn("Not found roles for user '{}'", user);
         }
       return authorities;
     } else {
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/ServiceLogsSolrDao.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/ServiceLogsSolrDao.java
index 4fbe534..da05c84 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/ServiceLogsSolrDao.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/ServiceLogsSolrDao.java
@@ -29,13 +29,14 @@ import org.apache.ambari.logsearch.conf.SolrPropsConfig;
 import org.apache.ambari.logsearch.conf.SolrServiceLogPropsConfig;
 import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
 import org.apache.ambari.logsearch.configurer.SolrCollectionConfigurer;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.data.solr.core.SolrTemplate;
 
 @Named
 public class ServiceLogsSolrDao extends SolrDaoBase {
 
-  private static final Logger LOG = Logger.getLogger(ServiceLogsSolrDao.class);
+  private static final Logger logger = LogManager.getLogger(ServiceLogsSolrDao.class);
 
   @Inject
   private SolrServiceLogPropsConfig solrServiceLogPropsConfig;
@@ -65,11 +66,11 @@ public class ServiceLogsSolrDao extends SolrDaoBase {
 
   @PostConstruct
   public void postConstructor() {
-    LOG.info("postConstructor() called.");
+    logger.info("postConstructor() called.");
     try {
       new SolrCollectionConfigurer(this, true, solrClientsHolder, SolrClientsHolder.CollectionType.HISTORY).start();
     } catch (Exception e) {
-      LOG.error("error while connecting to Solr for service logs : solrUrl=" + solrServiceLogPropsConfig.getSolrUrl()
+      logger.error("error while connecting to Solr for service logs : solrUrl=" + solrServiceLogPropsConfig.getSolrUrl()
         + ", zkConnectString=" + solrServiceLogPropsConfig.getZkConnectString()
         + ", collection=" + solrServiceLogPropsConfig.getCollection(), e);
     }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrDaoBase.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrDaoBase.java
index f11f7d9..acf1685 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrDaoBase.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrDaoBase.java
@@ -36,7 +36,8 @@ import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
 import org.apache.ambari.logsearch.config.api.LogSearchConfigServer;
 import org.apache.ambari.logsearch.configurer.LogSearchConfigConfigurer;
 import org.apache.ambari.logsearch.util.SolrUtil;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrRequest.METHOD;
 import org.apache.solr.client.solrj.SolrServerException;
@@ -51,8 +52,8 @@ import org.springframework.data.solr.core.query.SolrDataQuery;
 
 public abstract class SolrDaoBase {
 
-  private static final Logger LOG = Logger.getLogger(SolrDaoBase.class);
-  private static final Logger LOG_PERFORMANCE = Logger.getLogger("org.apache.ambari.logsearch.performance");
+  private static final Logger logger = LogManager.getLogger(SolrDaoBase.class);
+  private static final Logger performanceLogger = LogManager.getLogger("org.apache.ambari.logsearch.performance");
 
   private LogType logType;
 
@@ -75,11 +76,11 @@ public abstract class SolrDaoBase {
   public void waitForLogSearchConfig() {
     if (logSearchConfigApiConfig.isConfigApiEnabled()) {
       while (!logSearchConfigState.isLogSearchConfigAvailable()) {
-        LOG.info("Log Search config not available yet, waiting...");
+        logger.info("Log Search config not available yet, waiting...");
         try {
           Thread.sleep(1000);
         } catch (Exception e) {
-          LOG.warn("Exception during waiting for Log Search Config", e);
+          logger.warn("Exception during waiting for Log Search Config", e);
         }
       }
     }
@@ -87,7 +88,7 @@ public abstract class SolrDaoBase {
 
   public QueryResponse process(SolrQuery solrQuery, String event) {
     SolrUtil.removeDoubleOrTripleEscapeFromFilters(solrQuery);
-    LOG.info("Solr query will be processed: " + solrQuery);
+    logger.info("Solr query will be processed: " + solrQuery);
     if (getSolrClient() != null) {
       event = event == null ? solrQuery.get("event") : event;
       solrQuery.remove("event");
@@ -105,7 +106,7 @@ public abstract class SolrDaoBase {
 
   private UpdateResponse deleteByQuery(SolrQuery solrQuery, String event) {
     SolrUtil.removeDoubleOrTripleEscapeFromFilters(solrQuery);
-    LOG.info("Solr delete query will be processed: " + solrQuery);
+    logger.info("Solr delete query will be processed: " + solrQuery);
     if (getSolrClient() != null) {
       try {
         UpdateResponse updateResponse = getSolrClient().deleteByQuery(solrQuery.getQuery());
@@ -138,7 +139,7 @@ public abstract class SolrDaoBase {
       solrQuery.setRows(0);
       QueryResponse queryResponse = solrClient.query(solrQuery);
       long count = solrClient.query(solrQuery).getResults().getNumFound();
-      LOG_PERFORMANCE.info("\n Username :- " + LogSearchContext.getCurrentUsername() + " Count SolrQuery :- " +
+      performanceLogger.info("\n Username :- " + LogSearchContext.getCurrentUsername() + " Count SolrQuery :- " +
         solrQuery + "\nQuery Time Execution :- " + queryResponse.getQTime() + " Total Time Elapsed is :- " +
         queryResponse.getElapsedTime() + " Count result :- " + count);
       return count;
@@ -151,7 +152,7 @@ public abstract class SolrDaoBase {
 
   private void logSolrEvent(String event, SolrQuery solrQuery, SolrResponseBase solrResponseBase) {
     if (event != null) {
-      LOG_PERFORMANCE.info("\n Username :- " + LogSearchContext.getCurrentUsername() + " Event :- " + event + " SolrQuery :- " +
+      performanceLogger.info("\n Username :- " + LogSearchContext.getCurrentUsername() + " Event :- " + event + " SolrQuery :- " +
         solrQuery + "\nQuery Time Execution :- " + solrResponseBase.getQTime() + " Total Time Elapsed is :- " +
         solrResponseBase.getElapsedTime());
     }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
index 5a36599..a58eb20 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
@@ -25,6 +25,8 @@ import org.apache.ambari.logsearch.conf.SolrEventHistoryPropsConfig;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
@@ -41,8 +43,6 @@ import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.util.JavaBinCodec;
 import org.apache.solr.common.util.NamedList;
 import org.codehaus.jettison.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.scheduling.annotation.Scheduled;
 
 import java.io.IOException;
@@ -57,7 +57,7 @@ import javax.inject.Inject;
 
 public class SolrSchemaFieldDao {
 
-  private static final Logger LOG = LoggerFactory.getLogger(SolrSchemaFieldDao.class);
+  private static final Logger logger = LogManager.getLogger(SolrSchemaFieldDao.class);
 
   private static final int RETRY_SECOND = 30;
 
@@ -97,7 +97,7 @@ public class SolrSchemaFieldDao {
   private void populateSchemaFields(CloudSolrClient solrClient, Map<String, String> schemaFieldNameMap,
       Map<String, String> schemaFieldTypeMap) {
     if (solrClient != null) {
-      LOG.debug("Started thread to get fields for collection=" + solrClient.getDefaultCollection());
+      logger.debug("Started thread to get fields for collection=" + solrClient.getDefaultCollection());
       List<LukeResponse> lukeResponses = null;
       SchemaResponse schemaResponse = null;
       try {
@@ -108,22 +108,22 @@ public class SolrSchemaFieldDao {
         schemaRequest.setPath("/schema");
         schemaResponse = schemaRequest.process(solrClient);
         
-        LOG.debug("populateSchemaFields() collection=" + solrClient.getDefaultCollection() + ", luke=" + lukeResponses +
+        logger.debug("populateSchemaFields() collection=" + solrClient.getDefaultCollection() + ", luke=" + lukeResponses +
             ", schema= " + schemaResponse);
       } catch (SolrException | SolrServerException | IOException e) {
-        LOG.error("Error occured while popuplating field. collection=" + solrClient.getDefaultCollection(), e);
+        logger.error("Error occured while popuplating field. collection=" + solrClient.getDefaultCollection(), e);
       }
 
       if (schemaResponse != null) {
         extractSchemaFieldsName(lukeResponses, schemaResponse, schemaFieldNameMap, schemaFieldTypeMap);
-        LOG.debug("Populate fields for collection " + solrClient.getDefaultCollection()+ " was successful, next update it after " +
+        logger.debug("Populate fields for collection " + solrClient.getDefaultCollection()+ " was successful, next update it after " +
             solrEventHistoryPropsConfig.getPopulateIntervalMins() + " minutes");
         retryCount = 0;
         skipCount = (solrEventHistoryPropsConfig.getPopulateIntervalMins() * 60) / RETRY_SECOND - 1;
       }
       else {
         retryCount++;
-        LOG.error("Error while populating fields for collection " + solrClient.getDefaultCollection() + ", retryCount=" + retryCount);
+        logger.error("Error while populating fields for collection " + solrClient.getDefaultCollection() + ", retryCount=" + retryCount);
       }
     }
   }
@@ -147,7 +147,7 @@ public class SolrSchemaFieldDao {
           lukeResponse.setResponse(lukeData);
           lukeResponses.add(lukeResponse);
         } catch (IOException e) {
-          LOG.error("Exception during getting luke responses", e);
+          logger.error("Exception during getting luke responses", e);
         }
       }
     }
@@ -200,7 +200,7 @@ public class SolrSchemaFieldDao {
         schemaFieldTypeMap.putAll(_schemaFieldTypeMap);
       }
     } catch (Exception e) {
-      LOG.error(e + "Credentials not specified in logsearch.properties " + MessageEnums.ERROR_SYSTEM);
+      logger.error(e + "Credentials not specified in logsearch.properties " + MessageEnums.ERROR_SYSTEM);
     }
   }
 
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserDao.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserDao.java
index 3e915a4..b61eb25 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserDao.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserDao.java
@@ -18,31 +18,26 @@
  */
 package org.apache.ambari.logsearch.dao;
 
-import static java.util.Collections.singletonList;
-
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 
 import org.apache.ambari.logsearch.conf.AuthPropsConfig;
-import org.apache.ambari.logsearch.util.CommonUtil;
 import org.apache.ambari.logsearch.util.FileUtil;
 import org.apache.ambari.logsearch.util.JSONUtil;
-import org.apache.ambari.logsearch.web.model.Privilege;
-import org.apache.ambari.logsearch.web.model.Role;
 import org.apache.ambari.logsearch.web.model.User;
 import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-import org.springframework.security.core.GrantedAuthority;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Repository;
 
 @Repository
 public class UserDao {
-  private static final Logger logger = Logger.getLogger(UserDao.class);
+  private static final Logger logger = LogManager.getLogger(UserDao.class);
 
   private static final String USER_NAME = "username";
   private static final String PASSWORD = "password";
@@ -53,6 +48,9 @@ public class UserDao {
   private AuthPropsConfig authPropsConfig;
 
   @Inject
+  private PasswordEncoder passwordEncoder;
+
+  @Inject
   private RoleDao roleDao;
 
   private ArrayList<HashMap<String, String>> userList = null;
@@ -125,7 +123,7 @@ public class UserDao {
       String username = user.get(USER_NAME);
       String password = user.get(PASSWORD);
       if (StringUtils.isNotBlank(password)) {
-        encPassword = CommonUtil.encryptPassword(username, password);
+        encPassword = passwordEncoder.encode(password);
         user.put(PASSWORD, "");
         user.put(ENC_PASSWORD, encPassword);
         isUpdated = true;
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ACLHandler.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ACLHandler.java
index fde176f..8bab62c 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ACLHandler.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ACLHandler.java
@@ -20,38 +20,38 @@ package org.apache.ambari.logsearch.handler;
 
 import org.apache.ambari.logsearch.conf.SolrPropsConfig;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.SolrZooKeeper;
 import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.data.ACL;
 import org.apache.zookeeper.data.Stat;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.List;
 
 public class ACLHandler implements SolrZkRequestHandler<Boolean> {
 
-  private static final Logger LOG = LoggerFactory.getLogger(ACLHandler.class);
+  private static final Logger logger = LogManager.getLogger(ACLHandler.class);
 
   @Override
   public Boolean handle(CloudSolrClient solrClient, SolrPropsConfig solrPropsConfig) throws Exception {
     List<ACL> aclsToSetList = solrPropsConfig.getZkAcls();
     if (CollectionUtils.isNotEmpty(aclsToSetList)) {
-      LOG.info("Setting acls for '{}' collection...", solrPropsConfig.getCollection());
+      logger.info("Setting acls for '{}' collection...", solrPropsConfig.getCollection());
       SolrZkClient zkClient = solrClient.getZkStateReader().getZkClient();
       SolrZooKeeper solrZooKeeper = zkClient.getSolrZooKeeper();
       String collectionPath = String.format("/collections/%s", solrPropsConfig.getCollection());
       String configsPath = String.format("/configs/%s", solrPropsConfig.getConfigName());
       List<ACL> collectionAcls = solrZooKeeper.getACL(collectionPath, new Stat());
       if (isRefreshAclsNeeded(aclsToSetList, collectionAcls)) {
-        LOG.info("Acls differs for {}, update acls.", collectionPath);
+        logger.info("Acls differs for {}, update acls.", collectionPath);
         setRecursivelyOn(solrZooKeeper, collectionPath, aclsToSetList);
       }
       List<ACL> configsAcls = solrZooKeeper.getACL(configsPath, new Stat());
       if (isRefreshAclsNeeded(aclsToSetList, configsAcls)) {
-        LOG.info("Acls differs for {}, update acls.", configsPath);
+        logger.info("Acls differs for {}, update acls.", configsPath);
         setRecursivelyOn(solrZooKeeper, configsPath, aclsToSetList);
       }
     }
@@ -77,7 +77,7 @@ public class ACLHandler implements SolrZkRequestHandler<Boolean> {
       for (ACL newAcl : aclList2) {
         if (acl.getId() != null && acl.getId().getId().equals(newAcl.getId().getId())
           && acl.getPerms() != newAcl.getPerms()) {
-          LOG.info("ACL for '{}' differs: '{}' on znode, should be '{}'",
+          logger.info("ACL for '{}' differs: '{}' on znode, should be '{}'",
             acl.getId().getId(), acl.getPerms(), newAcl.getPerms());
           return true;
         }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/AbstractSolrConfigHandler.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/AbstractSolrConfigHandler.java
index f58b29d..dff06e3 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/AbstractSolrConfigHandler.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/AbstractSolrConfigHandler.java
@@ -25,16 +25,16 @@ import java.io.IOException;
 import java.nio.file.FileSystems;
 
 import org.apache.ambari.logsearch.conf.SolrPropsConfig;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkConfigManager;
 import org.apache.zookeeper.KeeperException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public abstract class AbstractSolrConfigHandler implements SolrZkRequestHandler<Boolean> {
 
-  private static final Logger LOG = LoggerFactory.getLogger(AbstractSolrConfigHandler.class);
+  private static final Logger logger = LogManager.getLogger(AbstractSolrConfigHandler.class);
 
   private File configSetFolder;
 
@@ -87,7 +87,7 @@ public abstract class AbstractSolrConfigHandler implements SolrZkRequestHandler<
   }
 
   public boolean doIfConfigExists(SolrPropsConfig solrPropsConfig, SolrZkClient zkClient, String separator) throws IOException {
-    LOG.info("Config set exists for '{}' collection. Refreshing it if needed...", solrPropsConfig.getCollection());
+    logger.info("Config set exists for '{}' collection. Refreshing it if needed...", solrPropsConfig.getCollection());
     try {
       File[] listOfFiles = getConfigSetFolder().listFiles();
       if (listOfFiles == null)
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/CreateCollectionHandler.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/CreateCollectionHandler.java
index a13c27f..26dfc62 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/CreateCollectionHandler.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/CreateCollectionHandler.java
@@ -23,6 +23,8 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.HttpClientUtil;
@@ -32,8 +34,6 @@ import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
 import org.apache.solr.common.cloud.ZkStateReader;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import javax.ws.rs.core.Response;
 import java.io.IOException;
@@ -46,7 +46,7 @@ import static org.apache.ambari.logsearch.solr.SolrConstants.CommonLogConstants.
 
 public class CreateCollectionHandler implements SolrZkRequestHandler<Boolean> {
 
-  private static final Logger LOG = LoggerFactory.getLogger(CreateCollectionHandler.class);
+  private static final Logger logger = LogManager.getLogger(CreateCollectionHandler.class);
 
   private static final String MODIFY_COLLECTION_QUERY = "/admin/collections?action=MODIFYCOLLECTION&collection=%s&%s=%d";
   private static final String MAX_SHARDS_PER_NODE = "maxShardsPerNode";
@@ -71,7 +71,7 @@ public class CreateCollectionHandler implements SolrZkRequestHandler<Boolean> {
 
   private boolean setupCollectionsWithImplicitRouting(CloudSolrClient solrClient, SolrPropsConfig solrPropsConfig, List<String> allCollectionList)
     throws Exception {
-    LOG.info("setupCollectionsWithImplicitRouting(). collectionName=" + solrPropsConfig.getCollection()
+    logger.info("setupCollectionsWithImplicitRouting(). collectionName=" + solrPropsConfig.getCollection()
       + ", numberOfShards=" + solrPropsConfig.getNumberOfShards());
 
     // Default is true, because if the collection and shard is already there, then it will return true
@@ -85,7 +85,7 @@ public class CreateCollectionHandler implements SolrZkRequestHandler<Boolean> {
 
     // Check if collection is already in zookeeper
     if (!allCollectionList.contains(solrPropsConfig.getCollection())) {
-      LOG.info("Creating collection " + solrPropsConfig.getCollection() + ", shardsList=" + shardsList);
+      logger.info("Creating collection " + solrPropsConfig.getCollection() + ", shardsList=" + shardsList);
       CollectionAdminRequest.Create collectionCreateRequest = CollectionAdminRequest.createCollection(
           solrPropsConfig.getCollection(), solrPropsConfig.getConfigName(), solrPropsConfig.getNumberOfShards(),
           solrPropsConfig.getReplicationFactor());
@@ -97,13 +97,13 @@ public class CreateCollectionHandler implements SolrZkRequestHandler<Boolean> {
       CollectionAdminResponse createResponse = collectionCreateRequest.process(solrClient);
       if (createResponse.getStatus() != 0) {
         returnValue = false;
-        LOG.error("Error creating collection. collectionName=" + solrPropsConfig.getCollection()
+        logger.error("Error creating collection. collectionName=" + solrPropsConfig.getCollection()
           + ", shardsList=" + shardsList +", response=" + createResponse);
       } else {
-        LOG.info("Created collection " + solrPropsConfig.getCollection() + ", shardsList=" + shardsList);
+        logger.info("Created collection " + solrPropsConfig.getCollection() + ", shardsList=" + shardsList);
       }
     } else {
-      LOG.info("Collection " + solrPropsConfig.getCollection() + " is already there. Will check whether it has the required shards");
+      logger.info("Collection " + solrPropsConfig.getCollection() + " is already there. Will check whether it has the required shards");
       Collection<Slice> slices = getSlices(solrClient, solrPropsConfig);
       Collection<String> existingShards = getShards(slices, solrPropsConfig);
       if (existingShards.size() < shardsList.size()) {
@@ -111,25 +111,25 @@ public class CreateCollectionHandler implements SolrZkRequestHandler<Boolean> {
           updateMaximumNumberOfShardsPerCore(slices, solrPropsConfig);
         } catch (Throwable t) {
           returnValue = false;
-          LOG.error(String.format("Exception during updating collection (%s)", t));
+          logger.error(String.format("Exception during updating collection (%s)", t));
         }
       }
       for (String shard : shardsList) {
         if (!existingShards.contains(shard)) {
           try {
-            LOG.info("Going to add Shard " + shard + " to collection " + solrPropsConfig.getCollection());
+            logger.info("Going to add Shard " + shard + " to collection " + solrPropsConfig.getCollection());
             CollectionAdminRequest.CreateShard createShardRequest =
                 CollectionAdminRequest.createShard(solrPropsConfig.getCollection(), shard);
             CollectionAdminResponse response = createShardRequest.process(solrClient);
             if (response.getStatus() != 0) {
-              LOG.error("Error creating shard " + shard + " in collection " + solrPropsConfig.getCollection() + ", response=" + response);
+              logger.error("Error creating shard " + shard + " in collection " + solrPropsConfig.getCollection() + ", response=" + response);
               returnValue = false;
               break;
             } else {
-              LOG.info("Successfully created shard " + shard + " in collection " + solrPropsConfig.getCollection());
+              logger.info("Successfully created shard " + shard + " in collection " + solrPropsConfig.getCollection());
             }
           } catch (Throwable t) {
-            LOG.error("Error creating shard " + shard + " in collection " + solrPropsConfig.getCollection(), t);
+            logger.error("Error creating shard " + shard + " in collection " + solrPropsConfig.getCollection(), t);
             returnValue = false;
             break;
           }
@@ -143,11 +143,11 @@ public class CreateCollectionHandler implements SolrZkRequestHandler<Boolean> {
       throws SolrServerException, IOException {
 
     if (allCollectionList.contains(solrPropsConfig.getCollection())) {
-      LOG.info("Collection " + solrPropsConfig.getCollection() + " is already there. Won't create it");
+      logger.info("Collection " + solrPropsConfig.getCollection() + " is already there. Won't create it");
       return true;
     }
 
-    LOG.info("Creating collection " + solrPropsConfig.getCollection() + ", numberOfShards=" + solrPropsConfig.getNumberOfShards() +
+    logger.info("Creating collection " + solrPropsConfig.getCollection() + ", numberOfShards=" + solrPropsConfig.getNumberOfShards() +
       ", replicationFactor=" + solrPropsConfig.getReplicationFactor());
 
     CollectionAdminRequest.Create collectionCreateRequest = CollectionAdminRequest.createCollection(
@@ -156,10 +156,10 @@ public class CreateCollectionHandler implements SolrZkRequestHandler<Boolean> {
     collectionCreateRequest.setMaxShardsPerNode(calculateMaxShardsPerNode(solrPropsConfig));
     CollectionAdminResponse createResponse = collectionCreateRequest.process(solrClient);
     if (createResponse.getStatus() != 0) {
-      LOG.error("Error creating collection. collectionName=" + solrPropsConfig.getCollection() + ", response=" + createResponse);
+      logger.error("Error creating collection. collectionName=" + solrPropsConfig.getCollection() + ", response=" + createResponse);
       return false;
     } else {
-      LOG.info("Created collection " + solrPropsConfig.getCollection() + ", numberOfShards=" + solrPropsConfig.getNumberOfShards() +
+      logger.info("Created collection " + solrPropsConfig.getCollection() + ", numberOfShards=" + solrPropsConfig.getNumberOfShards() +
         ", replicationFactor=" + solrPropsConfig.getReplicationFactor());
       return true;
     }
@@ -190,7 +190,7 @@ public class CreateCollectionHandler implements SolrZkRequestHandler<Boolean> {
     Collection<String> list = new HashSet<>();
     for (Slice slice : slices) {
       for (Replica replica : slice.getReplicas()) {
-        LOG.info("colName=" + solrPropsConfig.getCollection() + ", slice.name=" + slice.getName() + ", slice.state=" + slice.getState() +
+        logger.info("colName=" + solrPropsConfig.getCollection() + ", slice.name=" + slice.getName() + ", slice.state=" + slice.getState() +
           ", replica.core=" + replica.getStr("core") + ", replica.state=" + replica.getStr("state"));
         list.add(slice.getName());
       }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ListCollectionHandler.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ListCollectionHandler.java
index b2c8e4f..80d6685 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ListCollectionHandler.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ListCollectionHandler.java
@@ -19,19 +19,19 @@
 package org.apache.ambari.logsearch.handler;
 
 import org.apache.ambari.logsearch.conf.SolrPropsConfig;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.response.CollectionAdminResponse;
 import org.apache.solr.common.SolrException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class ListCollectionHandler implements SolrZkRequestHandler<List<String>> {
 
-  private static final Logger LOG = LoggerFactory.getLogger(ListCollectionHandler.class);
+  private static final Logger logger = LogManager.getLogger(ListCollectionHandler.class);
 
   @SuppressWarnings("unchecked")
   @Override
@@ -40,12 +40,12 @@ public class ListCollectionHandler implements SolrZkRequestHandler<List<String>>
       CollectionAdminRequest.List colListReq = new CollectionAdminRequest.List();
       CollectionAdminResponse response = colListReq.process(solrClient);
       if (response.getStatus() != 0) {
-        LOG.error("Error getting collection list from solr.  response=" + response);
+        logger.error("Error getting collection list from solr.  response=" + response);
         return null;
       }
       return (List<String>) response.getResponse().get("collections");
     } catch (SolrException e) {
-      LOG.error("getCollections() operation failed", e);
+      logger.error("getCollections() operation failed", e);
       return new ArrayList<>();
     }
   }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ReloadCollectionHandler.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ReloadCollectionHandler.java
index 601bdba..7659ce0 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ReloadCollectionHandler.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/ReloadCollectionHandler.java
@@ -19,25 +19,25 @@
 package org.apache.ambari.logsearch.handler;
 
 import org.apache.ambari.logsearch.conf.SolrPropsConfig;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class ReloadCollectionHandler implements SolrZkRequestHandler<Boolean> {
 
-  private static final Logger LOG = LoggerFactory.getLogger(ReloadCollectionHandler.class);
+  private static final Logger logger = LogManager.getLogger(ReloadCollectionHandler.class);
 
   @Override
   public Boolean handle(CloudSolrClient solrClient, SolrPropsConfig solrPropsConfig) throws Exception {
     boolean result = false;
     try {
-      LOG.info("Reload collection - '{}'", solrPropsConfig.getCollection());
+      logger.info("Reload collection - '{}'", solrPropsConfig.getCollection());
       CollectionAdminRequest.Reload request = CollectionAdminRequest.reloadCollection(solrPropsConfig.getCollection());
       request.process(solrClient);
       result = true;
     } catch (Exception e) {
-      LOG.error(String.format("Reload collection ('%s') failed.", solrPropsConfig.getCollection()), e);
+      logger.error(String.format("Reload collection ('%s') failed.", solrPropsConfig.getCollection()), e);
     }
     return result;
   }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/UploadConfigurationHandler.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/UploadConfigurationHandler.java
index 2a7590c..b42376d 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/UploadConfigurationHandler.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/handler/UploadConfigurationHandler.java
@@ -29,15 +29,15 @@ import java.util.Arrays;
 import org.apache.ambari.logsearch.conf.SolrPropsConfig;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkConfigManager;
 import org.apache.zookeeper.CreateMode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class UploadConfigurationHandler extends AbstractSolrConfigHandler {
 
-  private static final Logger LOG = LoggerFactory.getLogger(UploadConfigurationHandler.class);
+  private static final Logger logger = LogManager.getLogger(UploadConfigurationHandler.class);
 
   private static final String SOLR_CONFIG_FILE = "solrconfig.xml";
   private static final String[] configFiles = {
@@ -57,7 +57,7 @@ public class UploadConfigurationHandler extends AbstractSolrConfigHandler {
     if (Arrays.equals(FileUtils.readFileToByteArray(file), content))
       return false;
 
-    LOG.info("Solr config file differs ('{}'), upload config set to zookeeper", file.getName());
+    logger.info("Solr config file differs ('{}'), upload config set to zookeeper", file.getName());
     ZkConfigManager zkConfigManager = new ZkConfigManager(zkClient);
     zkConfigManager.uploadConfigDir(getConfigSetFolder().toPath(), solrPropsConfig.getConfigName());
     String filePath = String.format("%s%s%s", getConfigSetFolder(), separator, getConfigFileName());
@@ -68,7 +68,7 @@ public class UploadConfigurationHandler extends AbstractSolrConfigHandler {
 
   @Override
   public void doIfConfigNotExist(SolrPropsConfig solrPropsConfig, ZkConfigManager zkConfigManager) throws IOException {
-    LOG.info("Config set does not exist for '{}' collection. Uploading it to zookeeper...", solrPropsConfig.getCollection());
+    logger.info("Config set does not exist for '{}' collection. Uploading it to zookeeper...", solrPropsConfig.getCollection());
     File[] listOfFiles = getConfigSetFolder().listFiles();
     if (listOfFiles != null) {
       zkConfigManager.uploadConfigDir(getConfigSetFolder().toPath(), solrPropsConfig.getConfigName());
@@ -82,17 +82,17 @@ public class UploadConfigurationHandler extends AbstractSolrConfigHandler {
 
   @Override
   public void uploadMissingConfigFiles(SolrZkClient zkClient, ZkConfigManager zkConfigManager, String configName) throws IOException {
-    LOG.info("Check any of the configs files are missing for config ({})", configName);
+    logger.info("Check any of the configs files are missing for config ({})", configName);
     for (String configFile : configFiles) {
       if ("enumsConfig.xml".equals(configFile) && !hasEnumConfig) {
-        LOG.info("Config file ({}) is not needed for {}", configFile, configName);
+        logger.info("Config file ({}) is not needed for {}", configFile, configName);
         continue;
       }
       String zkPath = String.format("%s/%s", configName, configFile);
       if (zkConfigManager.configExists(zkPath)) {
-        LOG.info("Config file ({}) has already uploaded properly.", configFile);
+        logger.info("Config file ({}) has already uploaded properly.", configFile);
       } else {
-        LOG.info("Config file ({}) is missing. Reupload...", configFile);
+        logger.info("Config file ({}) is missing. Reupload...", configFile);
         FileSystems.getDefault().getSeparator();
         uploadFileToZk(zkClient,
           String.format("%s%s%s", getConfigSetFolder(), FileSystems.getDefault().getSeparator(), configFile),
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/AuditLogsManager.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/AuditLogsManager.java
index 97bda3a..8fe9bcb 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/AuditLogsManager.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/AuditLogsManager.java
@@ -62,7 +62,8 @@ import org.apache.ambari.logsearch.solr.model.SolrComponentTypeLogData;
 import org.apache.ambari.logsearch.util.DownloadUtil;
 import org.apache.ambari.logsearch.util.SolrUtil;
 import org.apache.commons.collections.CollectionUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.response.FacetField.Count;
 import org.apache.solr.client.solrj.response.QueryResponse;
@@ -77,7 +78,7 @@ import freemarker.template.TemplateException;
 
 @Named
 public class AuditLogsManager extends ManagerBase<AuditLogData, AuditLogResponse> {
-  private static final Logger logger = Logger.getLogger(AuditLogsManager.class);
+  private static final Logger logger = LogManager.getLogger(AuditLogsManager.class);
 
   private static final String AUDIT_LOG_TEMPLATE = "audit_log_txt.ftl";
 
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java
index 0782ea2..fda9b1a 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java
@@ -19,13 +19,11 @@
 
 package org.apache.ambari.logsearch.manager;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
 import org.apache.ambari.logsearch.common.LogSearchContext;
-import org.apache.ambari.logsearch.common.MessageEnums;
 import org.apache.ambari.logsearch.dao.EventHistorySolrDao;
 import org.apache.ambari.logsearch.model.request.impl.EventHistoryRequest;
 import org.apache.ambari.logsearch.model.response.EventHistoryData;
@@ -33,9 +31,9 @@ import org.apache.ambari.logsearch.model.response.EventHistoryDataListResponse;
 import org.apache.ambari.logsearch.util.SolrUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrQuery;
-import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.response.FacetField.Count;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.common.SolrDocument;
@@ -57,7 +55,7 @@ import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstan
 @Named
 public class EventHistoryManager extends JsonManagerBase {
 
-  private static final Logger logger = Logger.getLogger(EventHistoryManager.class);
+  private static final Logger logger = LogManager.getLogger(EventHistoryManager.class);
 
   @Inject
   private EventHistorySolrDao eventHistorySolrDao;
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ManagerBase.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ManagerBase.java
index 9ae1961..68a3b9c 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ManagerBase.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ManagerBase.java
@@ -30,7 +30,8 @@ import org.apache.ambari.logsearch.model.response.LogSearchResponse;
 import org.apache.ambari.logsearch.dao.SolrDaoBase;
 import org.apache.ambari.logsearch.util.SolrUtil;
 import org.apache.commons.collections.CollectionUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.response.FacetField;
 import org.apache.solr.client.solrj.response.QueryResponse;
@@ -40,7 +41,7 @@ import org.springframework.data.solr.core.query.SimpleQuery;
 import org.springframework.data.solr.core.query.SolrDataQuery;
 
 public abstract class ManagerBase<LOG_DATA_TYPE extends LogData, SEARCH_RESPONSE extends LogSearchResponse<LOG_DATA_TYPE>> extends JsonManagerBase {
-  private static final Logger logger = Logger.getLogger(ManagerBase.class);
+  private static final Logger logger = LogManager.getLogger(ManagerBase.class);
 
   public ManagerBase() {
     super();
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ServiceLogsManager.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ServiceLogsManager.java
index 3658257..57b33bd 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ServiceLogsManager.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ServiceLogsManager.java
@@ -91,7 +91,8 @@ import org.apache.ambari.logsearch.util.DownloadUtil;
 import org.apache.ambari.logsearch.util.SolrUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.response.FacetField;
 import org.apache.solr.client.solrj.response.FacetField.Count;
@@ -116,7 +117,7 @@ import freemarker.template.TemplateException;
 
 @Named
 public class ServiceLogsManager extends ManagerBase<ServiceLogData, ServiceLogResponse> {
-  private static final Logger logger = Logger.getLogger(ServiceLogsManager.class);
+  private static final Logger logger = LogManager.getLogger(ServiceLogsManager.class);
 
   private static final String SERVICE_LOG_TEMPLATE = "service_log_txt.ftl";
 
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/SessionManager.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/SessionManager.java
index e8b699e..b2cd2bf 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/SessionManager.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/SessionManager.java
@@ -20,7 +20,8 @@ package org.apache.ambari.logsearch.manager;
 
 import org.apache.ambari.logsearch.common.LogSearchContext;
 import org.apache.ambari.logsearch.web.model.User;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.web.authentication.WebAuthenticationDetails;
@@ -30,7 +31,7 @@ import javax.inject.Named;
 @Named
 public class SessionManager {
 
-  private static final Logger logger = Logger.getLogger(SessionManager.class);
+  private static final Logger logger = LogManager.getLogger(SessionManager.class);
 
   public SessionManager() {
     logger.debug("SessionManager created");
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ShipperConfigManager.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ShipperConfigManager.java
index 6119bb2..558dfd8 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ShipperConfigManager.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/ShipperConfigManager.java
@@ -30,10 +30,11 @@ import org.apache.ambari.logsearch.configurer.LogSearchConfigConfigurer;
 import org.apache.ambari.logsearch.configurer.LogLevelManagerFilterConfigurer;
 import org.apache.ambari.logsearch.model.common.LSServerInputConfig;
 import org.apache.ambari.logsearch.model.common.LSServerLogLevelFilterMap;
-import org.apache.log4j.Logger;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.ImmutableMap;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -46,7 +47,7 @@ import javax.ws.rs.core.Response;
 @Named
 public class ShipperConfigManager extends JsonManagerBase {
 
-  private static final Logger logger = Logger.getLogger(ShipperConfigManager.class);
+  private static final Logger logger = LogManager.getLogger(ShipperConfigManager.class);
 
   @Inject
   private LogSearchConfigApiConfig logSearchConfigApiConfig;
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputS3File.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputS3File.java
index 24d25c4..628a940 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputS3File.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/common/LSServerInputS3File.java
@@ -37,6 +37,9 @@ public class LSServerInputS3File extends LSServerInputFileBase {
   @NotNull
   @JsonProperty("s3_secret_key")
   private String s3SecretKey;
+
+  @JsonProperty("s3_endpoint")
+  private String s3Endpoint;
   
   public LSServerInputS3File() {}
   
@@ -45,6 +48,7 @@ public class LSServerInputS3File extends LSServerInputFileBase {
     InputS3FileDescriptor inputS3FileDescriptor = (InputS3FileDescriptor)inputDescriptor;
     this.s3AccessKey = inputS3FileDescriptor.getS3AccessKey();
     this.s3SecretKey = inputS3FileDescriptor.getS3SecretKey();
+    this.s3Endpoint = inputS3FileDescriptor.getS3Endpoint();
   }
 
   public String getS3AccessKey() {
@@ -62,4 +66,12 @@ public class LSServerInputS3File extends LSServerInputFileBase {
   public void setS3SecretKey(String s3SecretKey) {
     this.s3SecretKey = s3SecretKey;
   }
+
+  public String getS3Endpoint() {
+    return s3Endpoint;
+  }
+
+  public void setS3Endpoint(String s3Endpoint) {
+    this.s3Endpoint = s3Endpoint;
+  }
 }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/error/GeneralExceptionMapper.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/error/GeneralExceptionMapper.java
index 81f13fd..703dbad 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/error/GeneralExceptionMapper.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/error/GeneralExceptionMapper.java
@@ -36,8 +36,8 @@ import org.apache.ambari.logsearch.common.StatusMessage;
 import org.apache.ambari.logsearch.manager.AlreadyExistsException;
 import org.apache.ambari.logsearch.manager.MalformedInputException;
 import org.apache.ambari.logsearch.manager.NotFoundException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 
 import com.fasterxml.jackson.core.JsonParseException;
@@ -48,7 +48,7 @@ import com.google.common.collect.Maps;
 @Named
 @Provider
 public class GeneralExceptionMapper implements ExceptionMapper<Exception> {
-  private static final Logger LOG = LoggerFactory.getLogger(GeneralExceptionMapper.class);
+  private static final Logger LOG = LogManager.getLogger(GeneralExceptionMapper.class);
   static final String INTERNAL_SERVER_ERROR_MESSAGE = "Something went wrong, For more details check the logs or configuration.";
 
   private static final Map<Class<? extends Exception>, Response.Status> exceptionStatusCodeMap = Maps.newHashMap();
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/service/UserService.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/service/UserService.java
index ba4431d..86271ce 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/service/UserService.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/service/UserService.java
@@ -18,19 +18,19 @@
  */
 package org.apache.ambari.logsearch.service;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 import org.apache.ambari.logsearch.dao.UserDao;
 import org.apache.ambari.logsearch.web.model.User;
-import org.apache.log4j.Logger;
 
 import javax.inject.Inject;
 
-
 @Service
 public class UserService implements UserDetailsService {
-  private static final Logger logger = Logger.getLogger(UserService.class);
+  private static final Logger logger = LogManager.getLogger(UserService.class);
 
   @Inject
   private UserDao userDao;
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/CommonUtil.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/CommonUtil.java
deleted file mode 100644
index 1cfe469..0000000
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/CommonUtil.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.util;
-
-import java.security.SecureRandom;
-
-import org.springframework.security.authentication.encoding.Md5PasswordEncoder;
-
-public class CommonUtil {
-  private CommonUtil() {
-    throw new UnsupportedOperationException();
-  }
-  
-  private static SecureRandom secureRandom = new SecureRandom();
-  private static int counter = 0;
-
-  public static String genGUI() {
-    return System.currentTimeMillis() + "_" + secureRandom.nextInt(1000) + "_" + counter++;
-  }
-  
-  private static final Md5PasswordEncoder md5Encoder = new Md5PasswordEncoder();
-  public static String encryptPassword(String username, String password) {
-    return md5Encoder.encodePassword(password, username);
-  }
-}
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/FileUtil.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/FileUtil.java
index 5d4efbc..678d338 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/FileUtil.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/FileUtil.java
@@ -22,13 +22,14 @@ package org.apache.ambari.logsearch.util;
 import java.io.File;
 import java.net.URL;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.Chmod;
 import org.apache.tools.ant.types.FileSet;
 
 public class FileUtil {
-  private static final Logger logger = Logger.getLogger(FileUtil.class);
+  private static final Logger logger = LogManager.getLogger(FileUtil.class);
 
   private FileUtil() {
     throw new UnsupportedOperationException();
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/JSONUtil.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/JSONUtil.java
index 5ea6dd2..190f4dc 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/JSONUtil.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/util/JSONUtil.java
@@ -29,7 +29,8 @@ import java.util.List;
 
 import org.apache.ambari.logsearch.manager.MalformedInputException;
 import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONObject;
 
@@ -42,7 +43,7 @@ import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 
 public class JSONUtil {
-  private static final Logger logger = Logger.getLogger(JSONUtil.class);
+  private static final Logger logger = LogManager.getLogger(JSONUtil.class);
 
   private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
   private static final Gson gson = new GsonBuilder().setDateFormat(DATE_FORMAT).create();
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchAuthFailureHandler.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchAuthFailureHandler.java
index fdec8d3..adade5b 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchAuthFailureHandler.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchAuthFailureHandler.java
@@ -24,12 +24,13 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler;
 
 public class LogsearchAuthFailureHandler extends ExceptionMappingAuthenticationFailureHandler {
-  private static final Logger logger = Logger.getLogger(LogsearchAuthFailureHandler.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchAuthFailureHandler.class);
 
   public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception)
       throws IOException, ServletException {
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java
index 2439828..2d6edd2 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/authenticate/LogsearchLogoutSuccessHandler.java
@@ -24,13 +24,14 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
 import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
 
 public class LogsearchLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler {
-    private static final Logger logger = Logger.getLogger(LogsearchLogoutSuccessHandler.class);
+    private static final Logger logger = LogManager.getLogger(LogsearchLogoutSuccessHandler.class);
 
     @Override
     public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchAuthenticationEntryPoint.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchAuthenticationEntryPoint.java
index a328ace..f700bde 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchAuthenticationEntryPoint.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchAuthenticationEntryPoint.java
@@ -25,13 +25,13 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.ambari.logsearch.conf.AuthPropsConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;
 
 public class LogsearchAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
-  private static final Logger logger = LoggerFactory.getLogger(LogsearchAuthenticationEntryPoint.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchAuthenticationEntryPoint.class);
   private final AuthPropsConfig authPropsConfig;
 
   public LogsearchAuthenticationEntryPoint(String loginFormUrl, AuthPropsConfig authPropsConfig) {
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchFilter.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchFilter.java
index 98e02b3..c258dc5 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchFilter.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchFilter.java
@@ -32,13 +32,13 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.ambari.logsearch.common.StatusMessage;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.web.util.matcher.RequestMatcher;
 
 public class LogsearchFilter implements Filter {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogsearchFilter.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchFilter.class);
 
   private final RequestMatcher requestMatcher;
   private final StatusProvider statusProvider;
@@ -62,7 +62,7 @@ public class LogsearchFilter implements Filter {
     if (requestMatcher.matches(request)) {
       StatusMessage errorResponse = statusProvider.getStatusMessage(request.getRequestURI());
       if (errorResponse != null) {
-        LOG.info("{} request is filtered out: {}", request.getRequestURL(), errorResponse.getMessage());
+        logger.info("{} request is filtered out: {}", request.getRequestURL(), errorResponse.getMessage());
         HttpServletResponse resp = (HttpServletResponse) servletResponse;
         resp.setStatus(errorResponse.getStatusCode());
         resp.setContentType("application/json");
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java
index 7096780..bcb21eb 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKRBAuthenticationFilter.java
@@ -43,8 +43,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.ambari.logsearch.conf.LogSearchSpnegoConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.authentication.AbstractAuthenticationToken;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -66,9 +66,8 @@ import org.springframework.security.web.authentication.WebAuthenticationDetails;
 import org.springframework.security.web.util.matcher.NegatedRequestMatcher;
 import org.springframework.security.web.util.matcher.RequestMatcher;
 
-
 public class LogsearchKRBAuthenticationFilter extends LogsearchKrbFilter {
-  private static final Logger logger = LoggerFactory.getLogger(LogsearchKRBAuthenticationFilter.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchKRBAuthenticationFilter.class);
 
   @Inject
   private LogSearchSpnegoConfig logSearchSpnegoConfig;
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKrbFilter.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKrbFilter.java
index 3677d11..3443c6b 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKrbFilter.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchKrbFilter.java
@@ -27,8 +27,8 @@ import org.apache.hadoop.security.authentication.server.AuthenticationToken;
 import org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler;
 import org.apache.hadoop.security.authentication.server.PseudoAuthenticationHandler;
 import org.apache.hadoop.security.authentication.util.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -51,7 +51,7 @@ import static org.apache.ambari.logsearch.common.LogSearchConstants.LOGSEARCH_SE
 
 public class LogsearchKrbFilter implements Filter {
 
-  private static Logger logger = LoggerFactory.getLogger(LogsearchKrbFilter.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchKrbFilter.class);
 
   /**
    * Constant for the property that specifies the configuration prefix.
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java
index fed86e8..2f3583e 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchSecurityContextFormationFilter.java
@@ -19,6 +19,7 @@
 package org.apache.ambari.logsearch.web.filters;
 
 import java.io.IOException;
+import java.security.SecureRandom;
 
 import javax.inject.Inject;
 import javax.servlet.FilterChain;
@@ -32,9 +33,9 @@ import javax.servlet.http.HttpSession;
 
 import org.apache.ambari.logsearch.common.LogSearchContext;
 import org.apache.ambari.logsearch.manager.SessionManager;
-import org.apache.ambari.logsearch.util.CommonUtil;
 import org.apache.ambari.logsearch.web.model.User;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.authentication.AnonymousAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
@@ -42,11 +43,13 @@ import org.springframework.web.filter.GenericFilterBean;
 
 public class LogsearchSecurityContextFormationFilter extends GenericFilterBean {
 
-  static Logger logger = Logger.getLogger(LogsearchSecurityContextFormationFilter.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchSecurityContextFormationFilter.class);
 
   public static final String LOGSEARCH_SC_SESSION_KEY = "LOGSEARCH_SECURITY_CONTEXT";
   public static final String USER_AGENT = "User-Agent";
 
+  private static SecureRandom secureRandom = new SecureRandom();
+
   @Inject
   SessionManager sessionManager;
 
@@ -80,7 +83,7 @@ public class LogsearchSecurityContextFormationFilter extends GenericFilterBean {
         }
         if (msaCookie == null) {
           HttpServletResponse httpResponse = (HttpServletResponse) response;
-          msaCookie = CommonUtil.genGUI();
+          msaCookie = System.currentTimeMillis() + "_" + secureRandom.nextInt(1000);
           Cookie cookie = new Cookie("msa", msaCookie);
           // TODO: Need to revisit this
           cookie.setMaxAge(Integer.MAX_VALUE);
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchTrustedProxyFilter.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchTrustedProxyFilter.java
index 0737ee0..33cfee3 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchTrustedProxyFilter.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchTrustedProxyFilter.java
@@ -21,8 +21,8 @@ package org.apache.ambari.logsearch.web.filters;
 import org.apache.ambari.logsearch.conf.AuthPropsConfig;
 import org.apache.ambari.logsearch.dao.RoleDao;
 import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.authentication.AbstractAuthenticationToken;
 import org.springframework.security.authentication.AnonymousAuthenticationToken;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -57,7 +57,7 @@ import java.util.List;
  */
 public class LogsearchTrustedProxyFilter extends AbstractAuthenticationProcessingFilter {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogsearchTrustedProxyFilter.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchTrustedProxyFilter.class);
 
   private static final String TRUSTED_PROXY_KNOX_HEADER = "X-Forwarded-For";
 
@@ -73,11 +73,11 @@ public class LogsearchTrustedProxyFilter extends AbstractAuthenticationProcessin
     String doAsUserName = request.getParameter("doAs");
     final List<GrantedAuthority> authorities = RoleDao.createDefaultAuthorities();
     final UserDetails principal = new User(doAsUserName, "", authorities);
-    final Authentication finalAuthentication = new UsernamePasswordAuthenticationToken(principal, "", authorities);
+    final AbstractAuthenticationToken finalAuthentication = new UsernamePasswordAuthenticationToken(principal, "", authorities);
     WebAuthenticationDetails webDetails = new WebAuthenticationDetails(request);
-    ((AbstractAuthenticationToken) finalAuthentication).setDetails(webDetails);
+    finalAuthentication.setDetails(webDetails);
     SecurityContextHolder.getContext().setAuthentication(finalAuthentication);
-    LOG.info("Logged into Log Search User as doAsUser = {}", doAsUserName);
+    logger.info("Logged into Log Search User as doAsUser = {}", doAsUserName);
     return finalAuthentication;
   }
 
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUsernamePasswordAuthenticationFilter.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUsernamePasswordAuthenticationFilter.java
index e20c0fa..04dd671 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUsernamePasswordAuthenticationFilter.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUsernamePasswordAuthenticationFilter.java
@@ -24,13 +24,14 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.web.authentication.RememberMeServices;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 
 public class LogsearchUsernamePasswordAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
-  private static final Logger logger = Logger.getLogger(LogsearchUsernamePasswordAuthenticationFilter.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchUsernamePasswordAuthenticationFilter.class);
 
   public void setRememberMeServices(RememberMeServices rememberMeServices) {
     super.setRememberMeServices(rememberMeServices);
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/NoServletContext.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/NoServletContext.java
index f1663bc..d9c269a 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/NoServletContext.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/NoServletContext.java
@@ -76,6 +76,36 @@ public class NoServletContext implements ServletContext {
   }
 
   @Override
+  public int getSessionTimeout() {
+    return 0;
+  }
+
+  @Override
+  public void setSessionTimeout(int i) {
+
+  }
+
+  @Override
+  public String getRequestCharacterEncoding() {
+    return null;
+  }
+
+  @Override
+  public void setRequestCharacterEncoding(String s) {
+
+  }
+
+  @Override
+  public String getResponseCharacterEncoding() {
+    return null;
+  }
+
+  @Override
+  public void setResponseCharacterEncoding(String s) {
+
+  }
+
+  @Override
   public SessionCookieConfig getSessionCookieConfig() {
     return null;
   }
@@ -253,19 +283,24 @@ public class NoServletContext implements ServletContext {
   }
 
   @Override
-  public javax.servlet.ServletRegistration.Dynamic addServlet(
+  public ServletRegistration.Dynamic addServlet(
       String servletName, Class<? extends Servlet> servletClass) {
     return null;
   }
 
   @Override
-  public javax.servlet.ServletRegistration.Dynamic addServlet(
+  public ServletRegistration.Dynamic addJspFile(String s, String s1) {
+    return null;
+  }
+
+  @Override
+  public ServletRegistration.Dynamic addServlet(
       String servletName, Servlet servlet) {
     return null;
   }
 
   @Override
-  public javax.servlet.ServletRegistration.Dynamic addServlet(
+  public ServletRegistration.Dynamic addServlet(
       String servletName, String className) {
     return null;
   }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/listener/LogSearchSessionListener.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/listener/LogSearchSessionListener.java
index 55101db..0e0df28 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/listener/LogSearchSessionListener.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/listener/LogSearchSessionListener.java
@@ -18,15 +18,15 @@
  */
 package org.apache.ambari.logsearch.web.listener;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
 
 public class LogSearchSessionListener implements HttpSessionListener {
 
-  private Logger LOG = LoggerFactory.getLogger(LogSearchSessionListener.class);
+  private Logger logger = LogManager.getLogger(LogSearchSessionListener.class);
 
   private int numberOfSessions = 0;
 
@@ -35,7 +35,7 @@ public class LogSearchSessionListener implements HttpSessionListener {
     synchronized (this) {
       numberOfSessions++;
     }
-    LOG.info(String.format("New session is created (Id: %s). Number of sessions: %d", event.getSession().getId(), numberOfSessions));
+    logger.info(String.format("New session is created (Id: %s). Number of sessions: %d", event.getSession().getId(), numberOfSessions));
   }
 
   @Override
@@ -43,6 +43,6 @@ public class LogSearchSessionListener implements HttpSessionListener {
     synchronized (this) {
       numberOfSessions--;
     }
-    LOG.info(String.format("Session destroyed (Id: %s). Number of sessions: %d", event.getSession().getId(), numberOfSessions));
+    logger.info(String.format("Session destroyed (Id: %s). Number of sessions: %d", event.getSession().getId(), numberOfSessions));
   }
 }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java
index cfa948d..a52a887 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProvider.java
@@ -20,22 +20,23 @@ package org.apache.ambari.logsearch.web.security;
 
 import java.util.HashMap;
 
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.apache.ambari.logsearch.util.JSONUtil;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.ldap.authentication.LdapAuthenticationProvider;
 import org.springframework.security.web.authentication.WebAuthenticationDetails;
 
 @Named
 public class LogsearchAuthenticationProvider extends LogsearchAbstractAuthenticationProvider {
-  private static final Logger logger = Logger .getLogger(LogsearchAuthenticationProvider.class);
-  private static final Logger auditLogger = Logger.getLogger("org.apache.ambari.logsearch.audit");
+  private static final Logger logger = LogManager.getLogger(LogsearchAuthenticationProvider.class);
+  private static final Logger auditLogger = LogManager.getLogger("org.apache.ambari.logsearch.audit");
 
   @Inject
   private LogsearchFileAuthenticationProvider fileAuthenticationProvider;
@@ -47,6 +48,7 @@ public class LogsearchAuthenticationProvider extends LogsearchAbstractAuthentica
   private LogsearchSimpleAuthenticationProvider simpleAuthenticationProvider;
 
   @Inject
+  @Nullable
   private LogsearchLdapAuthenticationProvider ldapAuthenticationProvider;
 
   @Override
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
index 4449da1..c4c64b0 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
@@ -29,7 +29,8 @@ import org.apache.ambari.logsearch.conf.AuthPropsConfig;
 import org.apache.ambari.logsearch.util.JSONUtil;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
@@ -43,7 +44,7 @@ import org.springframework.security.core.AuthenticationException;
 @Named
 public class LogsearchExternalServerAuthenticationProvider extends LogsearchAbstractAuthenticationProvider {
 
-  private static Logger LOG = Logger.getLogger(LogsearchExternalServerAuthenticationProvider.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchExternalServerAuthenticationProvider.class);
 
   private static enum PrivilegeInfo {
     PERMISSION_LABEL("permission_label"),
@@ -81,7 +82,7 @@ public class LogsearchExternalServerAuthenticationProvider extends LogsearchAbst
   @Override
   public Authentication authenticate(Authentication authentication) throws AuthenticationException {
     if (!authPropsConfig.isAuthExternalEnabled()) {
-      LOG.debug("external server auth is disabled.");
+      logger.debug("external server auth is disabled.");
       return authentication;
     }
     
@@ -100,11 +101,11 @@ public class LogsearchExternalServerAuthenticationProvider extends LogsearchAbst
       String finalLoginUrl = authPropsConfig.getExternalAuthLoginUrl().replace("$USERNAME", username);
       String responseObj = (String) externalServerClient.sendGETRequest(finalLoginUrl, String.class, username, password);
       if (!isAllowedRole(responseObj)) {
-        LOG.error(username + " doesn't have permission");
+        logger.error(username + " doesn't have permission");
         throw new BadCredentialsException("Invalid User");
       }
     } catch (Exception e) {
-      LOG.error("Login failed for username :" + username + " Error :" + e.getLocalizedMessage());
+      logger.error("Login failed for username :" + username + " Error :" + e.getLocalizedMessage());
       throw new BadCredentialsException("Bad credentials");
     }
     authentication = new UsernamePasswordAuthenticationToken(username, password, getAuthorities());
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java
index 8c12e0a..0b759ba 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProvider.java
@@ -20,11 +20,12 @@ package org.apache.ambari.logsearch.web.security;
 
 import java.util.Collection;
 
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.ambari.logsearch.conf.AuthPropsConfig;
-import org.apache.ambari.logsearch.util.CommonUtil;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
@@ -32,6 +33,7 @@ import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.password.PasswordEncoder;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -39,7 +41,7 @@ import javax.inject.Named;
 @Named
 public class LogsearchFileAuthenticationProvider extends LogsearchAbstractAuthenticationProvider {
 
-  private static final Logger logger = Logger.getLogger(LogsearchFileAuthenticationProvider.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchFileAuthenticationProvider.class);
 
   @Inject
   private AuthPropsConfig authPropsConfig;
@@ -47,6 +49,9 @@ public class LogsearchFileAuthenticationProvider extends LogsearchAbstractAuthen
   @Inject
   private UserDetailsService userDetailsService;
 
+  @Inject
+  private PasswordEncoder passwordEncoder;
+
   @Override
   public Authentication authenticate(Authentication authentication) throws AuthenticationException {
     if (!authPropsConfig.isAuthFileEnabled()) {
@@ -75,14 +80,19 @@ public class LogsearchFileAuthenticationProvider extends LogsearchAbstractAuthen
       logger.error("Password can't be null or empty.");
       throw new BadCredentialsException("Password can't be null or empty.");
     }
-    String encPassword = CommonUtil.encryptPassword(username, password);
-    if (!encPassword.equals(user.getPassword())) {
+    //String encPassword = passwordEncoder.encode(password);
+    if (!passwordEncoder.matches(password, user.getPassword())) {
       logger.error("Wrong password for user=" + username);
       throw new BadCredentialsException("Wrong password.");
     }
     
     Collection<? extends GrantedAuthority> authorities = user.getAuthorities();
-    authentication = new UsernamePasswordAuthenticationToken(username, encPassword, authorities);
+    authentication = new UsernamePasswordAuthenticationToken(username, user.getPassword(), authorities);
     return authentication;
   }
+
+  @VisibleForTesting
+  public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
+    this.passwordEncoder = passwordEncoder;
+  }
 }
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java
index 5cf81db..55912cc 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchLdapAuthenticationProvider.java
@@ -21,8 +21,8 @@ package org.apache.ambari.logsearch.web.security;
 import org.apache.ambari.logsearch.conf.AuthPropsConfig;
 import org.apache.ambari.logsearch.dao.RoleDao;
 import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
@@ -36,7 +36,7 @@ import java.util.Collection;
 
 public class LogsearchLdapAuthenticationProvider extends LdapAuthenticationProvider {
 
-  private static final Logger LOG = LoggerFactory.getLogger(LogsearchLdapAuthenticationProvider.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchLdapAuthenticationProvider.class);
 
   @Inject
   private AuthPropsConfig authPropsConfig;
@@ -48,7 +48,7 @@ public class LogsearchLdapAuthenticationProvider extends LdapAuthenticationProvi
   @Override
   public Authentication authenticate(Authentication authentication) throws AuthenticationException {
     if (!authPropsConfig.isAuthLdapEnabled()) {
-      LOG.debug("LDAP auth is disabled.");
+      logger.debug("LDAP auth is disabled.");
       return authentication;
     }
     authentication = super.authenticate(authentication);
diff --git a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java
index 3506264..e5c13f9 100644
--- a/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java
+++ b/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchSimpleAuthenticationProvider.java
@@ -22,7 +22,8 @@ import org.apache.ambari.logsearch.conf.AuthPropsConfig;
 import org.apache.ambari.logsearch.web.model.User;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
@@ -34,7 +35,7 @@ import javax.inject.Named;
 @Named
 public class LogsearchSimpleAuthenticationProvider extends LogsearchAbstractAuthenticationProvider {
 
-  private static final Logger logger = Logger.getLogger(LogsearchSimpleAuthenticationProvider.class);
+  private static final Logger logger = LogManager.getLogger(LogsearchSimpleAuthenticationProvider.class);
 
   @Inject
   private AuthPropsConfig authPropsConfig;
diff --git a/ambari-logsearch-server/src/main/resources/log4j.xml b/ambari-logsearch-server/src/main/resources/log4j.xml
deleted file mode 100644
index 40868fa..0000000
--- a/ambari-logsearch-server/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,86 +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
-  "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/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 [%t] %-5p %C{6} (%F:%L) - %m%n"/>
-    </layout>
-  </appender>
-
-  <appender name="rolling_file_json"
-            class="org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender">
-    <param name="file" value="target/logs/logsearch-app.json"/>
-    <param name="Threshold" value="info"/>
-    <param name="append" value="true"/>
-    <param name="maxFileSize" value="10MB"/>
-    <param name="maxBackupIndex" value="10"/>
-    <layout class="org.apache.ambari.logsearch.appender.LogsearchConversion"/>
-  </appender>
-
-  <appender name="audit_rolling_file_json"
-            class="org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender">
-    <param name="file" value="target/logs/logsearch-audit.json"/>
-    <param name="Threshold" value="info"/>
-    <param name="append" value="true"/>
-    <param name="maxFileSize" value="10MB"/>
-    <param name="maxBackupIndex" value="10"/>
-    <layout class="org.apache.ambari.logsearch.appender.LogsearchConversion"/>
-  </appender>
-
-  <appender name="performance_analyzer_json"
-            class="org.apache.ambari.logsearch.appender.LogsearchRollingFileAppender">
-    <param name="file" value="target/logs/logsearch-performance.json"/>
-    <param name="Threshold" value="info"/>
-    <param name="append" value="true"/>
-    <param name="maxFileSize" value="10MB"/>
-    <param name="maxBackupIndex" value="10"/>
-    <layout class="org.apache.ambari.logsearch.appender.LogsearchConversion"/>
-  </appender>
-
-  <category name="org.apache.solr.common.cloud.ZkStateReader" additivity="false">
-    <priority value="error"/>
-    <appender-ref ref="console"/>
-  </category>
-
-  <logger name="org.apache.ambari.logsearch.audit"
-          additivity="true">
-    <appender-ref ref="audit_rolling_file_json"/>
-  </logger>
-
-  <logger name="org.apache.ambari.logsearch.performance"
-          additivity="false">
-    <appender-ref ref="performance_analyzer_json"/>
-  </logger>
-
-  <logger name="org.apache.ambari.logsearch" additivity="false">
-    <appender-ref ref="console"/>
-    <appender-ref ref="rolling_file_json"/>
-  </logger>
-
-  <root>
-    <level value="info"/>
-    <appender-ref ref="console"/>
-    <appender-ref ref="rolling_file_json"/>
-  </root>
-
-</log4j:configuration>
diff --git a/ambari-logsearch-server/src/main/resources/log4j2.yml b/ambari-logsearch-server/src/main/resources/log4j2.yml
new file mode 100644
index 0000000..81a26cd
--- /dev/null
+++ b/ambari-logsearch-server/src/main/resources/log4j2.yml
@@ -0,0 +1,106 @@
+# 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.
+Configutation:
+  name: LogSearchConfig
+  packages: org.apache.ambari.logsearch.layout
+
+  Properties:
+    Property:
+      name: log-path
+      value: "target/logs"
+
+  Appenders:
+
+    Console:
+      name: Console_Appender
+      target: SYSTEM_OUT
+      PatternLayout:
+        pattern: "%d [%t] %-5p %C{6} (%F:%L) - %m%n"
+
+    RollingFile:
+    - name: RollingFile_Appender
+      fileName: ${log-path}/logsearch.log
+      filePattern: "logsearch.log.%d{yyyy-MM-dd-hh-mm}.gz"
+      PatternLayout:
+        pattern: "%d [%t] %-5p %C{6} (%F:%L) - %m%n"
+      Policies:
+        SizeBasedTriggeringPolicy:
+          size: 10 MB
+      DefaultRollOverStrategy:
+        max: 10
+    - name: RollingFileJson_Appender
+      fileName: ${log-path}/logsearch.json
+      filePattern: "logsearch.json.%d{yyyy-MM-dd-hh-mm}.gz"
+      ignoreExceptions: false
+      LogSearchJsonLayout:
+        charset: UTF-8
+      Policies:
+        SizeBasedTriggeringPolicy:
+          size: 10 MB
+      DefaultRollOverStrategy:
+        max: 10
+    - name: AuditFile_Appender
+      fileName: ${log-path}/logsearch-audit.json
+      filePattern: "logsearch-audit.json.%d{yyyy-MM-dd-hh-mm}.gz"
+      ignoreExceptions: false
+      LogSearchJsonLayout:
+        charset: UTF-8
+      Policies:
+        SizeBasedTriggeringPolicy:
+          size: 10 MB
+      DefaultRollOverStrategy:
+        max: 10
+    - name: PerformanceFile_Appender
+      fileName: ${log-path}/logsearch-performance.json
+      filePattern: "logsearch-perf.json.%d{yyyy-MM-dd-hh-mm}.gz"
+      LogSearchJsonLayout:
+        charset: UTF-8
+      Policies:
+        SizeBasedTriggeringPolicy:
+          size: 10 MB
+      DefaultRollOverStrategy:
+        max: 10
+
+  Loggers:
+
+    Root:
+      level: info
+      AppenderRef:
+      - ref: Console_Appender
+      - ref: RollingFile_Appender
+      - ref: RollingFileJson_Appender
+
+    Logger:
+    - name: org.apache.solr.common.cloud.ZkStateReader
+      additivity: false
+      level: error
+      AppenderRef:
+      - ref: Console_Appender
+    - name: org.apache.ambari.logsearch.performance
+      additivity: false
+      level: info
+      AppenderRef:
+      - ref: PerformanceFile_Appender
+        level: info
+      - ref: Console_Appender
+        level: info
+    - name: org.apache.ambari.logsearch.audit
+      additivity: false
+      level: info
+      AppenderRef:
+      - ref: AuditFile_Appender
+        level: info
+      - ref: Console_Appender
+        level: info
\ No newline at end of file
diff --git a/ambari-logsearch-server/src/main/scripts/logsearch.sh b/ambari-logsearch-server/src/main/scripts/logsearch.sh
index a51775d..629e8f2 100755
--- a/ambari-logsearch-server/src/main/scripts/logsearch.sh
+++ b/ambari-logsearch-server/src/main/scripts/logsearch.sh
@@ -78,7 +78,7 @@ else
   LOGSEARCH_GC_LOGFILE="$LOG_PATH_WITHOUT_SLASH/$LOGSEARCH_GC_LOGFILE"
 fi
 
-LOGSEARCH_GC_OPTS="-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$LOGSEARCH_GC_LOGFILE"
+LOGSEARCH_GC_OPTS="-Xlog:gc*:file=$LOGSEARCH_GC_LOGFILE:time"
 
 function print_usage() {
   cat << EOF
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/AuditLogRequestConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/AuditLogRequestConverterTest.java
index 2ccc741..a34b872 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/AuditLogRequestConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/AuditLogRequestConverterTest.java
@@ -47,8 +47,8 @@ public class AuditLogRequestConverterTest extends AbstractRequestConverterTest {
     SimpleQuery simpleQuery = underTest.convert(request);
     SolrQuery queryResult = new DefaultQueryParser().doConstructSolrQuery(simpleQuery);
     // THEN
-    assertEquals("?q=*%3A*&start=0&rows=25&fq=repo%3A%28logsearch_app+OR+secure_log%29&fq=-repo%3A%28hst_agent+OR+system_message%29" +
-        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=cluster%3Acl1&fq=reqUser%3A%28joe+OR+steven%29&sort=evtTime+desc%2Cseq_num+desc",
+    assertEquals("?q=*%3A*&start=0&rows=25&fq=repo%3A%28logsearch_app+%22OR%22+secure_log%29&fq=-repo%3A%28hst_agent+%22OR%22+system_message%29" +
+        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=cluster%3Acl1&fq=reqUser%3A%28joe+%22OR%22+steven%29&sort=evtTime+desc%2Cseq_num+desc",
       queryResult.toQueryString());
   }
 
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/AuditServiceLoadRequestQueryConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/AuditServiceLoadRequestQueryConverterTest.java
index 9d3d145..988be98 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/AuditServiceLoadRequestQueryConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/AuditServiceLoadRequestQueryConverterTest.java
@@ -45,8 +45,8 @@ public class AuditServiceLoadRequestQueryConverterTest extends AbstractRequestCo
     SolrQuery solrQuery = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
     assertEquals("?q=*%3A*&rows=0&fq=evtTime%3A%5B2016-09-13T22%3A00%3A01.000Z+TO+2016-09-14T22%3A00%3A01.000Z%5D" +
-      "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=repo%3A%28logsearch_app+OR+secure_log%29" +
-      "&fq=-repo%3A%28hst_agent+OR+system_message%29&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=10&facet.field=repo", solrQuery.toQueryString());
+      "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=repo%3A%28logsearch_app+%22OR%22+secure_log%29" +
+      "&fq=-repo%3A%28hst_agent+%22OR%22+system_message%29&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=10&facet.field=repo", solrQuery.toQueryString());
   }
 
   @Test
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/BaseServiceLogRequestQueryConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/BaseServiceLogRequestQueryConverterTest.java
index 45745da..e788bdc 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/BaseServiceLogRequestQueryConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/BaseServiceLogRequestQueryConverterTest.java
@@ -53,9 +53,9 @@ public class BaseServiceLogRequestQueryConverterTest extends AbstractRequestConv
     SolrQuery solrQuery = defaultQueryParser.doConstructSolrQuery(query);
     SolrUtil.removeDoubleOrTripleEscapeFromFilters(solrQuery);
     // THEN
-    assertEquals("?q=*%3A*&start=0&rows=25&fq=type%3A%28logsearch_app+OR+secure_log%29&fq=-type%3A%28hst_agent+OR+system_message%29" +
+    assertEquals("?q=*%3A*&start=0&rows=25&fq=type%3A%28logsearch_app+%22OR%22+secure_log%29&fq=-type%3A%28hst_agent+%22OR%22+system_message%29" +
         "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=cluster%3Acl1&fq=path%3A%5C%2Fvar%5C%2Flog%5C%2Fmyfile%5C-%5C*%5C-hdfs.log" +
-        "&fq=type%3Acomponent&fq=level%3A%28FATAL+OR+ERROR+OR+WARN+OR+UNKNOWN%29&fq=host%3A%28logsearch1.com+OR+logsearch2.com%29" +
+        "&fq=type%3Acomponent&fq=level%3A%28FATAL+%22OR%22+ERROR+%22OR%22+WARN+%22OR%22+UNKNOWN%29&fq=host%3A%28logsearch1.com+%22OR%22+logsearch2.com%29" +
         "&fq=logtime%3A%5B2016-09-13T22%3A00%3A01.000Z+TO+2016-09-14T22%3A00%3A01.000Z%5D&sort=logtime+desc%2Cseq_num+desc",
       solrQuery.toQueryString());
   }
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/FieldAuditLogRequestQueryConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/FieldAuditLogRequestQueryConverterTest.java
index 669ef1a..da6baac 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/FieldAuditLogRequestQueryConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/FieldAuditLogRequestQueryConverterTest.java
@@ -46,8 +46,8 @@ public class FieldAuditLogRequestQueryConverterTest extends AbstractRequestConve
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
     assertEquals("?q=*%3A*&rows=0&fq=evtTime%3A%5B2016-09-13T22%3A00%3A01.000Z+TO+2016-09-14T22%3A00%3A01.000Z%5D" +
-        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=repo%3A%28logsearch_app+OR+secure_log%29" +
-        "&fq=-repo%3A%28hst_agent+OR+system_message%29&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=-1&facet.pivot=myfield%2Crepo",
+        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=repo%3A%28logsearch_app+%22OR%22+secure_log%29" +
+        "&fq=-repo%3A%28hst_agent+%22OR%22+system_message%29&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=-1&facet.pivot=myfield%2Crepo",
       query.toQueryString());
   }
 
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogAnyGraphRequestConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogAnyGraphRequestConverterTest.java
index 02819f1..4091949 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogAnyGraphRequestConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogAnyGraphRequestConverterTest.java
@@ -46,8 +46,8 @@ public class ServiceLogAnyGraphRequestConverterTest extends AbstractRequestConve
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
     assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B2016-09-13T22%3A00%3A01.000Z+TO+2016-09-14T22%3A00%3A01.000Z%5D" +
-        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=type%3A%28logsearch_app+OR+secure_log%29" +
-        "&fq=-type%3A%28hst_agent+OR+system_message%29&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=-1&facet.field=level",
+        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=type%3A%28logsearch_app+%22OR%22+secure_log%29" +
+        "&fq=-type%3A%28hst_agent+%22OR%22+system_message%29&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=-1&facet.field=level",
       query.toQueryString());
   }
 
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogComponentLevelRequestQueryConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogComponentLevelRequestQueryConverterTest.java
index f395c88..a417c07 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogComponentLevelRequestQueryConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogComponentLevelRequestQueryConverterTest.java
@@ -47,8 +47,8 @@ public class ServiceLogComponentLevelRequestQueryConverterTest extends AbstractR
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
     assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B2016-09-13T22%3A00%3A01.000Z+TO+2016-09-14T22%3A00%3A01.000Z%5D" +
-        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=type%3A%28logsearch_app+OR+secure_log%29" +
-        "&fq=-type%3A%28hst_agent+OR+system_message%29&fq=type%3Amycomponent&fq=level%3A%28WARN+OR+ERROR+OR+FATAL%29&fq=cluster%3Acl1" +
+        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=type%3A%28logsearch_app+%22OR%22+secure_log%29" +
+        "&fq=-type%3A%28hst_agent+%22OR%22+system_message%29&fq=type%3Amycomponent&fq=level%3A%28WARN+%22OR%22+ERROR+%22OR%22+FATAL%29&fq=cluster%3Acl1" +
         "&facet=true&facet.mincount=1&facet.limit=-1&facet.sort=index&facet.pivot=type%2Clevel",
       query.toQueryString());
   }
@@ -61,7 +61,7 @@ public class ServiceLogComponentLevelRequestQueryConverterTest extends AbstractR
     // WHEN
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
-    assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B*+TO+*%5D&fq=level%3A%28WARN+OR+ERROR+OR+FATAL%29&facet=true" +
+    assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B*+TO+*%5D&fq=level%3A%28WARN+%22OR%22+ERROR+%22OR%22+FATAL%29&facet=true" +
       "&facet.mincount=1&facet.limit=-1&facet.sort=index&facet.pivot=type%2Clevel", query.toQueryString());
   }
 }
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogComponentRequestFacetQueryConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogComponentRequestFacetQueryConverterTest.java
index 8ece866..24af013 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogComponentRequestFacetQueryConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogComponentRequestFacetQueryConverterTest.java
@@ -47,8 +47,8 @@ public class ServiceLogComponentRequestFacetQueryConverterTest extends AbstractR
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
     assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B2016-09-13T22%3A00%3A01.000Z+TO+2016-09-14T22%3A00%3A01.000Z%5D" +
-        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=type%3A%28logsearch_app+OR+secure_log%29" +
-        "&fq=-type%3A%28hst_agent+OR+system_message%29&fq=type%3Amycomponent&fq=level%3A%28WARN+OR+ERROR+OR+FATAL%29" +
+        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=type%3A%28logsearch_app+%22OR%22+secure_log%29" +
+        "&fq=-type%3A%28hst_agent+%22OR%22+system_message%29&fq=type%3Amycomponent&fq=level%3A%28WARN+%22OR%22+ERROR+%22OR%22+FATAL%29" +
         "&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=-1&facet.sort=index&facet.pivot=type%2Chost%2Clevel&facet.pivot=type%2Clevel",
       query.toQueryString());
   }
@@ -61,7 +61,7 @@ public class ServiceLogComponentRequestFacetQueryConverterTest extends AbstractR
     // WHEN
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
-    assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B*+TO+*%5D&fq=level%3A%28WARN+OR+ERROR+OR+FATAL%29" +
+    assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B*+TO+*%5D&fq=level%3A%28WARN+%22OR%22+ERROR+%22OR%22+FATAL%29" +
         "&facet=true&facet.mincount=1&facet.limit=-1&facet.sort=index&facet.pivot=type%2Chost%2Clevel&facet.pivot=type%2Clevel",
       query.toQueryString());
   }
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogLevelCountRequestQueryConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogLevelCountRequestQueryConverterTest.java
index 54d3435..6326325 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogLevelCountRequestQueryConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogLevelCountRequestQueryConverterTest.java
@@ -45,8 +45,8 @@ public class ServiceLogLevelCountRequestQueryConverterTest extends AbstractReque
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
     assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B2016-09-13T22%3A00%3A01.000Z+TO+2016-09-14T22%3A00%3A01.000Z%5D" +
-        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=type%3A%28logsearch_app+OR+secure_log%29" +
-        "&fq=-type%3A%28hst_agent+OR+system_message%29&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=-1&facet.field=level",
+        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=type%3A%28logsearch_app+%22OR%22+secure_log%29" +
+        "&fq=-type%3A%28hst_agent+%22OR%22+system_message%29&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=-1&facet.field=level",
       query.toQueryString());
   }
 
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogTreeRequestFacetQueryConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogTreeRequestFacetQueryConverterTest.java
index 7c6c9fd..b7ced1d 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogTreeRequestFacetQueryConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogTreeRequestFacetQueryConverterTest.java
@@ -45,8 +45,8 @@ public class ServiceLogTreeRequestFacetQueryConverterTest extends AbstractReques
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
     assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B2016-09-13T22%3A00%3A01.000Z+TO+2016-09-14T22%3A00%3A01.000Z%5D" +
-        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=type%3A%28logsearch_app+OR+secure_log%29" +
-        "&fq=-type%3A%28hst_agent+OR+system_message%29&fq=level%3A%28WARN+OR+ERROR+OR+FATAL%29&fq=cluster%3Acl1&facet=true" +
+        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=type%3A%28logsearch_app+%22OR%22+secure_log%29" +
+        "&fq=-type%3A%28hst_agent+%22OR%22+system_message%29&fq=level%3A%28WARN+%22OR%22+ERROR+%22OR%22+FATAL%29&fq=cluster%3Acl1&facet=true" +
         "&facet.mincount=1&facet.limit=-1&facet.sort=index&facet.pivot=host%2Ctype%2Clevel&facet.pivot=host%2Clevel",
       query.toQueryString());
   }
@@ -59,7 +59,7 @@ public class ServiceLogTreeRequestFacetQueryConverterTest extends AbstractReques
     // WHEN
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
-    assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B*+TO+*%5D&fq=level%3A%28WARN+OR+ERROR+OR+FATAL%29" +
+    assertEquals("?q=*%3A*&rows=0&fq=logtime%3A%5B*+TO+*%5D&fq=level%3A%28WARN+%22OR%22+ERROR+%22OR%22+FATAL%29" +
         "&facet=true&facet.mincount=1&facet.limit=-1&facet.sort=index&facet.pivot=host%2Ctype%2Clevel&facet.pivot=host%2Clevel",
       query.toQueryString());
   }
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogTruncatedRequestQueryConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogTruncatedRequestQueryConverterTest.java
index b2b7014..532afb4 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogTruncatedRequestQueryConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/ServiceLogTruncatedRequestQueryConverterTest.java
@@ -47,8 +47,8 @@ public class ServiceLogTruncatedRequestQueryConverterTest extends AbstractReques
     // WHEN
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
-    assertEquals("?q=*%3A*&start=0&rows=10&fq=type%3A%28logsearch_app+OR+secure_log%29" +
-        "&fq=-type%3A%28hst_agent+OR+system_message%29&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage" +
+    assertEquals("?q=*%3A*&start=0&rows=10&fq=type%3A%28logsearch_app+%22OR%22+secure_log%29" +
+        "&fq=-type%3A%28hst_agent+%22OR%22+system_message%29&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage" +
         "&fq=cluster%3Acl1&sort=logtime+desc%2Cseq_num+desc",
       query.toQueryString());
   }
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/TopFieldAuditLogRequestQueryConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/TopFieldAuditLogRequestQueryConverterTest.java
index b1b4d49..81b7f73 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/TopFieldAuditLogRequestQueryConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/TopFieldAuditLogRequestQueryConverterTest.java
@@ -47,8 +47,8 @@ public class TopFieldAuditLogRequestQueryConverterTest extends AbstractRequestCo
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
     assertEquals("?q=*%3A*&rows=0&fq=evtTime%3A%5B2016-09-13T22%3A00%3A01.000Z+TO+2016-09-14T22%3A00%3A01.000Z%5D" +
-        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=repo%3A%28logsearch_app+OR+secure_log%29" +
-        "&fq=-repo%3A%28hst_agent+OR+system_message%29&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=10&facet.pivot=myfield%2Crepo",
+        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=repo%3A%28logsearch_app+%22OR%22+secure_log%29" +
+        "&fq=-repo%3A%28hst_agent+%22OR%22+system_message%29&fq=cluster%3Acl1&facet=true&facet.mincount=1&facet.limit=10&facet.pivot=myfield%2Crepo",
       query.toQueryString());
   }
 
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserExportRequestQueryConverterTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserExportRequestQueryConverterTest.java
index 1ec6414..11be1bc 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserExportRequestQueryConverterTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserExportRequestQueryConverterTest.java
@@ -46,8 +46,8 @@ public class UserExportRequestQueryConverterTest extends AbstractRequestConverte
     SolrQuery query = new DefaultQueryParser().doConstructSolrQuery(underTest.convert(request));
     // THEN
     assertEquals("?q=*%3A*&rows=0&fq=evtTime%3A%5B2016-09-13T22%3A00%3A01.000Z+TO+2016-09-14T22%3A00%3A01.000Z%5D" +
-        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=repo%3A%28logsearch_app+OR+secure_log%29" +
-        "&fq=-repo%3A%28hst_agent+OR+system_message%29&facet=true&facet.mincount=1&facet.limit=-1&facet.pivot=reqUser%2Crepo&facet.pivot=resource%2Crepo",
+        "&fq=log_message%3Amyincludemessage&fq=-log_message%3Amyexcludemessage&fq=repo%3A%28logsearch_app+%22OR%22+secure_log%29" +
+        "&fq=-repo%3A%28hst_agent+%22OR%22+system_message%29&facet=true&facet.mincount=1&facet.limit=-1&facet.pivot=reqUser%2Crepo&facet.pivot=resource%2Crepo",
       query.toQueryString());
   }
 
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProviderTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProviderTest.java
index a6817da..fd27fca 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProviderTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchAuthenticationProviderTest.java
@@ -19,6 +19,7 @@
 package org.apache.ambari.logsearch.web.security;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.springframework.security.authentication.TestingAuthenticationToken;
 import org.springframework.security.core.Authentication;
@@ -68,7 +69,8 @@ public class LogsearchAuthenticationProviderTest {
     simpleProviderField.setAccessible(true);
     simpleProviderField.set(provider, mockSimpleProvider);
   }
-  
+
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void testFileAuthenticates() {
     Authentication authentication = new TestingAuthenticationToken("principal", "credentials");
@@ -81,7 +83,8 @@ public class LogsearchAuthenticationProviderTest {
     
     verify(mockFileProvider, mockSimpleProvider, mockExternalServerProvider);
   }
-  
+
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void testExternalAuthenticates() {
     Authentication authentication = new TestingAuthenticationToken("principal", "credentials");
@@ -95,7 +98,8 @@ public class LogsearchAuthenticationProviderTest {
     
     verify(mockFileProvider, mockSimpleProvider, mockExternalServerProvider);
   }
-  
+
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void testSimpleAuthenticates() {
     Authentication authentication = new TestingAuthenticationToken("principal", "credentials");
@@ -110,7 +114,8 @@ public class LogsearchAuthenticationProviderTest {
     
     verify(mockFileProvider, mockSimpleProvider, mockExternalServerProvider);
   }
-  
+
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void testNoOneAuthenticates() {
     Authentication authentication = new TestingAuthenticationToken("principal", "credentials");
@@ -125,7 +130,8 @@ public class LogsearchAuthenticationProviderTest {
     
     verify(mockFileProvider, mockSimpleProvider, mockExternalServerProvider);
   }
-  
+
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void testOneExceptionAndAuthenticates() {
     Authentication authentication = new TestingAuthenticationToken("principal", "credentials");
@@ -138,7 +144,8 @@ public class LogsearchAuthenticationProviderTest {
     
     verify(mockFileProvider, mockSimpleProvider, mockExternalServerProvider);
   }
-  
+
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void testOneExceptionNoOneAuthenticates() {
     Authentication authentication = new TestingAuthenticationToken("principal", "credentials");
@@ -157,7 +164,8 @@ public class LogsearchAuthenticationProviderTest {
     
     verify(mockFileProvider, mockSimpleProvider, mockExternalServerProvider);
   }
-  
+
+  @Ignore("Until EasyMock 3.7 upgrade - waiting for release")
   @Test
   public void testTwoExceptionNoOneAuthenticates() {
     Authentication authentication = new TestingAuthenticationToken("principal", "credentials");
diff --git a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProviderTest.java b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProviderTest.java
index 407cc83..31cf22b 100644
--- a/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProviderTest.java
+++ b/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/web/security/LogsearchFileAuthenticationProviderTest.java
@@ -19,7 +19,6 @@
 package org.apache.ambari.logsearch.web.security;
 
 import org.apache.ambari.logsearch.conf.AuthPropsConfig;
-import org.apache.ambari.logsearch.util.CommonUtil;
 import org.apache.ambari.logsearch.web.model.User;
 import org.junit.Before;
 import org.junit.Test;
@@ -29,17 +28,19 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
 
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertSame;
-import static junit.framework.Assert.assertTrue;
+import static junit.framework.Assert.fail;
 import static org.easymock.EasyMock.strictMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
 import java.lang.reflect.Field;
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 public class LogsearchFileAuthenticationProviderTest {
... 455 lines suppressed ...