[ 
https://issues.apache.org/jira/browse/APEXCORE-792?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16241502#comment-16241502
 ] 

ASF GitHub Bot commented on APEXCORE-792:
-----------------------------------------

DT-Priyanka closed pull request #587: APEXCORE-792 LoggerUtil should allow to 
get LogFileInformation for a specified logger
URL: https://github.com/apache/apex-core/pull/587
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/engine/src/main/java/com/datatorrent/stram/util/LoggerUtil.java 
b/engine/src/main/java/com/datatorrent/stram/util/LoggerUtil.java
index c6caa20d31..30a92753a7 100644
--- a/engine/src/main/java/com/datatorrent/stram/util/LoggerUtil.java
+++ b/engine/src/main/java/com/datatorrent/stram/util/LoggerUtil.java
@@ -313,8 +313,21 @@ public static synchronized void 
changeLoggersLevel(@Nonnull Map<String, String>
    */
   public static LogFileInformation getLogFileInformation()
   {
-    FileAppender fileAppender = getFileAppender();
-    if (shouldFetchLogFileInformation(fileAppender)) {
+    return getLogFileInformation(LogManager.getRootLogger());
+  }
+
+  public static LogFileInformation getLogFileInformation(org.slf4j.Logger 
logger)
+  {
+    return getLogFileInformation(logger == null ? null : 
LogManager.getLogger(logger.getName()));
+  }
+
+  public static LogFileInformation getLogFileInformation(Logger logger)
+  {
+    if (logger == null) {
+      logger = LogManager.getRootLogger();
+    }
+    FileAppender fileAppender = getFileAppender(logger);
+    if (fileAppender != null) {
       File logFile = new File(fileAppender.getFile());
       LogFileInformation logFileInfo = new 
LogFileInformation(fileAppender.getFile(), logFile.length());
       return logFileInfo;
@@ -322,37 +335,33 @@ public static LogFileInformation getLogFileInformation()
     return null;
   }
 
-  private static FileAppender getFileAppender()
+  private static FileAppender getFileAppender(Logger logger)
   {
-    Enumeration<Appender> e = LogManager.getRootLogger().getAllAppenders();
+    Enumeration e = logger.getAllAppenders();
     FileAppender fileAppender = null;
     while (e.hasMoreElements()) {
-      Appender appender = e.nextElement();
+      Object appender = e.nextElement();
       if (appender instanceof FileAppender) {
         if (fileAppender == null) {
           fileAppender = (FileAppender)appender;
         } else {
           //skip fetching log file information if we have multiple file 
Appenders
-          return null;
+          fileAppender = null;
+          break;
         }
       }
     }
-    return fileAppender;
-  }
-
-  /*
-   * We should return log file information only if,
-   * we have single file Appender, the logging level of appender is set to 
level Error or above and immediateFlush is set to true.
-   * In future we should be able to enhance this feature to support multiple 
file appenders.
-   */
-  private static boolean shouldFetchLogFileInformation(FileAppender 
fileAppender)
-  {
-    if (fileAppender != null && isErrorLevelEnable(fileAppender) && 
fileAppender.getImmediateFlush()) {
-      return true;
+    /*
+     * We should return log file information only if,
+     * we have single file Appender, the logging level of appender is set to 
level Error or above and immediateFlush is set to true.
+     * In future we should be able to enhance this feature to support multiple 
file appenders.
+     */
+    if (fileAppender == null || !fileAppender.getImmediateFlush() || 
!fileAppender.isAsSevereAsThreshold(Level.ERROR)) {
+      LoggerUtil.logger.warn(
+          "Log information is unavailable. To enable log information 
log4j/logging should be configured with single FileAppender that has 
immediateFlush set to true and log level set to ERROR or greater.");
+      return null;
     }
-    logger.warn(
-        "Log information is unavailable. To enable log information 
log4j/logging should be configured with single FileAppender that has 
immediateFlush set to true and log level set to ERROR or greater.");
-    return false;
+    return fileAppender;
   }
 
   private static boolean isErrorLevelEnable(FileAppender fileAppender)
diff --git 
a/engine/src/test/java/com/datatorrent/stram/util/LogFileInformationTest.java 
b/engine/src/test/java/com/datatorrent/stram/util/LogFileInformationTest.java
index 32c56c4213..61e994e555 100644
--- 
a/engine/src/test/java/com/datatorrent/stram/util/LogFileInformationTest.java
+++ 
b/engine/src/test/java/com/datatorrent/stram/util/LogFileInformationTest.java
@@ -22,25 +22,25 @@
 import java.io.IOException;
 
 import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.slf4j.LoggerFactory;
 
-import org.apache.commons.io.FileUtils;
 import org.apache.log4j.Level;
+import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.apache.log4j.PatternLayout;
 import org.apache.log4j.RollingFileAppender;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 public class LogFileInformationTest
 {
   private static final String APPENDER_NAME = "rfa";
-  private static final org.slf4j.Logger logger = 
LoggerFactory.getLogger(LogFileInformationTest.class);
+  private static final Logger logger = 
LogManager.getLogger(LogFileInformationTest.class);
   private static String logFileName;
 
   @BeforeClass
@@ -51,61 +51,56 @@ public static void beforeClass() throws IOException
     RollingFileAppender rfa = new RollingFileAppender(new 
PatternLayout("%d{ISO8601} [%t] %-5p %c{2} %M - %m%n"),
         logFileName);
     rfa.setName(APPENDER_NAME);
-    Logger.getRootLogger().addAppender(rfa);
-  }
-
-  @Before
-  public void setup()
-  {
-    LoggerUtil.initializeLogger();
+    logger.addAppender(rfa);
   }
 
   @Test
   public void testGetLogFileInformation()
   {
-    long currentLogFileSize = LoggerUtil.getLogFileInformation().fileOffset;
+    long currentLogFileSize = 
LoggerUtil.getLogFileInformation(logger).fileOffset;
     logger.info("Adding Test log message.");
-    assertEquals(logFileName, LoggerUtil.getLogFileInformation().fileName);
-    assertTrue(LoggerUtil.getLogFileInformation().fileOffset > 
currentLogFileSize);
+    assertEquals(logFileName, 
LoggerUtil.getLogFileInformation(logger).fileName);
+    assertTrue(LoggerUtil.getLogFileInformation(logger).fileOffset > 
currentLogFileSize);
   }
 
   @Test
   public void testImmediateFlushOff()
   {
-    RollingFileAppender rfa = 
(RollingFileAppender)Logger.getRootLogger().getAppender(APPENDER_NAME);
+    RollingFileAppender rfa = 
(RollingFileAppender)logger.getAppender(APPENDER_NAME);
+    assertTrue(rfa.getImmediateFlush());
     rfa.setImmediateFlush(false);
-    Logger.getRootLogger().addAppender(rfa);
-    LoggerUtil.initializeLogger();
-
-    Assert.assertNull(LoggerUtil.getLogFileInformation());
+    assertNull(LoggerUtil.getLogFileInformation());
     rfa.setImmediateFlush(true);
   }
 
   @Test
   public void testErrorLevelOff()
   {
-    Level curLogLevel = Logger.getRootLogger().getLevel();
-    Logger.getRootLogger().setLevel(Level.FATAL);
-    LoggerUtil.initializeLogger();
-
-    Assert.assertNull(LoggerUtil.getLogFileInformation());
-    Logger.getRootLogger().setLevel(curLogLevel);
+    RollingFileAppender rfa = 
(RollingFileAppender)logger.getAppender(APPENDER_NAME);
+    assertNull(rfa.getThreshold());
+    rfa.setThreshold(Level.FATAL);
+    assertNull(LoggerUtil.getLogFileInformation(logger));
+    rfa.setThreshold(null);
   }
 
   @Test
   public void testNoFileAppender()
   {
-    RollingFileAppender rfa = 
(RollingFileAppender)Logger.getRootLogger().getAppender(APPENDER_NAME);
-    Logger.getRootLogger().removeAppender(APPENDER_NAME);
-    LoggerUtil.initializeLogger();
-    Assert.assertNull(LoggerUtil.getLogFileInformation());
-    Logger.getRootLogger().addAppender(rfa);
+    RollingFileAppender rfa = 
(RollingFileAppender)logger.getAppender(APPENDER_NAME);
+    logger.removeAppender(APPENDER_NAME);
+    assertNull(LoggerUtil.getLogFileInformation());
+    logger.addAppender(rfa);
+  }
+
+  @Test
+  public void testSlf4Logger()
+  {
+    
assertNotNull(LoggerUtil.getLogFileInformation(LoggerFactory.getLogger(LogFileInformationTest.class)));
   }
 
   @AfterClass
   public static void tearDown()
   {
-    Logger.getRootLogger().removeAppender(APPENDER_NAME);
-    FileUtils.deleteQuietly(new File(logFileName).getParentFile());
+    
LogManager.getLogger(LogFileInformationTest.class).removeAppender(APPENDER_NAME);
   }
 }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> LoggerUtil should allow to get LogFileInformation for a specified logger      
> -------------------------------------------------------------------------
>
>                 Key: APEXCORE-792
>                 URL: https://issues.apache.org/jira/browse/APEXCORE-792
>             Project: Apache Apex Core
>          Issue Type: Improvement
>            Reporter: Vlad Rozov
>            Assignee: Vlad Rozov
>            Priority: Minor
>




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to