Class AbstractConfiguration

    • Field Detail

      • rootNode

        protected Node rootNode
        The root node of the configuration.
      • listeners

        protected final java.util.List<ConfigurationListener> listeners
        Listeners for configuration changes.
      • pluginPackages

        protected final java.util.List<java.lang.String> pluginPackages
        Packages found in configuration "packages" attribute.
      • pluginManager

        protected PluginManager pluginManager
        The plugin manager.
      • isShutdownHookEnabled

        protected boolean isShutdownHookEnabled
        Shutdown hook is enabled by default.
      • shutdownTimeoutMillis

        protected long shutdownTimeoutMillis
        Shutdown timeout in milliseconds.
      • scriptManager

        protected ScriptManager scriptManager
        The Script manager.
      • advertiser

        private Advertiser advertiser
        The Advertiser which exposes appender configurations to external systems.
      • advertiserNode

        private Node advertiserNode
      • advertisement

        private java.lang.Object advertisement
      • name

        private java.lang.String name
      • appenders

        private java.util.concurrent.ConcurrentMap<java.lang.String,​Appender> appenders
      • loggerConfigs

        private java.util.concurrent.ConcurrentMap<java.lang.String,​LoggerConfig> loggerConfigs
      • propertyMap

        private final java.util.concurrent.ConcurrentMap<java.lang.String,​java.lang.String> propertyMap
      • tempLookup

        private final StrLookup tempLookup
      • runtimeStrSubstitutor

        private final StrSubstitutor runtimeStrSubstitutor
      • configurationStrSubstitutor

        private final StrSubstitutor configurationStrSubstitutor
      • componentMap

        private final java.util.concurrent.ConcurrentMap<java.lang.String,​java.lang.Object> componentMap
      • loggerContext

        private final java.lang.ref.WeakReference<LoggerContext> loggerContext
    • Method Detail

      • getPluginPackages

        public java.util.List<java.lang.String> getPluginPackages()
        Description copied from interface: Configuration
        Returns the list of packages to scan for plugins for this Configuration.
        Specified by:
        getPluginPackages in interface Configuration
        Returns:
        the list of plugin packages.
      • getProperties

        public java.util.Map<java.lang.String,​java.lang.String> getProperties()
        Specified by:
        getProperties in interface Configuration
      • setScriptManager

        public void setScriptManager​(ScriptManager scriptManager)
      • setPluginManager

        public void setPluginManager​(PluginManager pluginManager)
      • getRootNode

        public Node getRootNode()
      • hasAsyncLoggers

        private boolean hasAsyncLoggers()
      • stop

        public boolean stop​(long timeout,
                            java.util.concurrent.TimeUnit timeUnit)
        Tear down the configuration.
        Specified by:
        stop in interface LifeCycle2
        Overrides:
        stop in class AbstractFilterable
        Parameters:
        timeout - the maximum time to wait
        timeUnit - the time unit of the timeout argument
        Returns:
        true if the receiver was stopped cleanly and normally, false otherwise.
      • getAsyncAppenders

        private java.util.List<Appender> getAsyncAppenders​(Appender[] all)
      • setup

        public void setup()
      • getDefaultStatus

        protected Level getDefaultStatus()
      • createAdvertiser

        protected void createAdvertiser​(java.lang.String advertiserString,
                                        ConfigurationSource configSource,
                                        byte[] buffer,
                                        java.lang.String contentType)
      • setupAdvertisement

        private void setupAdvertisement()
      • getComponent

        public <T> T getComponent​(java.lang.String componentName)
        Specified by:
        getComponent in interface Configuration
      • addComponent

        public void addComponent​(java.lang.String componentName,
                                 java.lang.Object obj)
        Specified by:
        addComponent in interface Configuration
      • preConfigure

        protected void preConfigure​(Node node)
      • processConditionals

        protected void processConditionals​(Node node)
        Process conditions by evaluating them and including the children of conditions that are true and discarding those that are not.
        Parameters:
        node - The node to evaluate.
      • processSelect

        protected java.util.List<Node> processSelect​(Node selectNode,
                                                     PluginType<?> type)
        Handle Select nodes. This finds the first child condition that returns true and attaches its children to the parent of the Select Node. Other Nodes are discarded.
        Parameters:
        selectNode - The Select Node.
        type - The PluginType of the Select Node.
        Returns:
        The list of Nodes to be added to the parent.
      • doConfigure

        protected void doConfigure()
      • getDefaultLevel

        public static Level getDefaultLevel()
      • setToDefault

        protected void setToDefault()
      • setName

        public void setName​(java.lang.String name)
        Set the name of the configuration.
        Parameters:
        name - The name.
      • getName

        public java.lang.String getName()
        Returns the name of the configuration.
        Specified by:
        getName in interface Configuration
        Returns:
        the name of the configuration.
      • addListener

        public void addListener​(ConfigurationListener listener)
        Add a listener for changes on the configuration.
        Specified by:
        addListener in interface Configuration
        Parameters:
        listener - The ConfigurationListener to add.
      • getAppender

        public <T extends Appender> T getAppender​(java.lang.String appenderName)
        Returns the Appender with the specified name.
        Specified by:
        getAppender in interface Configuration
        Type Parameters:
        T - The expected Appender type.
        Parameters:
        appenderName - The name of the Appender.
        Returns:
        the Appender with the specified name or null if the Appender cannot be located.
      • getAppenders

        public java.util.Map<java.lang.String,​Appender> getAppenders()
        Returns a Map containing all the Appenders and their name.
        Specified by:
        getAppenders in interface Configuration
        Returns:
        A Map containing each Appender's name and the Appender object.
      • addAppender

        public void addAppender​(Appender appender)
        Adds an Appender to the configuration.
        Specified by:
        addAppender in interface Configuration
        Parameters:
        appender - The Appender to add.
      • addLoggerAppender

        public void addLoggerAppender​(Logger logger,
                                      Appender appender)
        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.
        Specified by:
        addLoggerAppender in interface Configuration
        Parameters:
        logger - The Logger the Appender will be associated with.
        appender - The Appender.
      • addLoggerFilter

        public void addLoggerFilter​(Logger logger,
                                    Filter filter)
        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.
        Specified by:
        addLoggerFilter in interface Configuration
        Parameters:
        logger - The Logger the Footer will be associated with.
        filter - The Filter.
      • setLoggerAdditive

        public void setLoggerAdditive​(Logger logger,
                                      boolean additive)
        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.
        Specified by:
        setLoggerAdditive in interface Configuration
        Parameters:
        logger - The Logger the Appender will be associated with.
        additive - True if the LoggerConfig should be additive, false otherwise.
      • removeAppender

        public void removeAppender​(java.lang.String appenderName)
        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.
        Parameters:
        appenderName - the name of the appender to remove.
      • getCustomLevels

        public java.util.List<CustomLevelConfig> getCustomLevels()
        Description copied from interface: Configuration

        Returns a list of descriptors of the custom levels defined in the current configuration. The returned list does not include custom levels that are defined in code with direct calls to Level.forName(String, int).

        Note that the list does not include levels of previous configurations. For example, suppose a configuration contains custom levels A, B and C. The configuration is then modified to contain custom levels B, C and D. For the new configuration, this method will return only {B, C, D}, that is, only the custom levels defined in this configuration. The previously defined level A still exists (and can be obtained with Level.getLevel(String)), it is just not in the current configuration. Level.values() will return {A, B, C, D and the built-in levels}.

        Specified by:
        getCustomLevels in interface Configuration
        Returns:
        the custom levels defined in the current configuration
      • getLoggerConfig

        public LoggerConfig getLoggerConfig​(java.lang.String loggerName)
        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.
        Specified by:
        getLoggerConfig in interface Configuration
        Parameters:
        loggerName - The Logger name.
        Returns:
        The located LoggerConfig.
      • getLoggers

        public java.util.Map<java.lang.String,​LoggerConfig> getLoggers()
        Returns a Map of all the LoggerConfigs.
        Specified by:
        getLoggers in interface Configuration
        Returns:
        a Map with each entry containing the name of the Logger and the LoggerConfig.
      • getLogger

        public LoggerConfig getLogger​(java.lang.String loggerName)
        Returns the LoggerConfig with the specified name.
        Parameters:
        loggerName - The Logger name.
        Returns:
        The LoggerConfig or null if no match was found.
      • addLogger

        public void addLogger​(java.lang.String loggerName,
                              LoggerConfig loggerConfig)
        Add a loggerConfig. The LoggerConfig must already be configured with Appenders, Filters, etc. After addLogger is called LoggerContext.updateLoggers must be called.
        Specified by:
        addLogger in interface Configuration
        Parameters:
        loggerName - The name of the Logger.
        loggerConfig - The LoggerConfig.
      • removeLogger

        public void removeLogger​(java.lang.String loggerName)
        Remove a LoggerConfig.
        Specified by:
        removeLogger in interface Configuration
        Parameters:
        loggerName - The name of the Logger.
      • createPluginObject

        public java.lang.Object createPluginObject​(PluginType<?> type,
                                                   Node node)
        This method is used by Arbiters to create specific children.
        Parameters:
        type - The PluginType.
        node - The Node.
        Returns:
        The created object or null;
      • createPluginObject

        private java.lang.Object createPluginObject​(PluginType<?> type,
                                                    Node node,
                                                    LogEvent event)
        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 PluginFactory, and each parameter should be annotated with an appropriate plugin annotation depending on what that parameter describes. Parameters annotated with PluginAttribute must be a type that can be converted from a string using one of the TypeConverters . Parameters with 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 Builder. In that case, a static method annotated with 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 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 Configuration ( PluginConfiguration) or a Node ( PluginNode). Although the happy path works, more work still needs to be done to log incorrect parameters. These will generally result in unhelpful InvocationTargetExceptions.
        Parameters:
        type - the type of plugin to create.
        node - the corresponding configuration node for this plugin to create.
        event - the LogEvent that spurred the creation of this plugin
        Returns:
        the created plugin object or null if there was an error setting it up.
        See Also:
        PluginBuilder, PluginVisitor, TypeConverter
      • createPluginMap

        private static java.util.Map<java.lang.String,​?> createPluginMap​(Node node)
      • createPluginCollection

        private static java.util.Collection<?> createPluginCollection​(Node node)
      • setParents

        private void setParents()
      • toByteArray

        protected static byte[] toByteArray​(java.io.InputStream is)
                                     throws java.io.IOException
        Reads an InputStream using buffered reads into a byte array buffer. The given InputStream will remain open after invocation of this method.
        Parameters:
        is - the InputStream to read into a byte array buffer.
        Returns:
        a byte array of the InputStream contents.
        Throws:
        java.io.IOException - if the read method of the provided InputStream throws this exception.
      • setNanoClock

        public void setNanoClock​(NanoClock nanoClock)
        Description copied from interface: Configuration
        Sets the NanoClock instance for this configuration.
        Specified by:
        setNanoClock in interface Configuration
        Parameters:
        nanoClock - the new nano clock for this configuration. Must be non-null.