<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache license, Version 2.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
<span class="sourceLineNo">010</span> *<a name="line.10"></a>
<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
<span class="sourceLineNo">014</span> * See the license for the specific language governing permissions and<a name="line.14"></a>
<span class="sourceLineNo">015</span> * limitations under the license.<a name="line.15"></a>
<span class="sourceLineNo">016</span> */<a name="line.16"></a>
<span class="sourceLineNo">017</span>package org.apache.logging.log4j.core.config;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import org.apache.logging.log4j.Level;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import org.apache.logging.log4j.Logger;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.logging.log4j.core.LoggerContext;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.logging.log4j.core.config.composite.CompositeConfiguration;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.logging.log4j.core.config.plugins.util.PluginManager;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.logging.log4j.core.config.plugins.util.PluginType;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.logging.log4j.core.lookup.Interpolator;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.logging.log4j.core.lookup.StrSubstitutor;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.logging.log4j.core.net.UrlConnectionFactory;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.logging.log4j.core.util.AuthorizationProvider;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.logging.log4j.core.util.BasicAuthorizationProvider;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.logging.log4j.core.util.FileUtils;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.logging.log4j.core.util.Loader;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.logging.log4j.core.util.NetUtils;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.logging.log4j.core.util.ReflectionUtil;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.logging.log4j.status.StatusLogger;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.logging.log4j.util.LoaderUtil;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.logging.log4j.util.PropertiesUtil;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.logging.log4j.util.Strings;<a name="line.38"></a>
<span class="sourceLineNo">039</span><a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.io.File;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.io.FileInputStream;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.io.FileNotFoundException;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import java.io.UnsupportedEncodingException;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import java.net.URI;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import java.net.URISyntaxException;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import java.net.URL;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import java.net.URLConnection;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import java.net.URLDecoder;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import java.util.ArrayList;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import java.util.Collection;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import java.util.Collections;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import java.util.List;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import java.util.Map;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import java.util.concurrent.locks.Lock;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.55"></a>
<span class="sourceLineNo">056</span><a name="line.56"></a>
<span class="sourceLineNo">057</span>/**<a name="line.57"></a>
<span class="sourceLineNo">058</span> * Factory class for parsed {@link Configuration} objects from a configuration file.<a name="line.58"></a>
<span class="sourceLineNo">059</span> * ConfigurationFactory allows the configuration implementation to be<a name="line.59"></a>
<span class="sourceLineNo">060</span> * dynamically chosen in 1 of 3 ways:<a name="line.60"></a>
<span class="sourceLineNo">061</span> * &lt;ol&gt;<a name="line.61"></a>
<span class="sourceLineNo">062</span> * &lt;li&gt;A system property named "log4j.configurationFactory" can be set with the<a name="line.62"></a>
<span class="sourceLineNo">063</span> * name of the ConfigurationFactory to be used.&lt;/li&gt;<a name="line.63"></a>
<span class="sourceLineNo">064</span> * &lt;li&gt;<a name="line.64"></a>
<span class="sourceLineNo">065</span> * {@linkplain #setConfigurationFactory(ConfigurationFactory)} can be called<a name="line.65"></a>
<span class="sourceLineNo">066</span> * with the instance of the ConfigurationFactory to be used. This must be called<a name="line.66"></a>
<span class="sourceLineNo">067</span> * before any other calls to Log4j.&lt;/li&gt;<a name="line.67"></a>
<span class="sourceLineNo">068</span> * &lt;li&gt;<a name="line.68"></a>
<span class="sourceLineNo">069</span> * A ConfigurationFactory implementation can be added to the classpath and configured as a plugin in the<a name="line.69"></a>
<span class="sourceLineNo">070</span> * {@link #CATEGORY ConfigurationFactory} category. The {@link Order} annotation should be used to configure the<a name="line.70"></a>
<span class="sourceLineNo">071</span> * factory to be the first one inspected. See<a name="line.71"></a>
<span class="sourceLineNo">072</span> * {@linkplain org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory} for an example.&lt;/li&gt;<a name="line.72"></a>
<span class="sourceLineNo">073</span> * &lt;/ol&gt;<a name="line.73"></a>
<span class="sourceLineNo">074</span> *<a name="line.74"></a>
<span class="sourceLineNo">075</span> * If the ConfigurationFactory that was added returns null on a call to<a name="line.75"></a>
<span class="sourceLineNo">076</span> * getConfiguration then any other ConfigurationFactories found as plugins will<a name="line.76"></a>
<span class="sourceLineNo">077</span> * be called in their respective order. DefaultConfiguration is always called<a name="line.77"></a>
<span class="sourceLineNo">078</span> * last if no configuration has been returned.<a name="line.78"></a>
<span class="sourceLineNo">079</span> */<a name="line.79"></a>
<span class="sourceLineNo">080</span>public abstract class ConfigurationFactory extends ConfigurationBuilderFactory {<a name="line.80"></a>
<span class="sourceLineNo">081</span><a name="line.81"></a>
<span class="sourceLineNo">082</span>    public ConfigurationFactory() {<a name="line.82"></a>
<span class="sourceLineNo">083</span>        super();<a name="line.83"></a>
<span class="sourceLineNo">084</span>        // TEMP For breakpoints<a name="line.84"></a>
<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>    /**<a name="line.87"></a>
<span class="sourceLineNo">088</span>     * Allows the ConfigurationFactory class to be specified as a system property.<a name="line.88"></a>
<span class="sourceLineNo">089</span>     */<a name="line.89"></a>
<span class="sourceLineNo">090</span>    public static final String CONFIGURATION_FACTORY_PROPERTY = "log4j.configurationFactory";<a name="line.90"></a>
<span class="sourceLineNo">091</span><a name="line.91"></a>
<span class="sourceLineNo">092</span>    /**<a name="line.92"></a>
<span class="sourceLineNo">093</span>     * Allows the location of the configuration file to be specified as a system property.<a name="line.93"></a>
<span class="sourceLineNo">094</span>     */<a name="line.94"></a>
<span class="sourceLineNo">095</span>    public static final String CONFIGURATION_FILE_PROPERTY = "log4j.configurationFile";<a name="line.95"></a>
<span class="sourceLineNo">096</span><a name="line.96"></a>
<span class="sourceLineNo">097</span>    public static final String LOG4J1_CONFIGURATION_FILE_PROPERTY = "log4j.configuration";<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>    public static final String LOG4J1_EXPERIMENTAL = "log4j1.compatibility";<a name="line.99"></a>
<span class="sourceLineNo">100</span><a name="line.100"></a>
<span class="sourceLineNo">101</span>    public static final String AUTHORIZATION_PROVIDER = "log4j2.authorizationProvider";<a name="line.101"></a>
<span class="sourceLineNo">102</span><a name="line.102"></a>
<span class="sourceLineNo">103</span>    /**<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * Plugin category used to inject a ConfigurationFactory {@link org.apache.logging.log4j.core.config.plugins.Plugin}<a name="line.104"></a>
<span class="sourceLineNo">105</span>     * class.<a name="line.105"></a>
<span class="sourceLineNo">106</span>     *<a name="line.106"></a>
<span class="sourceLineNo">107</span>     * @since 2.1<a name="line.107"></a>
<span class="sourceLineNo">108</span>     */<a name="line.108"></a>
<span class="sourceLineNo">109</span>    public static final String CATEGORY = "ConfigurationFactory";<a name="line.109"></a>
<span class="sourceLineNo">110</span><a name="line.110"></a>
<span class="sourceLineNo">111</span>    /**<a name="line.111"></a>
<span class="sourceLineNo">112</span>     * Allows subclasses access to the status logger without creating another instance.<a name="line.112"></a>
<span class="sourceLineNo">113</span>     */<a name="line.113"></a>
<span class="sourceLineNo">114</span>    protected static final Logger LOGGER = StatusLogger.getLogger();<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span>    /**<a name="line.116"></a>
<span class="sourceLineNo">117</span>     * File name prefix for test configurations.<a name="line.117"></a>
<span class="sourceLineNo">118</span>     */<a name="line.118"></a>
<span class="sourceLineNo">119</span>    protected static final String TEST_PREFIX = "log4j2-test";<a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
<span class="sourceLineNo">121</span>    /**<a name="line.121"></a>
<span class="sourceLineNo">122</span>     * File name prefix for standard configurations.<a name="line.122"></a>
<span class="sourceLineNo">123</span>     */<a name="line.123"></a>
<span class="sourceLineNo">124</span>    protected static final String DEFAULT_PREFIX = "log4j2";<a name="line.124"></a>
<span class="sourceLineNo">125</span><a name="line.125"></a>
<span class="sourceLineNo">126</span>    protected static final String LOG4J1_VERSION = "1";<a name="line.126"></a>
<span class="sourceLineNo">127</span>    protected static final String LOG4J2_VERSION = "2";<a name="line.127"></a>
<span class="sourceLineNo">128</span><a name="line.128"></a>
<span class="sourceLineNo">129</span>    /**<a name="line.129"></a>
<span class="sourceLineNo">130</span>     * The name of the classloader URI scheme.<a name="line.130"></a>
<span class="sourceLineNo">131</span>     */<a name="line.131"></a>
<span class="sourceLineNo">132</span>    private static final String CLASS_LOADER_SCHEME = "classloader";<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>    /**<a name="line.134"></a>
<span class="sourceLineNo">135</span>     * The name of the classpath URI scheme, synonymous with the classloader URI scheme.<a name="line.135"></a>
<span class="sourceLineNo">136</span>     */<a name="line.136"></a>
<span class="sourceLineNo">137</span>    private static final String CLASS_PATH_SCHEME = "classpath";<a name="line.137"></a>
<span class="sourceLineNo">138</span><a name="line.138"></a>
<span class="sourceLineNo">139</span>    private static final String OVERRIDE_PARAM = "override";<a name="line.139"></a>
<span class="sourceLineNo">140</span><a name="line.140"></a>
<span class="sourceLineNo">141</span>    private static volatile List&lt;ConfigurationFactory&gt; factories = null;<a name="line.141"></a>
<span class="sourceLineNo">142</span><a name="line.142"></a>
<span class="sourceLineNo">143</span>    private static ConfigurationFactory configFactory = new Factory();<a name="line.143"></a>
<span class="sourceLineNo">144</span><a name="line.144"></a>
<span class="sourceLineNo">145</span>    protected final StrSubstitutor substitutor = new StrSubstitutor(new Interpolator());<a name="line.145"></a>
<span class="sourceLineNo">146</span><a name="line.146"></a>
<span class="sourceLineNo">147</span>    private static final Lock LOCK = new ReentrantLock();<a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148"></a>
<span class="sourceLineNo">149</span>    private static final String HTTPS = "https";<a name="line.149"></a>
<span class="sourceLineNo">150</span>    private static final String HTTP = "http";<a name="line.150"></a>
<span class="sourceLineNo">151</span><a name="line.151"></a>
<span class="sourceLineNo">152</span>    private static volatile AuthorizationProvider authorizationProvider = null;<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
<span class="sourceLineNo">154</span>    /**<a name="line.154"></a>
<span class="sourceLineNo">155</span>     * Returns the ConfigurationFactory.<a name="line.155"></a>
<span class="sourceLineNo">156</span>     * @return the ConfigurationFactory.<a name="line.156"></a>
<span class="sourceLineNo">157</span>     */<a name="line.157"></a>
<span class="sourceLineNo">158</span>    public static ConfigurationFactory getInstance() {<a name="line.158"></a>
<span class="sourceLineNo">159</span>        // volatile works in Java 1.6+, so double-checked locking also works properly<a name="line.159"></a>
<span class="sourceLineNo">160</span>        //noinspection DoubleCheckedLocking<a name="line.160"></a>
<span class="sourceLineNo">161</span>        if (factories == null) {<a name="line.161"></a>
<span class="sourceLineNo">162</span>            LOCK.lock();<a name="line.162"></a>
<span class="sourceLineNo">163</span>            try {<a name="line.163"></a>
<span class="sourceLineNo">164</span>                if (factories == null) {<a name="line.164"></a>
<span class="sourceLineNo">165</span>                    final List&lt;ConfigurationFactory&gt; list = new ArrayList&lt;&gt;();<a name="line.165"></a>
<span class="sourceLineNo">166</span>                    PropertiesUtil props = PropertiesUtil.getProperties();<a name="line.166"></a>
<span class="sourceLineNo">167</span>                    final String factoryClass = props.getStringProperty(CONFIGURATION_FACTORY_PROPERTY);<a name="line.167"></a>
<span class="sourceLineNo">168</span>                    if (factoryClass != null) {<a name="line.168"></a>
<span class="sourceLineNo">169</span>                        addFactory(list, factoryClass);<a name="line.169"></a>
<span class="sourceLineNo">170</span>                    }<a name="line.170"></a>
<span class="sourceLineNo">171</span>                    final PluginManager manager = new PluginManager(CATEGORY);<a name="line.171"></a>
<span class="sourceLineNo">172</span>                    manager.collectPlugins();<a name="line.172"></a>
<span class="sourceLineNo">173</span>                    final Map&lt;String, PluginType&lt;?&gt;&gt; plugins = manager.getPlugins();<a name="line.173"></a>
<span class="sourceLineNo">174</span>                    final List&lt;Class&lt;? extends ConfigurationFactory&gt;&gt; ordered = new ArrayList&lt;&gt;(plugins.size());<a name="line.174"></a>
<span class="sourceLineNo">175</span>                    for (final PluginType&lt;?&gt; type : plugins.values()) {<a name="line.175"></a>
<span class="sourceLineNo">176</span>                        try {<a name="line.176"></a>
<span class="sourceLineNo">177</span>                            ordered.add(type.getPluginClass().asSubclass(ConfigurationFactory.class));<a name="line.177"></a>
<span class="sourceLineNo">178</span>                        } catch (final Exception ex) {<a name="line.178"></a>
<span class="sourceLineNo">179</span>                            LOGGER.warn("Unable to add class {}", type.getPluginClass(), ex);<a name="line.179"></a>
<span class="sourceLineNo">180</span>                        }<a name="line.180"></a>
<span class="sourceLineNo">181</span>                    }<a name="line.181"></a>
<span class="sourceLineNo">182</span>                    Collections.sort(ordered, OrderComparator.getInstance());<a name="line.182"></a>
<span class="sourceLineNo">183</span>                    for (final Class&lt;? extends ConfigurationFactory&gt; clazz : ordered) {<a name="line.183"></a>
<span class="sourceLineNo">184</span>                        addFactory(list, clazz);<a name="line.184"></a>
<span class="sourceLineNo">185</span>                    }<a name="line.185"></a>
<span class="sourceLineNo">186</span>                    // see above comments about double-checked locking<a name="line.186"></a>
<span class="sourceLineNo">187</span>                    //noinspection NonThreadSafeLazyInitialization<a name="line.187"></a>
<span class="sourceLineNo">188</span>                    factories = Collections.unmodifiableList(list);<a name="line.188"></a>
<span class="sourceLineNo">189</span>                    authorizationProvider = authorizationProvider(props);<a name="line.189"></a>
<span class="sourceLineNo">190</span>                }<a name="line.190"></a>
<span class="sourceLineNo">191</span>            } finally {<a name="line.191"></a>
<span class="sourceLineNo">192</span>                LOCK.unlock();<a name="line.192"></a>
<span class="sourceLineNo">193</span>            }<a name="line.193"></a>
<span class="sourceLineNo">194</span>        }<a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
<span class="sourceLineNo">196</span>        LOGGER.debug("Using configurationFactory {}", configFactory);<a name="line.196"></a>
<span class="sourceLineNo">197</span>        return configFactory;<a name="line.197"></a>
<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
<span class="sourceLineNo">199</span><a name="line.199"></a>
<span class="sourceLineNo">200</span>    public static AuthorizationProvider authorizationProvider(PropertiesUtil props) {<a name="line.200"></a>
<span class="sourceLineNo">201</span>        final String authClass = props.getStringProperty(AUTHORIZATION_PROVIDER);<a name="line.201"></a>
<span class="sourceLineNo">202</span>        AuthorizationProvider provider = null;<a name="line.202"></a>
<span class="sourceLineNo">203</span>        if (authClass != null) {<a name="line.203"></a>
<span class="sourceLineNo">204</span>            try {<a name="line.204"></a>
<span class="sourceLineNo">205</span>                Object obj = LoaderUtil.newInstanceOf(authClass);<a name="line.205"></a>
<span class="sourceLineNo">206</span>                if (obj instanceof AuthorizationProvider) {<a name="line.206"></a>
<span class="sourceLineNo">207</span>                    provider = (AuthorizationProvider) obj;<a name="line.207"></a>
<span class="sourceLineNo">208</span>                } else {<a name="line.208"></a>
<span class="sourceLineNo">209</span>                    LOGGER.warn("{} is not an AuthorizationProvider, using default", obj.getClass().getName());<a name="line.209"></a>
<span class="sourceLineNo">210</span>                }<a name="line.210"></a>
<span class="sourceLineNo">211</span>            } catch (Exception ex) {<a name="line.211"></a>
<span class="sourceLineNo">212</span>                LOGGER.warn("Unable to create {}, using default: {}", authClass, ex.getMessage());<a name="line.212"></a>
<span class="sourceLineNo">213</span>            }<a name="line.213"></a>
<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
<span class="sourceLineNo">215</span>        if (provider == null) {<a name="line.215"></a>
<span class="sourceLineNo">216</span>            provider = new BasicAuthorizationProvider(props);<a name="line.216"></a>
<span class="sourceLineNo">217</span>        }<a name="line.217"></a>
<span class="sourceLineNo">218</span>        return provider;<a name="line.218"></a>
<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
<span class="sourceLineNo">220</span><a name="line.220"></a>
<span class="sourceLineNo">221</span>    public static AuthorizationProvider getAuthorizationProvider() {<a name="line.221"></a>
<span class="sourceLineNo">222</span>        return authorizationProvider;<a name="line.222"></a>
<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
<span class="sourceLineNo">224</span><a name="line.224"></a>
<span class="sourceLineNo">225</span>    private static void addFactory(final Collection&lt;ConfigurationFactory&gt; list, final String factoryClass) {<a name="line.225"></a>
<span class="sourceLineNo">226</span>        try {<a name="line.226"></a>
<span class="sourceLineNo">227</span>            addFactory(list, Loader.loadClass(factoryClass).asSubclass(ConfigurationFactory.class));<a name="line.227"></a>
<span class="sourceLineNo">228</span>        } catch (final Exception ex) {<a name="line.228"></a>
<span class="sourceLineNo">229</span>            LOGGER.error("Unable to load class {}", factoryClass, ex);<a name="line.229"></a>
<span class="sourceLineNo">230</span>        }<a name="line.230"></a>
<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>    private static void addFactory(final Collection&lt;ConfigurationFactory&gt; list,<a name="line.233"></a>
<span class="sourceLineNo">234</span>                                   final Class&lt;? extends ConfigurationFactory&gt; factoryClass) {<a name="line.234"></a>
<span class="sourceLineNo">235</span>        try {<a name="line.235"></a>
<span class="sourceLineNo">236</span>            list.add(ReflectionUtil.instantiate(factoryClass));<a name="line.236"></a>
<span class="sourceLineNo">237</span>        } catch (final Exception ex) {<a name="line.237"></a>
<span class="sourceLineNo">238</span>            LOGGER.error("Unable to create instance of {}", factoryClass.getName(), ex);<a name="line.238"></a>
<span class="sourceLineNo">239</span>        }<a name="line.239"></a>
<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
<span class="sourceLineNo">241</span><a name="line.241"></a>
<span class="sourceLineNo">242</span>    /**<a name="line.242"></a>
<span class="sourceLineNo">243</span>     * Sets the configuration factory. This method is not intended for general use and may not be thread safe.<a name="line.243"></a>
<span class="sourceLineNo">244</span>     * @param factory the ConfigurationFactory.<a name="line.244"></a>
<span class="sourceLineNo">245</span>     */<a name="line.245"></a>
<span class="sourceLineNo">246</span>    public static void setConfigurationFactory(final ConfigurationFactory factory) {<a name="line.246"></a>
<span class="sourceLineNo">247</span>        configFactory = factory;<a name="line.247"></a>
<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
<span class="sourceLineNo">249</span><a name="line.249"></a>
<span class="sourceLineNo">250</span>    /**<a name="line.250"></a>
<span class="sourceLineNo">251</span>     * Resets the ConfigurationFactory to the default. This method is not intended for general use and may<a name="line.251"></a>
<span class="sourceLineNo">252</span>     * not be thread safe.<a name="line.252"></a>
<span class="sourceLineNo">253</span>     */<a name="line.253"></a>
<span class="sourceLineNo">254</span>    public static void resetConfigurationFactory() {<a name="line.254"></a>
<span class="sourceLineNo">255</span>        configFactory = new Factory();<a name="line.255"></a>
<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
<span class="sourceLineNo">257</span><a name="line.257"></a>
<span class="sourceLineNo">258</span>    /**<a name="line.258"></a>
<span class="sourceLineNo">259</span>     * Removes the ConfigurationFactory. This method is not intended for general use and may not be thread safe.<a name="line.259"></a>
<span class="sourceLineNo">260</span>     * @param factory The factory to remove.<a name="line.260"></a>
<span class="sourceLineNo">261</span>     */<a name="line.261"></a>
<span class="sourceLineNo">262</span>    public static void removeConfigurationFactory(final ConfigurationFactory factory) {<a name="line.262"></a>
<span class="sourceLineNo">263</span>        if (configFactory == factory) {<a name="line.263"></a>
<span class="sourceLineNo">264</span>            configFactory = new Factory();<a name="line.264"></a>
<span class="sourceLineNo">265</span>        }<a name="line.265"></a>
<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
<span class="sourceLineNo">267</span><a name="line.267"></a>
<span class="sourceLineNo">268</span>    protected abstract String[] getSupportedTypes();<a name="line.268"></a>
<span class="sourceLineNo">269</span><a name="line.269"></a>
<span class="sourceLineNo">270</span>    protected String getTestPrefix() {<a name="line.270"></a>
<span class="sourceLineNo">271</span>        return TEST_PREFIX;<a name="line.271"></a>
<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
<span class="sourceLineNo">273</span><a name="line.273"></a>
<span class="sourceLineNo">274</span>    protected String getDefaultPrefix() {<a name="line.274"></a>
<span class="sourceLineNo">275</span>        return DEFAULT_PREFIX;<a name="line.275"></a>
<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
<span class="sourceLineNo">277</span><a name="line.277"></a>
<span class="sourceLineNo">278</span>    protected String getVersion() {<a name="line.278"></a>
<span class="sourceLineNo">279</span>        return LOG4J2_VERSION;<a name="line.279"></a>
<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
<span class="sourceLineNo">281</span><a name="line.281"></a>
<span class="sourceLineNo">282</span>    protected boolean isActive() {<a name="line.282"></a>
<span class="sourceLineNo">283</span>        return true;<a name="line.283"></a>
<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
<span class="sourceLineNo">285</span><a name="line.285"></a>
<span class="sourceLineNo">286</span>    public abstract Configuration getConfiguration(final LoggerContext loggerContext, ConfigurationSource source);<a name="line.286"></a>
<span class="sourceLineNo">287</span><a name="line.287"></a>
<span class="sourceLineNo">288</span>    /**<a name="line.288"></a>
<span class="sourceLineNo">289</span>     * Returns the Configuration.<a name="line.289"></a>
<span class="sourceLineNo">290</span>     * @param loggerContext The logger context<a name="line.290"></a>
<span class="sourceLineNo">291</span>     * @param name The configuration name.<a name="line.291"></a>
<span class="sourceLineNo">292</span>     * @param configLocation The configuration location.<a name="line.292"></a>
<span class="sourceLineNo">293</span>     * @return The Configuration.<a name="line.293"></a>
<span class="sourceLineNo">294</span>     */<a name="line.294"></a>
<span class="sourceLineNo">295</span>    public Configuration getConfiguration(final LoggerContext loggerContext, final String name, final URI configLocation) {<a name="line.295"></a>
<span class="sourceLineNo">296</span>        if (!isActive()) {<a name="line.296"></a>
<span class="sourceLineNo">297</span>            return null;<a name="line.297"></a>
<span class="sourceLineNo">298</span>        }<a name="line.298"></a>
<span class="sourceLineNo">299</span>        if (configLocation != null) {<a name="line.299"></a>
<span class="sourceLineNo">300</span>            final ConfigurationSource source = ConfigurationSource.fromUri(configLocation);<a name="line.300"></a>
<span class="sourceLineNo">301</span>            if (source != null) {<a name="line.301"></a>
<span class="sourceLineNo">302</span>                return getConfiguration(loggerContext, source);<a name="line.302"></a>
<span class="sourceLineNo">303</span>            }<a name="line.303"></a>
<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
<span class="sourceLineNo">305</span>        return null;<a name="line.305"></a>
<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
<span class="sourceLineNo">307</span><a name="line.307"></a>
<span class="sourceLineNo">308</span>    /**<a name="line.308"></a>
<span class="sourceLineNo">309</span>     * Returns the Configuration obtained using a given ClassLoader.<a name="line.309"></a>
<span class="sourceLineNo">310</span>     * @param loggerContext The logger context<a name="line.310"></a>
<span class="sourceLineNo">311</span>     * @param name The configuration name.<a name="line.311"></a>
<span class="sourceLineNo">312</span>     * @param configLocation A URI representing the location of the configuration.<a name="line.312"></a>
<span class="sourceLineNo">313</span>     * @param loader The default ClassLoader to use. If this is {@code null}, then the<a name="line.313"></a>
<span class="sourceLineNo">314</span>     *               {@linkplain LoaderUtil#getThreadContextClassLoader() default ClassLoader} will be used.<a name="line.314"></a>
<span class="sourceLineNo">315</span>     *<a name="line.315"></a>
<span class="sourceLineNo">316</span>     * @return The Configuration.<a name="line.316"></a>
<span class="sourceLineNo">317</span>     */<a name="line.317"></a>
<span class="sourceLineNo">318</span>    public Configuration getConfiguration(final LoggerContext loggerContext, final String name, final URI configLocation, final ClassLoader loader) {<a name="line.318"></a>
<span class="sourceLineNo">319</span>        if (!isActive()) {<a name="line.319"></a>
<span class="sourceLineNo">320</span>            return null;<a name="line.320"></a>
<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
<span class="sourceLineNo">322</span>        if (loader == null) {<a name="line.322"></a>
<span class="sourceLineNo">323</span>            return getConfiguration(loggerContext, name, configLocation);<a name="line.323"></a>
<span class="sourceLineNo">324</span>        }<a name="line.324"></a>
<span class="sourceLineNo">325</span>        if (isClassLoaderUri(configLocation)) {<a name="line.325"></a>
<span class="sourceLineNo">326</span>            final String path = extractClassLoaderUriPath(configLocation);<a name="line.326"></a>
<span class="sourceLineNo">327</span>            final ConfigurationSource source = ConfigurationSource.fromResource(path, loader);<a name="line.327"></a>
<span class="sourceLineNo">328</span>            if (source != null) {<a name="line.328"></a>
<span class="sourceLineNo">329</span>                final Configuration configuration = getConfiguration(loggerContext, source);<a name="line.329"></a>
<span class="sourceLineNo">330</span>                if (configuration != null) {<a name="line.330"></a>
<span class="sourceLineNo">331</span>                    return configuration;<a name="line.331"></a>
<span class="sourceLineNo">332</span>                }<a name="line.332"></a>
<span class="sourceLineNo">333</span>            }<a name="line.333"></a>
<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
<span class="sourceLineNo">335</span>        return getConfiguration(loggerContext, name, configLocation);<a name="line.335"></a>
<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
<span class="sourceLineNo">337</span><a name="line.337"></a>
<span class="sourceLineNo">338</span>    static boolean isClassLoaderUri(final URI uri) {<a name="line.338"></a>
<span class="sourceLineNo">339</span>        if (uri == null) {<a name="line.339"></a>
<span class="sourceLineNo">340</span>            return false;<a name="line.340"></a>
<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
<span class="sourceLineNo">342</span>        final String scheme = uri.getScheme();<a name="line.342"></a>
<span class="sourceLineNo">343</span>        return scheme == null || scheme.equals(CLASS_LOADER_SCHEME) || scheme.equals(CLASS_PATH_SCHEME);<a name="line.343"></a>
<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
<span class="sourceLineNo">345</span><a name="line.345"></a>
<span class="sourceLineNo">346</span>    static String extractClassLoaderUriPath(final URI uri) {<a name="line.346"></a>
<span class="sourceLineNo">347</span>        return uri.getScheme() == null ? uri.getPath() : uri.getSchemeSpecificPart();<a name="line.347"></a>
<span class="sourceLineNo">348</span>    }<a name="line.348"></a>
<span class="sourceLineNo">349</span><a name="line.349"></a>
<span class="sourceLineNo">350</span>    /**<a name="line.350"></a>
<span class="sourceLineNo">351</span>     * Loads the configuration from the location represented by the String.<a name="line.351"></a>
<span class="sourceLineNo">352</span>     * @param config The configuration location.<a name="line.352"></a>
<span class="sourceLineNo">353</span>     * @param loader The default ClassLoader to use.<a name="line.353"></a>
<span class="sourceLineNo">354</span>     * @return The InputSource to use to read the configuration.<a name="line.354"></a>
<span class="sourceLineNo">355</span>     */<a name="line.355"></a>
<span class="sourceLineNo">356</span>    protected ConfigurationSource getInputFromString(final String config, final ClassLoader loader) {<a name="line.356"></a>
<span class="sourceLineNo">357</span>        try {<a name="line.357"></a>
<span class="sourceLineNo">358</span>            final URL url = new URL(config);<a name="line.358"></a>
<span class="sourceLineNo">359</span>            URLConnection urlConnection = UrlConnectionFactory.createConnection(url);<a name="line.359"></a>
<span class="sourceLineNo">360</span>            File file = FileUtils.fileFromUri(url.toURI());<a name="line.360"></a>
<span class="sourceLineNo">361</span>            if (file != null) {<a name="line.361"></a>
<span class="sourceLineNo">362</span>                return new ConfigurationSource(urlConnection.getInputStream(), FileUtils.fileFromUri(url.toURI()));<a name="line.362"></a>
<span class="sourceLineNo">363</span>            } else {<a name="line.363"></a>
<span class="sourceLineNo">364</span>                return new ConfigurationSource(urlConnection.getInputStream(), url, urlConnection.getLastModified());<a name="line.364"></a>
<span class="sourceLineNo">365</span>            }<a name="line.365"></a>
<span class="sourceLineNo">366</span>        } catch (final Exception ex) {<a name="line.366"></a>
<span class="sourceLineNo">367</span>            final ConfigurationSource source = ConfigurationSource.fromResource(config, loader);<a name="line.367"></a>
<span class="sourceLineNo">368</span>            if (source == null) {<a name="line.368"></a>
<span class="sourceLineNo">369</span>                try {<a name="line.369"></a>
<span class="sourceLineNo">370</span>                    final File file = new File(config);<a name="line.370"></a>
<span class="sourceLineNo">371</span>                    return new ConfigurationSource(new FileInputStream(file), file);<a name="line.371"></a>
<span class="sourceLineNo">372</span>                } catch (final FileNotFoundException fnfe) {<a name="line.372"></a>
<span class="sourceLineNo">373</span>                    // Ignore the exception<a name="line.373"></a>
<span class="sourceLineNo">374</span>                    LOGGER.catching(Level.DEBUG, fnfe);<a name="line.374"></a>
<span class="sourceLineNo">375</span>                }<a name="line.375"></a>
<span class="sourceLineNo">376</span>            }<a name="line.376"></a>
<span class="sourceLineNo">377</span>            return source;<a name="line.377"></a>
<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
<span class="sourceLineNo">380</span><a name="line.380"></a>
<span class="sourceLineNo">381</span>    /**<a name="line.381"></a>
<span class="sourceLineNo">382</span>     * Default Factory.<a name="line.382"></a>
<span class="sourceLineNo">383</span>     */<a name="line.383"></a>
<span class="sourceLineNo">384</span>    private static class Factory extends ConfigurationFactory {<a name="line.384"></a>
<span class="sourceLineNo">385</span><a name="line.385"></a>
<span class="sourceLineNo">386</span>        private static final String ALL_TYPES = "*";<a name="line.386"></a>
<span class="sourceLineNo">387</span><a name="line.387"></a>
<span class="sourceLineNo">388</span>        /**<a name="line.388"></a>
<span class="sourceLineNo">389</span>         * Default Factory Constructor.<a name="line.389"></a>
<span class="sourceLineNo">390</span>         * @param name The configuration name.<a name="line.390"></a>
<span class="sourceLineNo">391</span>         * @param configLocation The configuration location.<a name="line.391"></a>
<span class="sourceLineNo">392</span>         * @return The Configuration.<a name="line.392"></a>
<span class="sourceLineNo">393</span>         */<a name="line.393"></a>
<span class="sourceLineNo">394</span>        @Override<a name="line.394"></a>
<span class="sourceLineNo">395</span>        public Configuration getConfiguration(final LoggerContext loggerContext, final String name, final URI configLocation) {<a name="line.395"></a>
<span class="sourceLineNo">396</span><a name="line.396"></a>
<span class="sourceLineNo">397</span>            if (configLocation == null) {<a name="line.397"></a>
<span class="sourceLineNo">398</span>                final String configLocationStr = this.substitutor.replace(PropertiesUtil.getProperties()<a name="line.398"></a>
<span class="sourceLineNo">399</span>                        .getStringProperty(CONFIGURATION_FILE_PROPERTY));<a name="line.399"></a>
<span class="sourceLineNo">400</span>                if (configLocationStr != null) {<a name="line.400"></a>
<span class="sourceLineNo">401</span>                    String[] sources = parseConfigLocations(configLocationStr);<a name="line.401"></a>
<span class="sourceLineNo">402</span>                    if (sources.length &gt; 1) {<a name="line.402"></a>
<span class="sourceLineNo">403</span>                        final List&lt;AbstractConfiguration&gt; configs = new ArrayList&lt;&gt;();<a name="line.403"></a>
<span class="sourceLineNo">404</span>                        for (final String sourceLocation : sources) {<a name="line.404"></a>
<span class="sourceLineNo">405</span>                            final Configuration config = getConfiguration(loggerContext, sourceLocation.trim());<a name="line.405"></a>
<span class="sourceLineNo">406</span>                            if (config != null &amp;&amp; config instanceof AbstractConfiguration) {<a name="line.406"></a>
<span class="sourceLineNo">407</span>                                configs.add((AbstractConfiguration) config);<a name="line.407"></a>
<span class="sourceLineNo">408</span>                            } else {<a name="line.408"></a>
<span class="sourceLineNo">409</span>                                LOGGER.error("Failed to created configuration at {}", sourceLocation);<a name="line.409"></a>
<span class="sourceLineNo">410</span>                                return null;<a name="line.410"></a>
<span class="sourceLineNo">411</span>                            }<a name="line.411"></a>
<span class="sourceLineNo">412</span>                        }<a name="line.412"></a>
<span class="sourceLineNo">413</span>                        return new CompositeConfiguration(configs);<a name="line.413"></a>
<span class="sourceLineNo">414</span>                    }<a name="line.414"></a>
<span class="sourceLineNo">415</span>                    return getConfiguration(loggerContext, configLocationStr);<a name="line.415"></a>
<span class="sourceLineNo">416</span>                } else {<a name="line.416"></a>
<span class="sourceLineNo">417</span>                    final String log4j1ConfigStr = this.substitutor.replace(PropertiesUtil.getProperties()<a name="line.417"></a>
<span class="sourceLineNo">418</span>                            .getStringProperty(LOG4J1_CONFIGURATION_FILE_PROPERTY));<a name="line.418"></a>
<span class="sourceLineNo">419</span>                    if (log4j1ConfigStr != null) {<a name="line.419"></a>
<span class="sourceLineNo">420</span>                        System.setProperty(LOG4J1_EXPERIMENTAL, "true");<a name="line.420"></a>
<span class="sourceLineNo">421</span>                        return getConfiguration(LOG4J1_VERSION, loggerContext, log4j1ConfigStr);<a name="line.421"></a>
<span class="sourceLineNo">422</span>                    }<a name="line.422"></a>
<span class="sourceLineNo">423</span>                }<a name="line.423"></a>
<span class="sourceLineNo">424</span>                for (final ConfigurationFactory factory : getFactories()) {<a name="line.424"></a>
<span class="sourceLineNo">425</span>                    final String[] types = factory.getSupportedTypes();<a name="line.425"></a>
<span class="sourceLineNo">426</span>                    if (types != null) {<a name="line.426"></a>
<span class="sourceLineNo">427</span>                        for (final String type : types) {<a name="line.427"></a>
<span class="sourceLineNo">428</span>                            if (type.equals(ALL_TYPES)) {<a name="line.428"></a>
<span class="sourceLineNo">429</span>                                final Configuration config = factory.getConfiguration(loggerContext, name, configLocation);<a name="line.429"></a>
<span class="sourceLineNo">430</span>                                if (config != null) {<a name="line.430"></a>
<span class="sourceLineNo">431</span>                                    return config;<a name="line.431"></a>
<span class="sourceLineNo">432</span>                                }<a name="line.432"></a>
<span class="sourceLineNo">433</span>                            }<a name="line.433"></a>
<span class="sourceLineNo">434</span>                        }<a name="line.434"></a>
<span class="sourceLineNo">435</span>                    }<a name="line.435"></a>
<span class="sourceLineNo">436</span>                }<a name="line.436"></a>
<span class="sourceLineNo">437</span>            } else {<a name="line.437"></a>
<span class="sourceLineNo">438</span>                String[] sources = parseConfigLocations(configLocation);<a name="line.438"></a>
<span class="sourceLineNo">439</span>                if (sources.length &gt; 1) {<a name="line.439"></a>
<span class="sourceLineNo">440</span>                    final List&lt;AbstractConfiguration&gt; configs = new ArrayList&lt;&gt;();<a name="line.440"></a>
<span class="sourceLineNo">441</span>                    for (final String sourceLocation : sources) {<a name="line.441"></a>
<span class="sourceLineNo">442</span>                        final Configuration config = getConfiguration(loggerContext, sourceLocation.trim());<a name="line.442"></a>
<span class="sourceLineNo">443</span>                        if (config instanceof AbstractConfiguration) {<a name="line.443"></a>
<span class="sourceLineNo">444</span>                            configs.add((AbstractConfiguration) config);<a name="line.444"></a>
<span class="sourceLineNo">445</span>                        } else {<a name="line.445"></a>
<span class="sourceLineNo">446</span>                            LOGGER.error("Failed to created configuration at {}", sourceLocation);<a name="line.446"></a>
<span class="sourceLineNo">447</span>                            return null;<a name="line.447"></a>
<span class="sourceLineNo">448</span>                        }<a name="line.448"></a>
<span class="sourceLineNo">449</span>                    }<a name="line.449"></a>
<span class="sourceLineNo">450</span>                    return new CompositeConfiguration(configs);<a name="line.450"></a>
<span class="sourceLineNo">451</span>                }<a name="line.451"></a>
<span class="sourceLineNo">452</span>                // configLocation != null<a name="line.452"></a>
<span class="sourceLineNo">453</span>                final String configLocationStr = configLocation.toString();<a name="line.453"></a>
<span class="sourceLineNo">454</span>                for (final ConfigurationFactory factory : getFactories()) {<a name="line.454"></a>
<span class="sourceLineNo">455</span>                    final String[] types = factory.getSupportedTypes();<a name="line.455"></a>
<span class="sourceLineNo">456</span>                    if (types != null) {<a name="line.456"></a>
<span class="sourceLineNo">457</span>                        for (final String type : types) {<a name="line.457"></a>
<span class="sourceLineNo">458</span>                            if (type.equals(ALL_TYPES) || configLocationStr.endsWith(type)) {<a name="line.458"></a>
<span class="sourceLineNo">459</span>                                final Configuration config = factory.getConfiguration(loggerContext, name, configLocation);<a name="line.459"></a>
<span class="sourceLineNo">460</span>                                if (config != null) {<a name="line.460"></a>
<span class="sourceLineNo">461</span>                                    return config;<a name="line.461"></a>
<span class="sourceLineNo">462</span>                                }<a name="line.462"></a>
<span class="sourceLineNo">463</span>                            }<a name="line.463"></a>
<span class="sourceLineNo">464</span>                        }<a name="line.464"></a>
<span class="sourceLineNo">465</span>                    }<a name="line.465"></a>
<span class="sourceLineNo">466</span>                }<a name="line.466"></a>
<span class="sourceLineNo">467</span>            }<a name="line.467"></a>
<span class="sourceLineNo">468</span><a name="line.468"></a>
<span class="sourceLineNo">469</span>            Configuration config = getConfiguration(loggerContext, true, name);<a name="line.469"></a>
<span class="sourceLineNo">470</span>            if (config == null) {<a name="line.470"></a>
<span class="sourceLineNo">471</span>                config = getConfiguration(loggerContext, true, null);<a name="line.471"></a>
<span class="sourceLineNo">472</span>                if (config == null) {<a name="line.472"></a>
<span class="sourceLineNo">473</span>                    config = getConfiguration(loggerContext, false, name);<a name="line.473"></a>
<span class="sourceLineNo">474</span>                    if (config == null) {<a name="line.474"></a>
<span class="sourceLineNo">475</span>                        config = getConfiguration(loggerContext, false, null);<a name="line.475"></a>
<span class="sourceLineNo">476</span>                    }<a name="line.476"></a>
<span class="sourceLineNo">477</span>                }<a name="line.477"></a>
<span class="sourceLineNo">478</span>            }<a name="line.478"></a>
<span class="sourceLineNo">479</span>            if (config != null) {<a name="line.479"></a>
<span class="sourceLineNo">480</span>                return config;<a name="line.480"></a>
<span class="sourceLineNo">481</span>            }<a name="line.481"></a>
<span class="sourceLineNo">482</span>            LOGGER.warn("No Log4j 2 configuration file found. " +<a name="line.482"></a>
<span class="sourceLineNo">483</span>                    "Using default configuration (logging only errors to the console), " +<a name="line.483"></a>
<span class="sourceLineNo">484</span>                    "or user programmatically provided configurations. " +<a name="line.484"></a>
<span class="sourceLineNo">485</span>                    "Set system property 'log4j2.debug' " +<a name="line.485"></a>
<span class="sourceLineNo">486</span>                    "to show Log4j 2 internal initialization logging. " +<a name="line.486"></a>
<span class="sourceLineNo">487</span>                    "See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2");<a name="line.487"></a>
<span class="sourceLineNo">488</span>            return new DefaultConfiguration();<a name="line.488"></a>
<span class="sourceLineNo">489</span>        }<a name="line.489"></a>
<span class="sourceLineNo">490</span><a name="line.490"></a>
<span class="sourceLineNo">491</span>        private Configuration getConfiguration(final LoggerContext loggerContext, final String configLocationStr) {<a name="line.491"></a>
<span class="sourceLineNo">492</span>            return getConfiguration(null, loggerContext, configLocationStr);<a name="line.492"></a>
<span class="sourceLineNo">493</span>        }<a name="line.493"></a>
<span class="sourceLineNo">494</span><a name="line.494"></a>
<span class="sourceLineNo">495</span>        private Configuration getConfiguration(String requiredVersion, final LoggerContext loggerContext,<a name="line.495"></a>
<span class="sourceLineNo">496</span>                final String configLocationStr) {<a name="line.496"></a>
<span class="sourceLineNo">497</span>            ConfigurationSource source = null;<a name="line.497"></a>
<span class="sourceLineNo">498</span>            try {<a name="line.498"></a>
<span class="sourceLineNo">499</span>                source = ConfigurationSource.fromUri(NetUtils.toURI(configLocationStr));<a name="line.499"></a>
<span class="sourceLineNo">500</span>            } catch (final Exception ex) {<a name="line.500"></a>
<span class="sourceLineNo">501</span>                // Ignore the error and try as a String.<a name="line.501"></a>
<span class="sourceLineNo">502</span>                LOGGER.catching(Level.DEBUG, ex);<a name="line.502"></a>
<span class="sourceLineNo">503</span>            }<a name="line.503"></a>
<span class="sourceLineNo">504</span>            if (source == null) {<a name="line.504"></a>
<span class="sourceLineNo">505</span>                final ClassLoader loader = LoaderUtil.getThreadContextClassLoader();<a name="line.505"></a>
<span class="sourceLineNo">506</span>                source = getInputFromString(configLocationStr, loader);<a name="line.506"></a>
<span class="sourceLineNo">507</span>            }<a name="line.507"></a>
<span class="sourceLineNo">508</span>            if (source != null) {<a name="line.508"></a>
<span class="sourceLineNo">509</span>                for (final ConfigurationFactory factory : getFactories()) {<a name="line.509"></a>
<span class="sourceLineNo">510</span>                    if (requiredVersion != null &amp;&amp; !factory.getVersion().equals(requiredVersion)) {<a name="line.510"></a>
<span class="sourceLineNo">511</span>                        continue;<a name="line.511"></a>
<span class="sourceLineNo">512</span>                    }<a name="line.512"></a>
<span class="sourceLineNo">513</span>                    final String[] types = factory.getSupportedTypes();<a name="line.513"></a>
<span class="sourceLineNo">514</span>                    if (types != null) {<a name="line.514"></a>
<span class="sourceLineNo">515</span>                        for (final String type : types) {<a name="line.515"></a>
<span class="sourceLineNo">516</span>                            if (type.equals(ALL_TYPES) || configLocationStr.endsWith(type)) {<a name="line.516"></a>
<span class="sourceLineNo">517</span>                                final Configuration config = factory.getConfiguration(loggerContext, source);<a name="line.517"></a>
<span class="sourceLineNo">518</span>                                if (config != null) {<a name="line.518"></a>
<span class="sourceLineNo">519</span>                                    return config;<a name="line.519"></a>
<span class="sourceLineNo">520</span>                                }<a name="line.520"></a>
<span class="sourceLineNo">521</span>                            }<a name="line.521"></a>
<span class="sourceLineNo">522</span>                        }<a name="line.522"></a>
<span class="sourceLineNo">523</span>                    }<a name="line.523"></a>
<span class="sourceLineNo">524</span>                }<a name="line.524"></a>
<span class="sourceLineNo">525</span>            }<a name="line.525"></a>
<span class="sourceLineNo">526</span>            return null;<a name="line.526"></a>
<span class="sourceLineNo">527</span>        }<a name="line.527"></a>
<span class="sourceLineNo">528</span><a name="line.528"></a>
<span class="sourceLineNo">529</span>        private Configuration getConfiguration(final LoggerContext loggerContext, final boolean isTest, final String name) {<a name="line.529"></a>
<span class="sourceLineNo">530</span>            final boolean named = Strings.isNotEmpty(name);<a name="line.530"></a>
<span class="sourceLineNo">531</span>            final ClassLoader loader = LoaderUtil.getThreadContextClassLoader();<a name="line.531"></a>
<span class="sourceLineNo">532</span>            for (final ConfigurationFactory factory : getFactories()) {<a name="line.532"></a>
<span class="sourceLineNo">533</span>                String configName;<a name="line.533"></a>
<span class="sourceLineNo">534</span>                final String prefix = isTest ? factory.getTestPrefix() : factory.getDefaultPrefix();<a name="line.534"></a>
<span class="sourceLineNo">535</span>                final String [] types = factory.getSupportedTypes();<a name="line.535"></a>
<span class="sourceLineNo">536</span>                if (types == null) {<a name="line.536"></a>
<span class="sourceLineNo">537</span>                    continue;<a name="line.537"></a>
<span class="sourceLineNo">538</span>                }<a name="line.538"></a>
<span class="sourceLineNo">539</span><a name="line.539"></a>
<span class="sourceLineNo">540</span>                for (final String suffix : types) {<a name="line.540"></a>
<span class="sourceLineNo">541</span>                    if (suffix.equals(ALL_TYPES)) {<a name="line.541"></a>
<span class="sourceLineNo">542</span>                        continue;<a name="line.542"></a>
<span class="sourceLineNo">543</span>                    }<a name="line.543"></a>
<span class="sourceLineNo">544</span>                    configName = named ? prefix + name + suffix : prefix + suffix;<a name="line.544"></a>
<span class="sourceLineNo">545</span><a name="line.545"></a>
<span class="sourceLineNo">546</span>                    final ConfigurationSource source = ConfigurationSource.fromResource(configName, loader);<a name="line.546"></a>
<span class="sourceLineNo">547</span>                    if (source != null) {<a name="line.547"></a>
<span class="sourceLineNo">548</span>                        if (!factory.isActive()) {<a name="line.548"></a>
<span class="sourceLineNo">549</span>                            LOGGER.warn("Found configuration file {} for inactive ConfigurationFactory {}", configName, factory.getClass().getName());<a name="line.549"></a>
<span class="sourceLineNo">550</span>                        }<a name="line.550"></a>
<span class="sourceLineNo">551</span>                        return factory.getConfiguration(loggerContext, source);<a name="line.551"></a>
<span class="sourceLineNo">552</span>                    }<a name="line.552"></a>
<span class="sourceLineNo">553</span>                }<a name="line.553"></a>
<span class="sourceLineNo">554</span>            }<a name="line.554"></a>
<span class="sourceLineNo">555</span>            return null;<a name="line.555"></a>
<span class="sourceLineNo">556</span>        }<a name="line.556"></a>
<span class="sourceLineNo">557</span><a name="line.557"></a>
<span class="sourceLineNo">558</span>        @Override<a name="line.558"></a>
<span class="sourceLineNo">559</span>        public String[] getSupportedTypes() {<a name="line.559"></a>
<span class="sourceLineNo">560</span>            return null;<a name="line.560"></a>
<span class="sourceLineNo">561</span>        }<a name="line.561"></a>
<span class="sourceLineNo">562</span><a name="line.562"></a>
<span class="sourceLineNo">563</span>        @Override<a name="line.563"></a>
<span class="sourceLineNo">564</span>        public Configuration getConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {<a name="line.564"></a>
<span class="sourceLineNo">565</span>            if (source != null) {<a name="line.565"></a>
<span class="sourceLineNo">566</span>                final String config = source.getLocation();<a name="line.566"></a>
<span class="sourceLineNo">567</span>                for (final ConfigurationFactory factory : getFactories()) {<a name="line.567"></a>
<span class="sourceLineNo">568</span>                    final String[] types = factory.getSupportedTypes();<a name="line.568"></a>
<span class="sourceLineNo">569</span>                    if (types != null) {<a name="line.569"></a>
<span class="sourceLineNo">570</span>                        for (final String type : types) {<a name="line.570"></a>
<span class="sourceLineNo">571</span>                            if (type.equals(ALL_TYPES) || config != null &amp;&amp; config.endsWith(type)) {<a name="line.571"></a>
<span class="sourceLineNo">572</span>                                final Configuration c = factory.getConfiguration(loggerContext, source);<a name="line.572"></a>
<span class="sourceLineNo">573</span>                                if (c != null) {<a name="line.573"></a>
<span class="sourceLineNo">574</span>                                    LOGGER.debug("Loaded configuration from {}", source);<a name="line.574"></a>
<span class="sourceLineNo">575</span>                                    return c;<a name="line.575"></a>
<span class="sourceLineNo">576</span>                                }<a name="line.576"></a>
<span class="sourceLineNo">577</span>                                LOGGER.error("Cannot determine the ConfigurationFactory to use for {}", config);<a name="line.577"></a>
<span class="sourceLineNo">578</span>                                return null;<a name="line.578"></a>
<span class="sourceLineNo">579</span>                            }<a name="line.579"></a>
<span class="sourceLineNo">580</span>                        }<a name="line.580"></a>
<span class="sourceLineNo">581</span>                    }<a name="line.581"></a>
<span class="sourceLineNo">582</span>                }<a name="line.582"></a>
<span class="sourceLineNo">583</span>            }<a name="line.583"></a>
<span class="sourceLineNo">584</span>            LOGGER.error("Cannot process configuration, input source is null");<a name="line.584"></a>
<span class="sourceLineNo">585</span>            return null;<a name="line.585"></a>
<span class="sourceLineNo">586</span>        }<a name="line.586"></a>
<span class="sourceLineNo">587</span><a name="line.587"></a>
<span class="sourceLineNo">588</span>        private String[] parseConfigLocations(URI configLocations) {<a name="line.588"></a>
<span class="sourceLineNo">589</span>            final String[] uris = configLocations.toString().split("\\?");<a name="line.589"></a>
<span class="sourceLineNo">590</span>            final List&lt;String&gt; locations = new ArrayList&lt;&gt;();<a name="line.590"></a>
<span class="sourceLineNo">591</span>            if (uris.length &gt; 1) {<a name="line.591"></a>
<span class="sourceLineNo">592</span>                locations.add(uris[0]);<a name="line.592"></a>
<span class="sourceLineNo">593</span>                final String[] pairs = configLocations.getQuery().split("&amp;");<a name="line.593"></a>
<span class="sourceLineNo">594</span>                for (String pair : pairs) {<a name="line.594"></a>
<span class="sourceLineNo">595</span>                    final int idx = pair.indexOf("=");<a name="line.595"></a>
<span class="sourceLineNo">596</span>                    try {<a name="line.596"></a>
<span class="sourceLineNo">597</span>                        final String key = idx &gt; 0 ? URLDecoder.decode(pair.substring(0, idx), "UTF-8") : pair;<a name="line.597"></a>
<span class="sourceLineNo">598</span>                        if (key.equalsIgnoreCase(OVERRIDE_PARAM)) {<a name="line.598"></a>
<span class="sourceLineNo">599</span>                            locations.add(URLDecoder.decode(pair.substring(idx + 1), "UTF-8"));<a name="line.599"></a>
<span class="sourceLineNo">600</span>                        }<a name="line.600"></a>
<span class="sourceLineNo">601</span>                    } catch (UnsupportedEncodingException ex) {<a name="line.601"></a>
<span class="sourceLineNo">602</span>                        LOGGER.warn("Invalid query parameter in {}", configLocations);<a name="line.602"></a>
<span class="sourceLineNo">603</span>                    }<a name="line.603"></a>
<span class="sourceLineNo">604</span>                }<a name="line.604"></a>
<span class="sourceLineNo">605</span>                return locations.toArray(new String[0]);<a name="line.605"></a>
<span class="sourceLineNo">606</span>            }<a name="line.606"></a>
<span class="sourceLineNo">607</span>            return new String[] {uris[0]};<a name="line.607"></a>
<span class="sourceLineNo">608</span>        }<a name="line.608"></a>
<span class="sourceLineNo">609</span><a name="line.609"></a>
<span class="sourceLineNo">610</span>        private String[] parseConfigLocations(String configLocations) {<a name="line.610"></a>
<span class="sourceLineNo">611</span>            final String[] uris = configLocations.split(",");<a name="line.611"></a>
<span class="sourceLineNo">612</span>            if (uris.length &gt; 1) {<a name="line.612"></a>
<span class="sourceLineNo">613</span>                return uris;<a name="line.613"></a>
<span class="sourceLineNo">614</span>            }<a name="line.614"></a>
<span class="sourceLineNo">615</span>            try {<a name="line.615"></a>
<span class="sourceLineNo">616</span>                return parseConfigLocations(new URI(configLocations));<a name="line.616"></a>
<span class="sourceLineNo">617</span>            } catch (URISyntaxException ex) {<a name="line.617"></a>
<span class="sourceLineNo">618</span>                LOGGER.warn("Error parsing URI {}", configLocations);<a name="line.618"></a>
<span class="sourceLineNo">619</span>            }<a name="line.619"></a>
<span class="sourceLineNo">620</span>            return new String[] {configLocations};<a name="line.620"></a>
<span class="sourceLineNo">621</span>        }<a name="line.621"></a>
<span class="sourceLineNo">622</span>    }<a name="line.622"></a>
<span class="sourceLineNo">623</span><a name="line.623"></a>
<span class="sourceLineNo">624</span>    static List&lt;ConfigurationFactory&gt; getFactories() {<a name="line.624"></a>
<span class="sourceLineNo">625</span>        return factories;<a name="line.625"></a>
<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
<span class="sourceLineNo">627</span>}<a name="line.627"></a>




























































</pre>
</div>
</body>
</html>
