ATLAS-4739: Log4j migration - Replace DailyRollingFileAppender with RollingFileAppender

Signed-off-by: Sidharth Mishra <sidmishra@apache.org>
diff --git a/notification/src/main/java/org/apache/atlas/hook/FailedMessagesLogger.java b/notification/src/main/java/org/apache/atlas/hook/FailedMessagesLogger.java
index 5488c1c..2118ba6 100644
--- a/notification/src/main/java/org/apache/atlas/hook/FailedMessagesLogger.java
+++ b/notification/src/main/java/org/apache/atlas/hook/FailedMessagesLogger.java
@@ -20,13 +20,18 @@
 
 
 import org.apache.atlas.notification.LogConfigUtils;
-import org.apache.log4j.DailyRollingFileAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.RollingFileAppender;
+import org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy;
+import org.apache.logging.log4j.core.config.AppenderRef;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.LoggerConfig;
+import org.apache.logging.log4j.core.layout.PatternLayout;
 
 import java.io.File;
-import java.io.IOException;
 
 /**
  * A logger wrapper that can be used to write messages that failed to be sent to a log file.
@@ -35,9 +40,13 @@
 
     public static final String PATTERN_SPEC_TIMESTAMP_MESSAGE_NEWLINE = "%d{ISO8601} %m%n";
     public static final String DATE_PATTERN = ".yyyy-MM-dd";
+    private PatternLayout PATTERN_LAYOUT = PatternLayout.newBuilder().withPattern(PATTERN_SPEC_TIMESTAMP_MESSAGE_NEWLINE).build();
 
-    private final Logger logger = Logger.getLogger("org.apache.atlas.hook.FailedMessagesLogger");
     private String failedMessageFile;
+    private String loggerName = "org.apache.atlas.hook.FailedMessagesLogger";
+    private final Logger logger = LogManager.getLogger(loggerName);
+    private static final LoggerContext ctx = (LoggerContext)LogManager.getContext(false);
+    private static final Configuration config = ctx.getConfiguration();
 
     public FailedMessagesLogger(String failedMessageFile) {
         this.failedMessageFile = failedMessageFile;
@@ -49,18 +58,26 @@
             return;
         }
         String absolutePath = new File(rootLoggerDirectory, failedMessageFile).getAbsolutePath();
-        try {
-            DailyRollingFileAppender failedLogFilesAppender = new DailyRollingFileAppender(
-                    new PatternLayout(PATTERN_SPEC_TIMESTAMP_MESSAGE_NEWLINE), absolutePath, DATE_PATTERN);
-            logger.addAppender(failedLogFilesAppender);
-            logger.setLevel(Level.ERROR);
-            logger.setAdditivity(false);
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
+
+        RollingFileAppender.Builder builder = RollingFileAppender.newBuilder()
+                .setName("RollingFileAppender")
+                .withFileName(absolutePath)
+                .withFilePattern(absolutePath+"-%d{yyyy-MM-dd}-%i")
+                .setLayout(PATTERN_LAYOUT).withPolicy(TimeBasedTriggeringPolicy.createPolicy("1", "true"));
+        RollingFileAppender rollingFileAppender = builder.build();
+        rollingFileAppender.start();
+        config.addAppender(rollingFileAppender);
+
+        AppenderRef ref = AppenderRef.createAppenderRef(loggerName, Level.ERROR,null);
+        AppenderRef[] refs = new AppenderRef[] {ref};
+        LoggerConfig loggerConfig =
+                LoggerConfig.createLogger(false, Level.ERROR, loggerName, "true", refs, null, config, null);
+        loggerConfig.addAppender(rollingFileAppender, null, null);
+        config.addLogger(loggerName, loggerConfig);
+        ctx.updateLoggers();
     }
 
     public void log(String message) {
         logger.error(message);
     }
-}
+}
\ No newline at end of file
diff --git a/notification/src/main/java/org/apache/atlas/notification/LogConfigUtils.java b/notification/src/main/java/org/apache/atlas/notification/LogConfigUtils.java
index ea9c1ce..f2e50c5 100644
--- a/notification/src/main/java/org/apache/atlas/notification/LogConfigUtils.java
+++ b/notification/src/main/java/org/apache/atlas/notification/LogConfigUtils.java
@@ -18,11 +18,13 @@
 package org.apache.atlas.notification;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.logging.log4j.core.Appender;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
-import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Map;
 
 public class LogConfigUtils {
     private static final Logger LOG = LoggerFactory.getLogger(LogConfigUtils.class);
@@ -104,11 +106,10 @@
         String ret = StringUtils.EMPTY;
 
         try {
-            org.apache.log4j.Logger rootLogger   = org.apache.log4j.Logger.getRootLogger();
-            Enumeration             allAppenders = rootLogger.getAllAppenders();
+            org.apache.logging.log4j.Logger rootLogger   = org.apache.logging.log4j.LogManager.getRootLogger();
+            Map<String, Appender> allAppenders = ((org.apache.logging.log4j.core.Logger) rootLogger).getAppenders();
 
             if (allAppenders != null) {
-                String drfaFilename = null;
                 String rfaFilename  = null;
                 String faFilename   = null;
 
@@ -116,33 +117,26 @@
                 //   1. first DailyRollingFileAppender
                 //   2. first RollingFileAppender, if no DailyRollingFileAppender is found
                 //   3. first FileAppender, if no RollingFileAppender is found
-                while (allAppenders.hasMoreElements()) {
-                    Object appender = allAppenders.nextElement();
+                Iterator<Map.Entry<String, Appender>> iterator = allAppenders.entrySet().iterator();
+                while (iterator.hasNext()) {
+                    Object appender = iterator.next().getValue();
 
-                    if (drfaFilename == null && appender instanceof org.apache.log4j.DailyRollingFileAppender) {
-                        org.apache.log4j.DailyRollingFileAppender fileAppender = (org.apache.log4j.DailyRollingFileAppender) appender;
+                    if (rfaFilename == null && appender instanceof org.apache.logging.log4j.core.appender.RollingFileAppender) {
+                        org.apache.logging.log4j.core.appender.RollingFileAppender fileAppender = (org.apache.logging.log4j.core.appender.RollingFileAppender) appender;
 
-                        drfaFilename = fileAppender.getFile();
+                        rfaFilename = fileAppender.getFileName();
 
-                        LOG.debug("DailyRollingFileAppender(name={}, file={})", fileAppender.getName(), fileAppender.getFile());
-                    } else if (rfaFilename == null && appender instanceof org.apache.log4j.RollingFileAppender) {
-                        org.apache.log4j.RollingFileAppender fileAppender = (org.apache.log4j.RollingFileAppender) appender;
+                        LOG.debug("RollingFileAppender(name={}, file={}, append={})", fileAppender.getName(), fileAppender.getFileName());
+                    } else if (faFilename == null && appender instanceof org.apache.logging.log4j.core.appender.FileAppender) {
+                        org.apache.logging.log4j.core.appender.FileAppender fileAppender = (org.apache.logging.log4j.core.appender.FileAppender) appender;
 
-                        rfaFilename = fileAppender.getFile();
+                        faFilename = fileAppender.getFileName();
 
-                        LOG.debug("RollingFileAppender(name={}, file={}, append={})", fileAppender.getName(), fileAppender.getFile());
-                    } else if (faFilename == null && appender instanceof org.apache.log4j.FileAppender) {
-                        org.apache.log4j.FileAppender fileAppender = (org.apache.log4j.FileAppender) appender;
-
-                        faFilename = fileAppender.getFile();
-
-                        LOG.debug("FileAppender(name={}, file={}, append={})", fileAppender.getName(), fileAppender.getFile());
+                        LOG.debug("FileAppender(name={}, file={}, append={})", fileAppender.getName(), fileAppender.getFileName());
                     }
                 }
 
-                if (drfaFilename != null) {
-                    ret = drfaFilename;
-                } else if (rfaFilename != null) {
+                if (rfaFilename != null) {
                     ret = rfaFilename;
                 } else if (faFilename != null) {
                     ret = faFilename;
@@ -151,9 +145,9 @@
 
             LOG.info("getFileAppenderPathApproach2(): ret={}", ret);
         } catch (Throwable t) {
-            LOG.error("getFileAppenderPathApproach2(): failed to get log path from org.apache.log4j.", t);
+            LOG.error("getFileAppenderPathApproach2(): failed to get log path from org.apache.logging.log4j.", t);
         }
 
         return ret;
     }
-}
+}
\ No newline at end of file