[ https://issues.apache.org/jira/browse/APEXCORE-786?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16217401#comment-16217401 ]
ASF GitHub Bot commented on APEXCORE-786: ----------------------------------------- PramodSSImmaneni closed pull request #582: APEXCORE-786 LoggerUtil should allow to add/remove/list appenders for a specified logger URL: https://github.com/apache/apex-core/pull/582 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 c862634d77..c6caa20d31 100644 --- a/engine/src/main/java/com/datatorrent/stram/util/LoggerUtil.java +++ b/engine/src/main/java/com/datatorrent/stram/util/LoggerUtil.java @@ -377,21 +377,36 @@ private static boolean isErrorLevelEnable(FileAppender fileAppender) */ public static boolean addAppender(String name, Properties properties) { - if (getAppendersNames().contains(name)) { - logger.warn("A logger appender with the name '{}' exists. Cannot add a new logger appender with the same name", name); + return addAppender(LogManager.getRootLogger(), name, properties); + } + + /** + * Adds Logger Appender to a specified logger + * @param logger Logger to add appender to, if null, use root logger + * @param name Appender name + * @param properties Appender properties + * @return True if the appender has been added successfully + */ + public static boolean addAppender(Logger logger, String name, Properties properties) + { + if (logger == null) { + logger = LogManager.getRootLogger(); + } + if (getAppendersNames(logger).contains(name)) { + LoggerUtil.logger.warn("A logger appender with the name '{}' exists. Cannot add a new logger appender with the same name", name); } else { try { Method method = PropertyConfigurator.class.getDeclaredMethod("parseAppender", Properties.class, String.class); method.setAccessible(true); Appender appender = (Appender)method.invoke(new PropertyConfigurator(), properties, name); if (appender == null) { - logger.warn("Cannot add a new logger appender. Name: {}, Properties: {}", name, properties); + LoggerUtil.logger.warn("Cannot add a new logger appender. Name: {}, Properties: {}", name, properties); } else { - LogManager.getRootLogger().addAppender(appender); + logger.addAppender(appender); return true; } } catch (Exception ex) { - logger.warn("Cannot add a new logger appender. Name: {}, Properties: {}", name, properties, ex); + LoggerUtil.logger.warn("Cannot add a new logger appender. Name: {}, Properties: {}", name, properties, ex); } } return false; @@ -406,6 +421,19 @@ public static boolean addAppender(String name, Properties properties) */ public static boolean addAppenders(String[] names, String args, String propertySeparator) { + return addAppenders(LogManager.getRootLogger(), names, args, propertySeparator); + } + + /** + * Adds Logger Appenders + * @param logger Logger to add appender to, if null, use root logger + * @param names Names of appender + * @param args Args with properties + * @param propertySeparator Property separator + * @return True if all of the appenders have been added successfully + */ + public static boolean addAppenders(Logger logger, String[] names, String args, String propertySeparator) + { if (names == null || args == null || names.length == 0 || propertySeparator == null) { throw new IllegalArgumentException("Incorrect appender parametrs"); } @@ -413,8 +441,11 @@ public static boolean addAppenders(String[] names, String args, String propertyS try { Properties properties = new Properties(); properties.load(new StringReader(args.replaceAll(propertySeparator, "\n"))); + if (logger == null) { + logger = LogManager.getRootLogger(); + } for (String name : names) { - if (!addAppender(name, properties)) { + if (!addAppender(logger, name, properties)) { status = false; } } @@ -450,13 +481,27 @@ public static boolean addAppenders() */ public static boolean removeAppender(String name) { + return removeAppender(LogManager.getRootLogger(), name); + } + + /** + * Removes Logger Appender + * @param logger Logger to remove appender from, if null, use root logger + * @param name Appender name + * @return True if the appender has been removed successfully + */ + public static boolean removeAppender(Logger logger, String name) + { + if (logger == null) { + logger = LogManager.getRootLogger(); + } try { - LogManager.getRootLogger().removeAppender(name); + logger.removeAppender(name); } catch (Exception ex) { - logger.error("Cannot remove the logger appender: {}", name, ex); + LoggerUtil.logger.error("Cannot remove the logger appender: {}", name, ex); return false; } - return false; + return true; } /** @@ -465,7 +510,20 @@ public static boolean removeAppender(String name) */ public static List<String> getAppendersNames() { - Enumeration enumeration = LogManager.getRootLogger().getAllAppenders(); + return getAppendersNames(LogManager.getRootLogger()); + } + + /** + * Returns a list names of the appenders + * @param logger Logger to list appender for, if null, use root logger + * @return Names of the appenders + */ + public static List<String> getAppendersNames(Logger logger) + { + if (logger == null) { + logger = LogManager.getRootLogger(); + } + Enumeration enumeration = logger.getAllAppenders(); List<String> names = new LinkedList<>(); while (enumeration.hasMoreElements()) { names.add(((Appender)enumeration.nextElement()).getName()); diff --git a/engine/src/test/java/com/datatorrent/stram/util/LoggerUtilTest.java b/engine/src/test/java/com/datatorrent/stram/util/LoggerUtilTest.java index 88aec3bd9b..770144101b 100644 --- a/engine/src/test/java/com/datatorrent/stram/util/LoggerUtilTest.java +++ b/engine/src/test/java/com/datatorrent/stram/util/LoggerUtilTest.java @@ -31,6 +31,7 @@ import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Level; import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; import org.apache.log4j.spi.LoggingEvent; import com.google.common.collect.Maps; @@ -237,16 +238,17 @@ public void testSetupMDC() System.setProperty(APPLICATION_NAME.getLongName(), application); LoggerUtil.setupMDC(service); - LoggerUtil.addAppenders(new String[] {appenderName }, args, ","); - TestAppender appender = (TestAppender)org.apache.log4j.Logger.getRootLogger().getAppender(appenderName); + Logger logger = LogManager.getLogger(LoggerUtilTest.class); + LoggerUtil.addAppenders(logger, new String[] {appenderName}, args, ","); + TestAppender appender = (TestAppender)logger.getAppender(appenderName); - logger.info(args); + LoggerUtilTest.logger.info(args); assertEquals(service, appender.mdcProperties.get("apex.service")); String node = StramClientUtils.getHostName(); assertEquals(node == null ? "unknown" : node, appender.mdcProperties.get("apex.node")); assertEquals(application, appender.mdcProperties.get("apex.application")); - LoggerUtil.removeAppender(appenderName); + assertTrue(LoggerUtil.removeAppender(logger, appenderName)); } public static class TestAppender extends ConsoleAppender @@ -258,7 +260,6 @@ public void testSetupMDC() @Override public void append(LoggingEvent event) { - event.getMDCCopy(); mdcProperties = event.getProperties(); lastMessage = event.getRenderedMessage(); level = event.getLevel(); ---------------------------------------------------------------- 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 add/remove/list appenders for a specified logger > --------------------------------------------------------------------------- > > Key: APEXCORE-786 > URL: https://issues.apache.org/jira/browse/APEXCORE-786 > 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)