LOG4J2-1202 - Remove ConfigurationMonitor. Configuration file changes will now be handled by the WatchManager
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/609267e2 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/609267e2 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/609267e2 Branch: refs/heads/LOG4J2-435-delete-on-rollover Commit: 609267e2a8e246d328eafc4f7d90364d00a9b232 Parents: 2a11b7b Author: Ralph Goers <[email protected]> Authored: Sat Nov 21 22:56:05 2015 -0700 Committer: Ralph Goers <[email protected]> Committed: Sat Nov 21 22:56:05 2015 -0700 ---------------------------------------------------------------------- .../org/apache/logging/log4j/core/Logger.java | 9 -- .../core/config/AbstractConfiguration.java | 65 +++++----- .../log4j/core/config/Configuration.java | 21 ++- .../log4j/core/config/ConfigurationMonitor.java | 37 ------ .../config/DefaultConfigurationMonitor.java | 43 ------- .../core/config/FileConfigurationMonitor.java | 127 ------------------- .../config/FileWatcherConfigurationMonitor.java | 67 ++++++++++ .../logging/log4j/core/config/LoggerConfig.java | 2 +- .../config/builder/impl/BuiltConfiguration.java | 7 +- .../core/config/json/JsonConfiguration.java | 6 +- .../log4j/core/config/xml/XmlConfiguration.java | 6 +- .../log4j/core/jmx/LoggerContextAdmin.java | 5 - .../log4j/core/jmx/LoggerContextAdminMBean.java | 9 -- .../log4j/core/config/TestConfigurator.java | 2 +- src/changes/changes.xml | 3 + 15 files changed, 130 insertions(+), 279 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java index 4caba13..8facfd2 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java @@ -143,9 +143,6 @@ public class Logger extends AbstractLogger implements Supplier<LoggerConfig> { final Throwable t) { final Message msg = message == null ? new SimpleMessage(Strings.EMPTY) : message; - // check if we need to reconfigure - privateConfig.config.getConfigurationMonitor().checkConfiguration(); - final ReliabilityStrategy strategy = privateConfig.loggerConfig.getReliabilityStrategy(); strategy.log(this, getName(), fqcn, marker, level, msg, t); } @@ -335,12 +332,10 @@ public class Logger extends AbstractLogger implements Supplier<LoggerConfig> { // LOG4J2-151: changed visibility to public public void logEvent(final LogEvent event) { - config.getConfigurationMonitor().checkConfiguration(); loggerConfig.log(event); } boolean filter(final Level level, final Marker marker, final String msg) { - config.getConfigurationMonitor().checkConfiguration(); final Filter filter = config.getFilter(); if (filter != null) { final Filter.Result r = filter.filter(logger, level, marker, msg); @@ -352,7 +347,6 @@ public class Logger extends AbstractLogger implements Supplier<LoggerConfig> { } boolean filter(final Level level, final Marker marker, final String msg, final Throwable t) { - config.getConfigurationMonitor().checkConfiguration(); final Filter filter = config.getFilter(); if (filter != null) { final Filter.Result r = filter.filter(logger, level, marker, msg, t); @@ -364,7 +358,6 @@ public class Logger extends AbstractLogger implements Supplier<LoggerConfig> { } boolean filter(final Level level, final Marker marker, final String msg, final Object... p1) { - config.getConfigurationMonitor().checkConfiguration(); final Filter filter = config.getFilter(); if (filter != null) { final Filter.Result r = filter.filter(logger, level, marker, msg, p1); @@ -376,7 +369,6 @@ public class Logger extends AbstractLogger implements Supplier<LoggerConfig> { } boolean filter(final Level level, final Marker marker, final Object msg, final Throwable t) { - config.getConfigurationMonitor().checkConfiguration(); final Filter filter = config.getFilter(); if (filter != null) { final Filter.Result r = filter.filter(logger, level, marker, msg, t); @@ -388,7 +380,6 @@ public class Logger extends AbstractLogger implements Supplier<LoggerConfig> { } boolean filter(final Level level, final Marker marker, final Message msg, final Throwable t) { - config.getConfigurationMonitor().checkConfiguration(); final Filter filter = config.getFilter(); if (filter != null) { final Filter.Result r = filter.filter(logger, level, marker, msg, t); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java index 13e45b6..8834db6 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AbstractConfiguration.java @@ -16,26 +16,6 @@ */ package org.apache.logging.log4j.core.config; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledThreadPoolExecutor; - import org.apache.logging.log4j.Level; import org.apache.logging.log4j.core.Appender; import org.apache.logging.log4j.core.Filter; @@ -46,7 +26,6 @@ import org.apache.logging.log4j.core.appender.ConsoleAppender; import org.apache.logging.log4j.core.async.AsyncLoggerConfig; import org.apache.logging.log4j.core.async.AsyncLoggerConfigDelegate; import org.apache.logging.log4j.core.async.AsyncLoggerConfigDisruptor; -import org.apache.logging.log4j.core.async.DaemonThreadFactory; import org.apache.logging.log4j.core.config.plugins.util.PluginBuilder; import org.apache.logging.log4j.core.config.plugins.util.PluginManager; import org.apache.logging.log4j.core.config.plugins.util.PluginType; @@ -66,6 +45,24 @@ import org.apache.logging.log4j.core.util.NameUtil; import org.apache.logging.log4j.core.util.WatchManager; import org.apache.logging.log4j.util.PropertiesUtil; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.CopyOnWriteArrayList; + /** * The base Configuration. Many configuration implementations will extend this class. */ @@ -86,11 +83,6 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement protected final List<ConfigurationListener> listeners = new CopyOnWriteArrayList<>(); /** - * The ConfigurationMonitor that checks for configuration changes. - */ - protected ConfigurationMonitor monitor = new DefaultConfigurationMonitor(); - - /** * Packages found in configuration "packages" attribute. */ protected final List<String> pluginPackages = new ArrayList<>(); @@ -617,16 +609,6 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } @Override - public void setConfigurationMonitor(final ConfigurationMonitor monitor) { - this.monitor = monitor; - } - - @Override - public ConfigurationMonitor getConfigurationMonitor() { - return monitor; - } - - @Override public void setAdvertiser(final Advertiser advertiser) { this.advertiser = advertiser; } @@ -636,6 +618,17 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement return advertiser; } + /* + * (non-Javadoc) + * + * @see org.apache.logging.log4j.core.config.ReliabilityStrategyFactory#getReliabilityStrategy(org.apache.logging.log4j + * .core.config.LoggerConfig) + */ + @Override + public ReliabilityStrategy getReliabilityStrategy(LoggerConfig loggerConfig) { + return ReliabilityStrategyFactory.getReliabilityStrategy(loggerConfig); + } + /** * Associates an Appender with a LoggerConfig. This method is synchronized in case a Logger with the same name is * being updated at the same time. http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configuration.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configuration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configuration.java index e69d391..e9bb6a0 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configuration.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/Configuration.java @@ -29,6 +29,7 @@ import org.apache.logging.log4j.core.filter.Filterable; import org.apache.logging.log4j.core.lookup.StrSubstitutor; import org.apache.logging.log4j.core.net.Advertiser; import org.apache.logging.log4j.core.script.ScriptManager; +import org.apache.logging.log4j.core.util.WatchManager; /** * Interface that must be implemented to create a configuration. @@ -112,10 +113,6 @@ public interface Configuration extends Filterable { void addComponent(String name, Object object); - void setConfigurationMonitor(ConfigurationMonitor monitor); - - ConfigurationMonitor getConfigurationMonitor(); - void setAdvertiser(Advertiser advertiser); Advertiser getAdvertiser(); @@ -159,4 +156,20 @@ public interface Configuration extends Filterable { */ AsyncLoggerConfigDelegate getAsyncLoggerConfigDelegate(); + /** + * Return the WatchManager. + * @return the WatchManager. + */ + WatchManager getWatchManager(); + + /* + * (non-Javadoc) + * + * @see + * org.apache.logging.log4j.core.config.ReliabilityStrategyFactory#getReliabilityStrategy(org.apache.logging.log4j + * .core.config.LoggerConfig) + */ + + ReliabilityStrategy getReliabilityStrategy(LoggerConfig loggerConfig); + } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationMonitor.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationMonitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationMonitor.java deleted file mode 100644 index 44c803d..0000000 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ConfigurationMonitor.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache license, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the license for the specific language governing permissions and - * limitations under the license. - */ -package org.apache.logging.log4j.core.config; - -/** - * Interface that must be implemented to provide notification of configuration changes. - */ -public interface ConfigurationMonitor { - - /** - * Called to determine if the configuration has changed. - */ - void checkConfiguration(); - - /** - * Determines how to log events reliably during or after a configuration change. - * - * @param loggerConfig the LoggerConfig the resulting {@code ReliabilityStrategy} is associated with - * @return a ReliabilityStrategy that helps the specified LoggerConfig to log events reliably during or after a - * configuration change - */ - ReliabilityStrategy getReliabilityStrategy(final LoggerConfig loggerConfig); -} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java deleted file mode 100644 index 3f4a286..0000000 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfigurationMonitor.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache license, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the license for the specific language governing permissions and - * limitations under the license. - */ -package org.apache.logging.log4j.core.config; - -/** - * The default configuration monitor does not do anything. - */ -public class DefaultConfigurationMonitor implements ConfigurationMonitor { - - /** - * Does nothing. - */ - @Override - public void checkConfiguration() { - // do nothing - } - - /* - * (non-Javadoc) - * - * @see - * org.apache.logging.log4j.core.config.ReliabilityStrategyFactory#getReliabilityStrategy(org.apache.logging.log4j - * .core.config.LoggerConfig) - */ - @Override - public ReliabilityStrategy getReliabilityStrategy(LoggerConfig loggerConfig) { - return ReliabilityStrategyFactory.getReliabilityStrategy(loggerConfig); - } -} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java deleted file mode 100644 index b8fcaa7..0000000 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileConfigurationMonitor.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache license, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the license for the specific language governing permissions and - * limitations under the license. - */ -package org.apache.logging.log4j.core.config; - -import java.io.File; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -import org.apache.logging.log4j.core.util.Log4jThread; - -/** - * Configuration monitor that periodically checks the timestamp of the configuration file and calls the - * ConfigurationListeners when an update occurs. - */ -public class FileConfigurationMonitor implements ConfigurationMonitor { - - static final int MIN_INTERVAL = 5; - - private static final int MASK = 0x0f; - - private final File file; - - private volatile long lastModified; - - private final List<ConfigurationListener> listeners; - - private final long intervalNano; - - private volatile long nextCheck; - - private final AtomicInteger counter = new AtomicInteger(0); - - private static final Lock LOCK = new ReentrantLock(); - - private final Reconfigurable reconfigurable; - - /** - * Constructor. - * - * @param reconfigurable The Configuration that can be reconfigured. - * @param file The File to monitor. - * @param listeners The List of ConfigurationListeners to notify upon a change. - * @param intervalSeconds The monitor interval in seconds. The minimum interval is 5 seconds. - */ - public FileConfigurationMonitor(final Reconfigurable reconfigurable, final File file, - final List<ConfigurationListener> listeners, final int intervalSeconds) { - this.reconfigurable = reconfigurable; - this.file = file; - this.lastModified = file.lastModified(); - this.listeners = listeners; - this.intervalNano = TimeUnit.SECONDS.toNanos(Math.max(intervalSeconds, MIN_INTERVAL)); - this.nextCheck = System.nanoTime() + this.intervalNano; - } - - /** - * Called to determine if the configuration has changed. - */ - @Override - public void checkConfiguration() { - final long current; - if (((counter.incrementAndGet() & MASK) == 0) && ((current = System.nanoTime()) - nextCheck >= 0)) { - LOCK.lock(); - try { - nextCheck = current + intervalNano; - final long currentLastModified = file.lastModified(); - if (currentLastModified > lastModified) { - lastModified = currentLastModified; - for (final ConfigurationListener listener : listeners) { - final Thread thread = new Log4jThread(new ReconfigurationWorker(listener, reconfigurable)); - thread.setDaemon(true); - thread.start(); - } - } - } finally { - LOCK.unlock(); - } - } - } - - /** - * Helper class for triggering a reconfiguration in a background thread. - */ - private static class ReconfigurationWorker implements Runnable { - - private final ConfigurationListener listener; - private final Reconfigurable reconfigurable; - - public ReconfigurationWorker(final ConfigurationListener listener, final Reconfigurable reconfigurable) { - this.listener = listener; - this.reconfigurable = reconfigurable; - } - - @Override - public void run() { - listener.onChange(reconfigurable); - } - } - - /* - * (non-Javadoc) - * - * @see - * org.apache.logging.log4j.core.config.ReliabilityStrategyFactory#getReliabilityStrategy(org.apache.logging.log4j - * .core.config.LoggerConfig) - */ - @Override - public ReliabilityStrategy getReliabilityStrategy(LoggerConfig loggerConfig) { - return ReliabilityStrategyFactory.getReliabilityStrategy(loggerConfig); - } -} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileWatcherConfigurationMonitor.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileWatcherConfigurationMonitor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileWatcherConfigurationMonitor.java new file mode 100644 index 0000000..9a8c932 --- /dev/null +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/FileWatcherConfigurationMonitor.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ +package org.apache.logging.log4j.core.config; + +import org.apache.logging.log4j.core.util.FileWatcher; +import org.apache.logging.log4j.core.util.Log4jThread; + +import java.io.File; +import java.util.List; + +/** + * Class Description goes here. + * Created by rgoers on 11/21/15 + */ +public class FileWatcherConfigurationMonitor implements FileWatcher { + + private Reconfigurable reconfigurable; + private List<ConfigurationListener> listeners; + + public FileWatcherConfigurationMonitor(Reconfigurable reconfigurable, final List<ConfigurationListener> listeners) { + this.reconfigurable = reconfigurable; + this.listeners = listeners; + } + + + @Override + public void fileModified(File file) { + for (final ConfigurationListener listener : listeners) { + final Thread thread = new Log4jThread(new ReconfigurationWorker(listener, reconfigurable)); + thread.setDaemon(true); + thread.start(); + } + } + + /** + * Helper class for triggering a reconfiguration in a background thread. + */ + private static class ReconfigurationWorker implements Runnable { + + private final ConfigurationListener listener; + private final Reconfigurable reconfigurable; + + public ReconfigurationWorker(final ConfigurationListener listener, final Reconfigurable reconfigurable) { + this.listener = listener; + this.reconfigurable = reconfigurable; + } + + @Override + public void run() { + listener.onChange(reconfigurable); + } + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java index 1d7e3cb..32946f1 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java @@ -138,7 +138,7 @@ public class LoggerConfig extends AbstractFilterable { } else { this.properties = null; } - this.reliabilityStrategy = config.getConfigurationMonitor().getReliabilityStrategy(this); + this.reliabilityStrategy = config.getReliabilityStrategy(this); } @Override http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/BuiltConfiguration.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/BuiltConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/BuiltConfiguration.java index 13a23d4..f096617 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/BuiltConfiguration.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/builder/impl/BuiltConfiguration.java @@ -18,7 +18,7 @@ package org.apache.logging.log4j.core.config.builder.impl; import org.apache.logging.log4j.core.config.AbstractConfiguration; import org.apache.logging.log4j.core.config.ConfigurationSource; -import org.apache.logging.log4j.core.config.FileConfigurationMonitor; +import org.apache.logging.log4j.core.config.FileWatcherConfigurationMonitor; import org.apache.logging.log4j.core.config.Node; import org.apache.logging.log4j.core.config.Reconfigurable; import org.apache.logging.log4j.core.config.builder.api.Component; @@ -26,6 +26,7 @@ import org.apache.logging.log4j.core.config.plugins.util.PluginManager; import org.apache.logging.log4j.core.config.plugins.util.PluginType; import org.apache.logging.log4j.core.config.plugins.util.ResolverUtil; import org.apache.logging.log4j.core.config.status.StatusConfiguration; +import org.apache.logging.log4j.core.util.FileWatcher; import org.apache.logging.log4j.core.util.Patterns; import java.io.File; @@ -152,8 +153,8 @@ public class BuiltConfiguration extends AbstractConfiguration { if (intervalSeconds > 0) { getWatchManager().setIntervalSeconds(intervalSeconds); if (configFile != null) { - monitor = new FileConfigurationMonitor((Reconfigurable)this, configFile, listeners, - intervalSeconds); + FileWatcher watcher = new FileWatcherConfigurationMonitor((Reconfigurable) this, listeners); + getWatchManager().watchFile(configFile, watcher); } } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/JsonConfiguration.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/JsonConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/JsonConfiguration.java index bc08922..ab5818c 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/JsonConfiguration.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/json/JsonConfiguration.java @@ -22,13 +22,14 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.logging.log4j.core.config.AbstractConfiguration; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.ConfigurationSource; -import org.apache.logging.log4j.core.config.FileConfigurationMonitor; +import org.apache.logging.log4j.core.config.FileWatcherConfigurationMonitor; import org.apache.logging.log4j.core.config.LoggerConfig; import org.apache.logging.log4j.core.config.Node; import org.apache.logging.log4j.core.config.Reconfigurable; import org.apache.logging.log4j.core.config.plugins.util.PluginType; import org.apache.logging.log4j.core.config.plugins.util.ResolverUtil; import org.apache.logging.log4j.core.config.status.StatusConfiguration; +import org.apache.logging.log4j.core.util.FileWatcher; import org.apache.logging.log4j.core.util.Patterns; import java.io.ByteArrayInputStream; @@ -90,7 +91,8 @@ public class JsonConfiguration extends AbstractConfiguration implements Reconfig if (intervalSeconds > 0) { getWatchManager().setIntervalSeconds(intervalSeconds); if (configFile != null) { - monitor = new FileConfigurationMonitor(this, configFile, listeners, intervalSeconds); + FileWatcher watcher = new FileWatcherConfigurationMonitor(this, listeners); + getWatchManager().watchFile(configFile, watcher); } } } else if ("advertiser".equalsIgnoreCase(key)) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java index 8008e62..dabd531 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/xml/XmlConfiguration.java @@ -38,13 +38,14 @@ import javax.xml.validation.Validator; import org.apache.logging.log4j.core.config.AbstractConfiguration; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.ConfigurationSource; -import org.apache.logging.log4j.core.config.FileConfigurationMonitor; +import org.apache.logging.log4j.core.config.FileWatcherConfigurationMonitor; import org.apache.logging.log4j.core.config.Node; import org.apache.logging.log4j.core.config.Reconfigurable; import org.apache.logging.log4j.core.config.plugins.util.PluginType; import org.apache.logging.log4j.core.config.plugins.util.ResolverUtil; import org.apache.logging.log4j.core.config.status.StatusConfiguration; import org.apache.logging.log4j.core.util.Closer; +import org.apache.logging.log4j.core.util.FileWatcher; import org.apache.logging.log4j.core.util.Loader; import org.apache.logging.log4j.core.util.Patterns; import org.apache.logging.log4j.core.util.Throwables; @@ -135,7 +136,8 @@ public class XmlConfiguration extends AbstractConfiguration implements Reconfigu if (intervalSeconds > 0) { getWatchManager().setIntervalSeconds(intervalSeconds); if (configFile != null) { - monitor = new FileConfigurationMonitor(this, configFile, listeners, intervalSeconds); + FileWatcher watcher = new FileWatcherConfigurationMonitor(this, listeners); + getWatchManager().watchFile(configFile, watcher); } } } else if ("advertiser".equalsIgnoreCase(key)) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java index 4a07dff..c9ddb90 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdmin.java @@ -223,11 +223,6 @@ public class LoggerContextAdmin extends NotificationBroadcasterSupport implement } @Override - public String getConfigMonitorClassName() { - return getConfig().getConfigurationMonitor().getClass().getName(); - } - - @Override public Map<String, String> getConfigProperties() { return getConfig().getProperties(); } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdminMBean.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdminMBean.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdminMBean.java index c6c66a2..7526982 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdminMBean.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/jmx/LoggerContextAdminMBean.java @@ -162,15 +162,6 @@ public interface LoggerContextAdminMBean { String getConfigFilter(); /** - * Returns the class name of the object that is monitoring the configuration - * file for modifications. - * - * @return the class name of the object that is monitoring the configuration - * file for modifications - */ - String getConfigMonitorClassName(); - - /** * Returns a map with configured properties. * * @return a map with configured properties. http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java index 51de833..057deee 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java @@ -246,7 +246,7 @@ public class TestConfigurator { Thread.sleep(500); } assertTrue("setLastModified should have succeeded.", file.setLastModified(System.currentTimeMillis())); - TimeUnit.SECONDS.sleep(FileConfigurationMonitor.MIN_INTERVAL + 1); + TimeUnit.SECONDS.sleep(config.getWatchManager().getIntervalSeconds()+1); for (int i = 0; i < 17; ++i) { logger.debug("Test message " + i); } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/609267e2/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 8595931..71059cd 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -24,6 +24,9 @@ </properties> <body> <release version="2.5" date="2015-MM-DD" description="GA Release 2.5"> + <action issue="LOG4J2-1202" dev="rgoers" type="update"> + Remove ConfigurationMonitor. The WatchManager is now used to check for configuration changes. + </action> <action issue="LOG4J2-1195" dev="mikes" type="fix" due-to="Melvin Du"> Make KafkaAppender support SerializedLayout. </action>
