Checkstyle
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/8606650e Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/8606650e Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/8606650e Branch: refs/heads/LOG4J2-1136 Commit: 8606650ec11ec6abfe287546576509856c9aeefe Parents: 37c992b Author: rpopma <[email protected]> Authored: Thu Sep 24 16:43:46 2015 +0200 Committer: Ralph Goers <[email protected]> Committed: Sun Sep 27 10:49:28 2015 -0700 ---------------------------------------------------------------------- .../logging/log4j/core/async/AsyncLogger.java | 20 +- .../log4j/core/async/AsyncLoggerConfig.java | 1 + .../core/async/AsyncLoggerConfigHelper.java | 4 +- .../log4j/core/async/DaemonThreadFactory.java | 6 +- .../core/config/AbstractConfiguration.java | 196 ++++++++++--------- .../log4j/core/config/AppenderControl.java | 16 +- .../AwaitCompletionReliabilityStrategy.java | 35 +++- ...AwaitUnconditionallyReliabilityStrategy.java | 10 +- .../core/config/LockingReliabilityStrategy.java | 35 +++- .../log4j/core/config/NullConfiguration.java | 5 +- .../log4j/core/config/ReliabilityStrategy.java | 15 +- .../core/config/ReliabilityStrategyFactory.java | 2 +- 12 files changed, 205 insertions(+), 140 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java index d775731..032ecd1 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLogger.java @@ -113,7 +113,7 @@ public class AsyncLogger extends Logger { private static final Clock CLOCK = ClockFactory.getClock(); private static volatile NanoClock nanoClock = new DummyNanoClock(); - private static final ExecutorService executor = Executors.newSingleThreadExecutor(new DaemonThreadFactory( + private static final ExecutorService EXECUTOR = Executors.newSingleThreadExecutor(new DaemonThreadFactory( "AsyncLogger-")); static { @@ -122,7 +122,7 @@ public class AsyncLogger extends Logger { final int ringBufferSize = calculateRingBufferSize(); final WaitStrategy waitStrategy = createWaitStrategy(); - disruptor = new Disruptor<>(RingBufferLogEvent.FACTORY, ringBufferSize, executor, ProducerType.MULTI, + disruptor = new Disruptor<>(RingBufferLogEvent.FACTORY, ringBufferSize, EXECUTOR, ProducerType.MULTI, waitStrategy); disruptor.handleExceptionsWith(getExceptionHandler()); disruptor.handleEventsWith(new RingBufferLogEventHandler()); @@ -168,13 +168,13 @@ public class AsyncLogger extends Logger { * deadlock when the RingBuffer is full. (LOG4J2-471) */ private static void initInfoForExecutorThread() { - executor.submit(new Runnable() { + EXECUTOR.submit(new Runnable() { @Override public void run() { final boolean isAppenderThread = true; final Info info = new Info(new RingBufferLogEventTranslator(), // Thread.currentThread().getName(), isAppenderThread); - Info.threadlocalInfo.set(info); + Info.THREADLOCAL.set(info); } }); } @@ -215,7 +215,7 @@ public class AsyncLogger extends Logger { * Tuple with the event translator and thread name for a thread. */ static class Info { - private static final ThreadLocal<Info> threadlocalInfo = new ThreadLocal<Info>() { + private static final ThreadLocal<Info> THREADLOCAL = new ThreadLocal<Info>() { @Override protected Info initialValue() { // by default, set isAppenderThread to false @@ -226,7 +226,8 @@ public class AsyncLogger extends Logger { private final String cachedThreadName; private final boolean isAppenderThread; - public Info(final RingBufferLogEventTranslator translator, final String threadName, final boolean appenderThread) { + public Info(final RingBufferLogEventTranslator translator, final String threadName, + final boolean appenderThread) { this.translator = translator; this.cachedThreadName = threadName; this.isAppenderThread = appenderThread; @@ -252,7 +253,7 @@ public class AsyncLogger extends Logger { private void logMessage0(final Disruptor<RingBufferLogEvent> theDisruptor, final String fqcn, final Level level, final Marker marker, final Message message, final Throwable thrown) { - final Info info = Info.threadlocalInfo.get(); + final Info info = Info.THREADLOCAL.get(); logMessageInAppropriateThread(info, theDisruptor, fqcn, level, marker, message, thrown); } @@ -404,8 +405,8 @@ public class AsyncLogger extends Logger { } } temp.shutdown(); // busy-spins until all events currently in the disruptor have been processed - executor.shutdown(); // finally, kill the processor thread - Info.threadlocalInfo.remove(); // LOG4J2-323 + EXECUTOR.shutdown(); // finally, kill the processor thread + Info.THREADLOCAL.remove(); // LOG4J2-323 } /** @@ -420,6 +421,7 @@ public class AsyncLogger extends Logger { * Creates and returns a new {@code RingBufferAdmin} that instruments the ringbuffer of the {@code AsyncLogger}. * * @param contextName name of the global {@code AsyncLoggerContext} + * @return a new {@code RingBufferAdmin} that instruments the ringbuffer */ public static RingBufferAdmin createRingBufferAdmin(final String contextName) { return RingBufferAdmin.forAsyncLogger(disruptor.getRingBuffer(), contextName); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java index 1324cbb..186575d 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java @@ -150,6 +150,7 @@ public class AsyncLoggerConfig extends LoggerConfig { * ringbuffer of this {@code AsyncLoggerConfig}. * * @param contextName name of the {@code LoggerContext} + * @return a new {@code RingBufferAdmin} that instruments the ringbuffer */ public RingBufferAdmin createRingBufferAdmin(final String contextName) { return helper.createRingBufferAdmin(contextName, getName()); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigHelper.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigHelper.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigHelper.java index 955e7f6..9a71899 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigHelper.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigHelper.java @@ -273,8 +273,8 @@ class AsyncLoggerConfigHelper { /** * Returns {@code true} if the specified disruptor still has unprocessed events. */ - private static boolean hasBacklog(final Disruptor<?> disruptor) { - final RingBuffer<?> ringBuffer = disruptor.getRingBuffer(); + private static boolean hasBacklog(final Disruptor<?> theDisruptor) { + final RingBuffer<?> ringBuffer = theDisruptor.getRingBuffer(); return !ringBuffer.hasAvailableCapacity(ringBuffer.getBufferSize()); } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DaemonThreadFactory.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DaemonThreadFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DaemonThreadFactory.java index 8187e6f..127ec75 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DaemonThreadFactory.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DaemonThreadFactory.java @@ -24,9 +24,9 @@ import java.util.concurrent.atomic.AtomicInteger; */ public class DaemonThreadFactory implements ThreadFactory { - final ThreadGroup group; - final AtomicInteger threadNumber = new AtomicInteger(1); - final String threadNamePrefix; + private final ThreadGroup group; + private final AtomicInteger threadNumber = new AtomicInteger(1); + private final String threadNamePrefix; public DaemonThreadFactory(final String threadNamePrefix) { this.threadNamePrefix = threadNamePrefix; http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/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 9a36314..c1a3b46 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 @@ -87,16 +87,26 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement protected ConfigurationMonitor monitor = new DefaultConfigurationMonitor(); /** - * The Advertiser which exposes appender configurations to external systems. + * Packages found in configuration "packages" attribute. */ - private Advertiser advertiser = new DefaultAdvertiser(); - private Node advertiserNode = null; - private Object advertisement; + protected final List<String> pluginPackages = new ArrayList<>(); + + /** + * The plugin manager. + */ + protected PluginManager pluginManager; /** - * + * Shutdown hook is enabled by default. */ protected boolean isShutdownHookEnabled = true; + + /** + * The Advertiser which exposes appender configurations to external systems. + */ + private Advertiser advertiser = new DefaultAdvertiser(); + private Node advertiserNode = null; + private Object advertisement; private String name; private ConcurrentMap<String, Appender> appenders = new ConcurrentHashMap<>(); private ConcurrentMap<String, LoggerConfig> loggers = new ConcurrentHashMap<>(); @@ -106,8 +116,6 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement private final StrSubstitutor subst = new StrSubstitutor(tempLookup); private LoggerConfig root = new LoggerConfig(); private final ConcurrentMap<String, Object> componentMap = new ConcurrentHashMap<>(); - protected final List<String> pluginPackages = new ArrayList<>(); - protected PluginManager pluginManager; private final ConfigurationSource configurationSource; private ScriptManager scriptManager; @@ -172,7 +180,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } /** - * Start the configuration + * Start the configuration. */ @Override public void start() { @@ -204,7 +212,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement public void stop() { this.setStopping(); LOGGER.trace("Stopping {}...", this); - + for (final LoggerConfig loggerConfig : loggers.values()) { loggerConfig.getReliabilityStrategy().beforeStopConfiguration(this); } @@ -221,8 +229,8 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement // every time the configuration changes... // // Uncomment the line below after LOG4J2-493 is fixed - //AsyncLogger.stop(); - //LOGGER.trace("AbstractConfiguration stopped AsyncLogger disruptor."); + // AsyncLogger.stop(); + // LOGGER.trace("AbstractConfiguration stopped AsyncLogger disruptor."); } } // similarly, first stop AsyncLoggerConfig Disruptor thread(s) @@ -311,8 +319,8 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } protected Level getDefaultStatus() { - final String statusLevel = PropertiesUtil.getProperties().getStringProperty(Constants.LOG4J_DEFAULT_STATUS_LEVEL, - Level.ERROR.name()); + final String statusLevel = PropertiesUtil.getProperties().getStringProperty( + Constants.LOG4J_DEFAULT_STATUS_LEVEL, Level.ERROR.name()); try { return Level.toLevel(statusLevel); } catch (final Exception ex) { @@ -321,7 +329,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } protected void createAdvertiser(final String advertiserString, final ConfigurationSource configSource, - final byte[] buffer, final String contentType) { + final byte[] buffer, final String contentType) { if (advertiserString != null) { final Node node = new Node(null, advertiserString, null); final Map<String, String> attributes = node.getAttributes(); @@ -336,12 +344,10 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } private void setupAdvertisement() { - if (advertiserNode != null) - { + if (advertiserNode != null) { final String name = advertiserNode.getName(); final PluginType<?> type = pluginManager.getPluginType(name); - if (type != null) - { + if (type != null) { final Class<? extends Advertiser> clazz = type.getPluginClass().asSubclass(Advertiser.class); try { advertiser = clazz.newInstance(); @@ -411,8 +417,8 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement copy.add(child.getObject(CustomLevelConfig.class)); customLevels = copy; } else { - LOGGER.error("Unknown object \"{}\" of type {} is ignored.", child.getName(), - child.getObject().getClass().getName()); + LOGGER.error("Unknown object \"{}\" of type {} is ignored.", child.getName(), child.getObject() + .getClass().getName()); } } @@ -447,9 +453,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement // TODO: reduce duplication between this method and DefaultConfiguration constructor setName(DefaultConfiguration.DEFAULT_NAME); final Layout<? extends Serializable> layout = PatternLayout.newBuilder() - .withPattern(DefaultConfiguration.DEFAULT_PATTERN) - .withConfiguration(this) - .build(); + .withPattern(DefaultConfiguration.DEFAULT_PATTERN).withConfiguration(this).build(); final Appender appender = ConsoleAppender.createDefaultAppenderForLayout(layout); appender.start(); addAppender(appender); @@ -457,13 +461,14 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement root.addAppender(appender, null, null); final String levelName = PropertiesUtil.getProperties().getStringProperty(DefaultConfiguration.DEFAULT_LEVEL); - final Level level = levelName != null && Level.getLevel(levelName) != null ? - Level.getLevel(levelName) : Level.ERROR; + final Level level = levelName != null && Level.getLevel(levelName) != null ? Level.getLevel(levelName) + : Level.ERROR; root.setLevel(level); } /** * Set the name of the configuration. + * * @param name The name. */ public void setName(final String name) { @@ -472,6 +477,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement /** * Returns the name of the configuration. + * * @return the name of the configuration. */ @Override @@ -481,6 +487,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement /** * Add a listener for changes on the configuration. + * * @param listener The ConfigurationListener to add. */ @Override @@ -490,6 +497,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement /** * Remove a ConfigurationListener. + * * @param listener The ConfigurationListener to remove. */ @Override @@ -499,6 +507,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement /** * Returns the Appender with the specified name. + * * @param appenderName The name of the Appender. * @return the Appender with the specified name or null if the Appender cannot be located. */ @@ -510,6 +519,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement /** * Returns a Map containing all the Appenders and their name. + * * @return A Map containing each Appender's name and the Appender object. */ @Override @@ -519,6 +529,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement /** * Adds an Appender to the configuration. + * * @param appender The Appender to add. */ @Override @@ -552,17 +563,17 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } /** - * 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. + * 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. * - * Note: This method is not used when configuring via configuration. It is primarily used by - * unit tests. + * Note: This method is not used when configuring via configuration. It is primarily used by unit tests. + * * @param logger The Logger the Appender will be associated with. * @param appender The Appender. */ @Override public synchronized void addLoggerAppender(final org.apache.logging.log4j.core.Logger logger, - final Appender appender) { + final Appender appender) { final String name = logger.getName(); appenders.putIfAbsent(appender.getName(), appender); final LoggerConfig lc = getLoggerConfig(name); @@ -577,12 +588,13 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement logger.getContext().updateLoggers(); } } + /** - * Associates a Filter with a LoggerConfig. This method is synchronized in case a Logger with the - * same name is being updated at the same time. + * Associates a Filter with a LoggerConfig. This method is synchronized in case a Logger with the same name is being + * updated at the same time. * - * Note: This method is not used when configuring via configuration. It is primarily used by - * unit tests. + * Note: This method is not used when configuring via configuration. It is primarily used by unit tests. + * * @param logger The Logger the Footer will be associated with. * @param filter The Filter. */ @@ -601,18 +613,18 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement logger.getContext().updateLoggers(); } } + /** - * Marks a LoggerConfig as additive. This method is synchronized in case a Logger with the - * same name is being updated at the same time. + * Marks a LoggerConfig as additive. This method is synchronized in case a Logger with the same name is being + * updated at the same time. * - * Note: This method is not used when configuring via configuration. It is primarily used by - * unit tests. + * Note: This method is not used when configuring via configuration. It is primarily used by unit tests. + * * @param logger The Logger the Appender will be associated with. * @param additive True if the LoggerConfig should be additive, false otherwise. */ @Override - public synchronized void setLoggerAdditive(final org.apache.logging.log4j.core.Logger logger, - final boolean additive) { + public synchronized void setLoggerAdditive(final org.apache.logging.log4j.core.Logger logger, final boolean additive) { final String loggerName = logger.getName(); final LoggerConfig lc = getLoggerConfig(loggerName); if (lc.getName().equals(loggerName)) { @@ -627,9 +639,10 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } /** - * Remove an Appender. First removes any associations between LoggerConfigs and the Appender, removes - * the Appender from this appender list and then stops the appender. This method is synchronized in - * case an Appender with the same name is being added during the removal. + * Remove an Appender. First removes any associations between LoggerConfigs and the Appender, removes the Appender + * from this appender list and then stops the appender. This method is synchronized in case an Appender with the + * same name is being added during the removal. + * * @param appenderName the name of the appender to remove. */ public synchronized void removeAppender(final String appenderName) { @@ -645,6 +658,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement /* * (non-Javadoc) + * * @see org.apache.logging.log4j.core.config.Configuration#getCustomLevels() */ @Override @@ -653,8 +667,9 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } /** - * Locates the appropriate LoggerConfig for a Logger name. This will remove tokens from the - * package name as necessary or return the root LoggerConfig if no other matches were found. + * Locates the appropriate LoggerConfig for a Logger name. This will remove tokens from the package name as + * necessary or return the root LoggerConfig if no other matches were found. + * * @param loggerName The Logger name. * @return The located LoggerConfig. */ @@ -676,6 +691,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement /** * Returns the root Logger. + * * @return the root Logger. */ @Override @@ -685,6 +701,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement /** * Returns a Map of all the LoggerConfigs. + * * @return a Map with each entry containing the name of the Logger and the LoggerConfig. */ @Override @@ -694,6 +711,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement /** * Returns the LoggerConfig with the specified name. + * * @param loggerName The Logger name. * @return The LoggerConfig or null if no match was found. */ @@ -702,8 +720,8 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } /** - * Add a loggerConfig. The LoggerConfig must already be configured with Appenders, Filters, etc. - * After addLogger is called LoggerContext.updateLoggers must be called. + * Add a loggerConfig. The LoggerConfig must already be configured with Appenders, Filters, etc. After addLogger is + * called LoggerContext.updateLoggers must be called. * * @param loggerName The name of the Logger. * @param loggerConfig The LoggerConfig. @@ -745,42 +763,42 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } } - /** - * Invokes a static factory method to either create the desired object or to create a builder object that creates - * the desired object. In the case of a factory method, it should be annotated with - * {@link org.apache.logging.log4j.core.config.plugins.PluginFactory}, and each parameter should be annotated with - * an appropriate plugin annotation depending on what that parameter describes. Parameters annotated with - * {@link org.apache.logging.log4j.core.config.plugins.PluginAttribute} must be a type that can be converted from - * a string using one of the {@link org.apache.logging.log4j.core.config.plugins.convert.TypeConverter TypeConverters}. - * Parameters with {@link org.apache.logging.log4j.core.config.plugins.PluginElement} may be any plugin class or an - * array of a plugin class. Collections and Maps are currently not supported, although the factory method that is - * called can create these from an array. - * - * Plugins can also be created using a builder class that implements - * {@link org.apache.logging.log4j.core.util.Builder}. In that case, a static method annotated with - * {@link org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute} should create the builder class, - * and the various fields in the builder class should be annotated similarly to the method parameters. However, - * instead of using PluginAttribute, one should use - * {@link org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute} where the default value can be - * specified as the default field value instead of as an additional annotation parameter. - * - * In either case, there are also annotations for specifying a - * {@link org.apache.logging.log4j.core.config.Configuration} - * ({@link org.apache.logging.log4j.core.config.plugins.PluginConfiguration}) or a - * {@link org.apache.logging.log4j.core.config.Node} - * ({@link org.apache.logging.log4j.core.config.plugins.PluginNode}). - * - * Although the happy path works, more work still needs to be done to log incorrect - * parameters. These will generally result in unhelpful InvocationTargetExceptions. - * - * @param type the type of plugin to create. - * @param node the corresponding configuration node for this plugin to create. - * @param event the LogEvent that spurred the creation of this plugin - * @return the created plugin object or {@code null} if there was an error setting it up. - * @see org.apache.logging.log4j.core.config.plugins.util.PluginBuilder - * @see org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor - * @see org.apache.logging.log4j.core.config.plugins.convert.TypeConverter - */ + /** + * Invokes a static factory method to either create the desired object or to create a builder object that creates + * the desired object. In the case of a factory method, it should be annotated with + * {@link org.apache.logging.log4j.core.config.plugins.PluginFactory}, and each parameter should be annotated with + * an appropriate plugin annotation depending on what that parameter describes. Parameters annotated with + * {@link org.apache.logging.log4j.core.config.plugins.PluginAttribute} must be a type that can be converted from a + * string using one of the {@link org.apache.logging.log4j.core.config.plugins.convert.TypeConverter TypeConverters} + * . Parameters with {@link org.apache.logging.log4j.core.config.plugins.PluginElement} may be any plugin class or + * an array of a plugin class. Collections and Maps are currently not supported, although the factory method that is + * called can create these from an array. + * + * Plugins can also be created using a builder class that implements + * {@link org.apache.logging.log4j.core.util.Builder}. In that case, a static method annotated with + * {@link org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute} should create the builder class, and + * the various fields in the builder class should be annotated similarly to the method parameters. However, instead + * of using PluginAttribute, one should use + * {@link org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute} where the default value can be + * specified as the default field value instead of as an additional annotation parameter. + * + * In either case, there are also annotations for specifying a + * {@link org.apache.logging.log4j.core.config.Configuration} ( + * {@link org.apache.logging.log4j.core.config.plugins.PluginConfiguration}) or a + * {@link org.apache.logging.log4j.core.config.Node} ( + * {@link org.apache.logging.log4j.core.config.plugins.PluginNode}). + * + * Although the happy path works, more work still needs to be done to log incorrect parameters. These will generally + * result in unhelpful InvocationTargetExceptions. + * + * @param type the type of plugin to create. + * @param node the corresponding configuration node for this plugin to create. + * @param event the LogEvent that spurred the creation of this plugin + * @return the created plugin object or {@code null} if there was an error setting it up. + * @see org.apache.logging.log4j.core.config.plugins.util.PluginBuilder + * @see org.apache.logging.log4j.core.config.plugins.visitors.PluginVisitor + * @see org.apache.logging.log4j.core.config.plugins.convert.TypeConverter + */ private Object createPluginObject(final PluginType<?> type, final Node node, final LogEvent event) { final Class<?> clazz = type.getPluginClass(); @@ -800,11 +818,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } } - return new PluginBuilder(type) - .withConfiguration(this) - .withConfigurationNode(node) - .forLogEvent(event) - .build(); + return new PluginBuilder(type).withConfiguration(this).withConfigurationNode(node).forLogEvent(event).build(); } private static Map<String, ?> createPluginMap(final Node node) { @@ -827,7 +841,7 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } private void setParents() { - for (final Map.Entry<String, LoggerConfig> entry : loggers.entrySet()) { + for (final Map.Entry<String, LoggerConfig> entry : loggers.entrySet()) { final LoggerConfig logger = entry.getValue(); String key = entry.getKey(); if (!key.isEmpty()) { @@ -847,8 +861,8 @@ public abstract class AbstractConfiguration extends AbstractFilterable implement } /** - * Reads an InputStream using buffered reads into a byte array buffer. The given InputStream will remain open - * after invocation of this method. + * Reads an InputStream using buffered reads into a byte array buffer. The given InputStream will remain open after + * invocation of this method. * * @param is the InputStream to read into a byte array buffer. * @return a byte array of the InputStream contents. http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java index 01b97ce..09d837e 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java @@ -40,6 +40,7 @@ public class AppenderControl extends AbstractFilterable { /** * Constructor. + * * @param appender The target Appender. * @param level the Level to filter on. * @param filter the Filter(s) to apply. @@ -52,9 +53,10 @@ public class AppenderControl extends AbstractFilterable { this.intLevel = level == null ? Level.ALL.intLevel() : level.intLevel(); start(); } - + /** * Returns the name the appender had when this AppenderControl was constructed. + * * @return the appender name */ public String getAppenderName() { @@ -63,6 +65,7 @@ public class AppenderControl extends AbstractFilterable { /** * Returns the Appender. + * * @return the Appender. */ public Appender getAppender() { @@ -71,6 +74,7 @@ public class AppenderControl extends AbstractFilterable { /** * Call the appender. + * * @param event The event to process. */ public void callAppender(final LogEvent event) { @@ -99,7 +103,7 @@ public class AppenderControl extends AbstractFilterable { } return false; } - + private String appenderErrorHandlerMessage(final String prefix) { String result = createErrorMsg(prefix); appender.getHandler().error(result); @@ -108,7 +112,7 @@ public class AppenderControl extends AbstractFilterable { private void callAppenderPreventRecursion(final LogEvent event) { try { - recursive.set(this); + recursive.set(this); callAppender0(event); } finally { recursive.set(null); @@ -138,7 +142,7 @@ public class AppenderControl extends AbstractFilterable { private String createErrorMsg(final String prefix) { return prefix + appender.getName(); } - + private boolean isFilteredByAppender(final LogEvent event) { return appender instanceof Filterable && ((Filterable) appender).isFiltered(event); } @@ -159,7 +163,7 @@ public class AppenderControl extends AbstractFilterable { throw ex; } } - + // AppenderControl is a helper object whose purpose is to make it // easier for LoggerConfig to manage and invoke Appenders. // LoggerConfig manages Appenders by their name. To facilitate this, @@ -176,7 +180,7 @@ public class AppenderControl extends AbstractFilterable { final AppenderControl other = (AppenderControl) obj; return Objects.equals(appenderName, other.appenderName); } - + @Override public int hashCode() { return appenderName.hashCode(); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitCompletionReliabilityStrategy.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitCompletionReliabilityStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitCompletionReliabilityStrategy.java index 4251cfa..b94224c 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitCompletionReliabilityStrategy.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitCompletionReliabilityStrategy.java @@ -47,8 +47,12 @@ public class AwaitCompletionReliabilityStrategy implements ReliabilityStrategy { this.loggerConfig = Objects.requireNonNull(loggerConfig, "loggerConfig is null"); } - /* (non-Javadoc) - * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, java.lang.String, java.lang.String, org.apache.logging.log4j.Marker, org.apache.logging.log4j.Level, org.apache.logging.log4j.message.Message, java.lang.Throwable) + /* + * (non-Javadoc) + * + * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, + * java.lang.String, java.lang.String, org.apache.logging.log4j.Marker, org.apache.logging.log4j.Level, + * org.apache.logging.log4j.message.Message, java.lang.Throwable) */ @Override public void log(final Supplier<LoggerConfig> reconfigured, final String loggerName, final String fqcn, @@ -62,8 +66,11 @@ public class AwaitCompletionReliabilityStrategy implements ReliabilityStrategy { } } - /* (non-Javadoc) - * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, org.apache.logging.log4j.core.LogEvent) + /* + * (non-Javadoc) + * + * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, + * org.apache.logging.log4j.core.LogEvent) */ @Override public void log(final Supplier<LoggerConfig> reconfigured, final LogEvent event) { @@ -75,8 +82,12 @@ public class AwaitCompletionReliabilityStrategy implements ReliabilityStrategy { } } - /* (non-Javadoc) - * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeLogEvent(org.apache.logging.log4j.core.config.LoggerConfig, org.apache.logging.log4j.util.Supplier) + /* + * (non-Javadoc) + * + * @see + * org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeLogEvent(org.apache.logging.log4j.core.config. + * LoggerConfig, org.apache.logging.log4j.util.Supplier) */ @Override public LoggerConfig getActiveLoggerConfig(final Supplier<LoggerConfig> next) { @@ -108,7 +119,9 @@ public class AwaitCompletionReliabilityStrategy implements ReliabilityStrategy { } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopAppenders() */ @Override @@ -146,8 +159,12 @@ public class AwaitCompletionReliabilityStrategy implements ReliabilityStrategy { } } - /* (non-Javadoc) - * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopConfiguration(org.apache.logging.log4j.core.config.Configuration) + /* + * (non-Javadoc) + * + * @see + * org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopConfiguration(org.apache.logging.log4j.core + * .config.Configuration) */ @Override public void beforeStopConfiguration(Configuration configuration) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.java index 750af31..5e0456c 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.java @@ -39,7 +39,7 @@ public class AwaitUnconditionallyReliabilityStrategy implements ReliabilityStrat public AwaitUnconditionallyReliabilityStrategy(final LoggerConfig loggerConfig) { this.loggerConfig = Objects.requireNonNull(loggerConfig, "loggerConfig is null"); } - + private static long sleepMillis() { return PropertiesUtil.getProperties().getLongProperty("log4j.waitMillisBeforeStopOldConfig", DEFAULT_SLEEP_MILLIS); @@ -101,8 +101,12 @@ public class AwaitUnconditionallyReliabilityStrategy implements ReliabilityStrat // no action } - /* (non-Javadoc) - * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopConfiguration(org.apache.logging.log4j.core.config.Configuration) + /* + * (non-Javadoc) + * + * @see + * org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopConfiguration(org.apache.logging.log4j.core + * .config.Configuration) */ @Override public void beforeStopConfiguration(Configuration configuration) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LockingReliabilityStrategy.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LockingReliabilityStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LockingReliabilityStrategy.java index f518ba1..5bc4f97 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LockingReliabilityStrategy.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/LockingReliabilityStrategy.java @@ -39,8 +39,12 @@ public class LockingReliabilityStrategy implements ReliabilityStrategy { this.loggerConfig = Objects.requireNonNull(loggerConfig, "loggerConfig was null"); } - /* (non-Javadoc) - * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, java.lang.String, java.lang.String, org.apache.logging.log4j.Marker, org.apache.logging.log4j.Level, org.apache.logging.log4j.message.Message, java.lang.Throwable) + /* + * (non-Javadoc) + * + * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, + * java.lang.String, java.lang.String, org.apache.logging.log4j.Marker, org.apache.logging.log4j.Level, + * org.apache.logging.log4j.message.Message, java.lang.Throwable) */ @Override public void log(final Supplier<LoggerConfig> reconfigured, final String loggerName, final String fqcn, @@ -54,8 +58,11 @@ public class LockingReliabilityStrategy implements ReliabilityStrategy { } } - /* (non-Javadoc) - * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, org.apache.logging.log4j.core.LogEvent) + /* + * (non-Javadoc) + * + * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, + * org.apache.logging.log4j.core.LogEvent) */ @Override public void log(final Supplier<LoggerConfig> reconfigured, final LogEvent event) { @@ -67,8 +74,12 @@ public class LockingReliabilityStrategy implements ReliabilityStrategy { } } - /* (non-Javadoc) - * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeLogEvent(org.apache.logging.log4j.core.config.LoggerConfig, org.apache.logging.log4j.util.Supplier) + /* + * (non-Javadoc) + * + * @see + * org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeLogEvent(org.apache.logging.log4j.core.config. + * LoggerConfig, org.apache.logging.log4j.util.Supplier) */ @Override public LoggerConfig getActiveLoggerConfig(final Supplier<LoggerConfig> next) { @@ -93,7 +104,9 @@ public class LockingReliabilityStrategy implements ReliabilityStrategy { reconfigureLock.readLock().unlock(); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopAppenders() */ @Override @@ -106,8 +119,12 @@ public class LockingReliabilityStrategy implements ReliabilityStrategy { } } - /* (non-Javadoc) - * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopConfiguration(org.apache.logging.log4j.core.config.Configuration) + /* + * (non-Javadoc) + * + * @see + * org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopConfiguration(org.apache.logging.log4j.core + * .config.Configuration) */ @Override public void beforeStopConfiguration(Configuration configuration) { http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/config/NullConfiguration.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/NullConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/NullConfiguration.java index 8a26335..5f58a79 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/NullConfiguration.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/NullConfiguration.java @@ -23,8 +23,11 @@ import org.apache.logging.log4j.Level; */ public class NullConfiguration extends AbstractConfiguration { - private static final long serialVersionUID = 1L; + /** + * Name of this configuration. + */ public static final String NULL_NAME = "Null"; + private static final long serialVersionUID = 1L; public NullConfiguration() { super(ConfigurationSource.NULL_SOURCE); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategy.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategy.java index 3c86d9c..e85eef6 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategy.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategy.java @@ -32,6 +32,7 @@ public interface ReliabilityStrategy { /** * Logs an event. * + * @param reconfigured supplies the next LoggerConfig if the strategy's LoggerConfig is no longer active * @param loggerName The name of the Logger. * @param fqcn The fully qualified class name of the caller. * @param marker A Marker or null if none is present. @@ -39,20 +40,22 @@ public interface ReliabilityStrategy { * @param data The Message. * @param t A Throwable or null. */ - void log(Supplier<LoggerConfig> reconfigured, String loggerName, String fqcn, Marker marker, - Level level, Message data, Throwable t); + void log(Supplier<LoggerConfig> reconfigured, String loggerName, String fqcn, Marker marker, Level level, + Message data, Throwable t); /** * Logs an event. * + * @param reconfigured supplies the next LoggerConfig if the strategy's LoggerConfig is no longer active * @param event The log event. */ void log(Supplier<LoggerConfig> reconfigured, LogEvent event); /** * For internal use by the ReliabilityStrategy; returns the LoggerConfig to use. - * @param next - * @return + * + * @param next supplies the next LoggerConfig if the strategy's LoggerConfig is no longer active + * @return the currently active LoggerConfig */ LoggerConfig getActiveLoggerConfig(Supplier<LoggerConfig> next); @@ -60,7 +63,7 @@ public interface ReliabilityStrategy { * Called after a log event was logged. */ void afterLogEvent(); - + /** * Called before all appenders are stopped. */ @@ -69,7 +72,7 @@ public interface ReliabilityStrategy { /** * Called before the configuration is stopped. * - * @param configuration + * @param configuration the configuration that will be stopped */ void beforeStopConfiguration(Configuration configuration); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8606650e/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.java index 8fd9458..1c8ef53 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/ReliabilityStrategyFactory.java @@ -23,7 +23,7 @@ import org.apache.logging.log4j.util.PropertiesUtil; /** * Factory for ReliabilityStrategies. */ -public class ReliabilityStrategyFactory { +public final class ReliabilityStrategyFactory { private ReliabilityStrategyFactory() { }
