[
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:
[email protected]
> 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)