AMBARI-18592. Ability to enable the DEBUG/INFO logs in Ambari-server without server restart (Amarnath Reddy Pappu via alejandro)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/3ec7df13 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/3ec7df13 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/3ec7df13 Branch: refs/heads/branch-feature-AMBARI-18634 Commit: 3ec7df13485b629bcf08310f3916b6401f827dbe Parents: 922f87a Author: Alejandro Fernandez <afernan...@hortonworks.com> Authored: Mon Nov 7 14:04:11 2016 -0800 Committer: Alejandro Fernandez <afernan...@hortonworks.com> Committed: Mon Nov 7 14:04:11 2016 -0800 ---------------------------------------------------------------------- .../server/configuration/Configuration.java | 8 +++++++ .../ambari/server/controller/AmbariServer.java | 23 ++++++++++++++++++++ 2 files changed, 31 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/3ec7df13/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java index 2ce247c..3103b6d 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java @@ -2449,6 +2449,13 @@ public class Configuration { public static final ConfigurationProperty<Boolean> ACTIVE_INSTANCE = new ConfigurationProperty<>( "active.instance", Boolean.TRUE); + /** + * PropertyConfigurator checks log4j.properties file change every LOG4JMONITOR_DELAY milliseconds. + */ + @Markdown(description = "Indicates the delay, in milliseconds, for the log4j monitor to check for changes") + public static final ConfigurationProperty<Long> LOG4JMONITOR_DELAY = new ConfigurationProperty<>( + "log4j.monitor.delay", TimeUnit.MINUTES.toMillis(5)); + private static final Logger LOG = LoggerFactory.getLogger( Configuration.class); @@ -2625,6 +2632,7 @@ public class Configuration { configsMap.put(PARALLEL_STAGE_EXECUTION.getKey(), getProperty(PARALLEL_STAGE_EXECUTION)); configsMap.put(SERVER_TMP_DIR.getKey(), getProperty(SERVER_TMP_DIR)); configsMap.put(REQUEST_LOGPATH.getKey(), getProperty(REQUEST_LOGPATH)); + configsMap.put(LOG4JMONITOR_DELAY.getKey(), getProperty(LOG4JMONITOR_DELAY)); configsMap.put(REQUEST_LOG_RETAINDAYS.getKey(), getProperty(REQUEST_LOG_RETAINDAYS)); configsMap.put(EXTERNAL_SCRIPT_TIMEOUT.getKey(), getProperty(EXTERNAL_SCRIPT_TIMEOUT)); configsMap.put(SHARED_RESOURCES_DIR.getKey(), getProperty(SHARED_RESOURCES_DIR)); http://git-wip-us.apache.org/repos/asf/ambari/blob/3ec7df13/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java index 7677c07..6351720 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java @@ -124,6 +124,7 @@ import org.apache.ambari.server.view.ViewDirectoryWatcher; import org.apache.ambari.server.view.ViewRegistry; import org.apache.ambari.server.view.ViewThrottleFilter; import org.apache.commons.lang.StringUtils; +import org.apache.log4j.PropertyConfigurator; import org.apache.velocity.app.Velocity; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.NCSARequestLog; @@ -504,6 +505,8 @@ public class AmbariServer { //Check and load requestlog handler. loadRequestlogHandler(handlerList, serverForAgent, configsMap); + enableLog4jMonitor(configsMap); + handlerList.addHandler(root); server.setHandler(handlerList); @@ -977,6 +980,26 @@ public class AmbariServer { } /** + * To change log level without restart. + */ + public static void enableLog4jMonitor(Map<String, String> configsMap){ + + String log4jpath = AmbariServer.class.getResource("/"+Configuration.AMBARI_LOG_FILE).toString(); + String monitorDelay = configsMap.get(Configuration.LOG4JMONITOR_DELAY.getKey()); + long monitorDelayLong = Configuration.LOG4JMONITOR_DELAY.getDefaultValue(); + + try{ + log4jpath = log4jpath.replace("file:", ""); + if(StringUtils.isNotBlank(monitorDelay)) { + monitorDelayLong = Long.parseLong(monitorDelay); + } + PropertyConfigurator.configureAndWatch(log4jpath, monitorDelayLong); + }catch(Exception e){ + LOG.error("Exception in setting log4j monitor delay of {} for {}", monitorDelay, log4jpath, e); + } + } + + /** * For loading requestlog handlers */ private static void loadRequestlogHandler(AmbariHandlerList handlerList, Server serverForAgent , Map<String, String> configsMap) {