[ 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)