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

pramod pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apex-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 7995d36  APEXCORE-786 LoggerUtil should allow to add/remove/list 
appenders for a specified logger
7995d36 is described below

commit 7995d3629ec90fd93fd2cbc952c0c9931aae0289
Author: Vlad Rozov <[email protected]>
AuthorDate: Sun Sep 24 20:23:13 2017 -0700

    APEXCORE-786 LoggerUtil should allow to add/remove/list appenders for a 
specified logger
---
 .../com/datatorrent/stram/util/LoggerUtil.java     | 78 +++++++++++++++++++---
 .../com/datatorrent/stram/util/LoggerUtilTest.java | 11 +--
 2 files changed, 74 insertions(+), 15 deletions(-)

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 c862634..c6caa20 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 @@ public class LoggerUtil
    */
   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 class LoggerUtil
    */
   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 class LoggerUtil
     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 class LoggerUtil
    */
   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 class LoggerUtil
    */
   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 88aec3b..7701441 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.Category;
 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 class LoggerUtilTest
     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 class LoggerUtilTest
     @Override
     public void append(LoggingEvent event)
     {
-      event.getMDCCopy();
       mdcProperties = event.getProperties();
       lastMessage = event.getRenderedMessage();
       level = event.getLevel();

-- 
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].

Reply via email to