<!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.log4j.config;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import org.apache.log4j.Appender;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import org.apache.log4j.Layout;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.log4j.LogManager;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.log4j.PatternLayout;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.log4j.bridge.AppenderAdapter;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.log4j.bridge.AppenderWrapper;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.log4j.builders.BuilderManager;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.log4j.helpers.OptionConverter;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.log4j.spi.ErrorHandler;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.log4j.spi.Filter;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.logging.log4j.core.LoggerContext;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.logging.log4j.core.config.ConfigurationSource;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.logging.log4j.core.config.LoggerConfig;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.logging.log4j.core.config.status.StatusConfiguration;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.logging.log4j.util.LoaderUtil;<a name="line.33"></a>
<span class="sourceLineNo">034</span><a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.io.InputStream;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.lang.reflect.InvocationTargetException;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.util.ArrayList;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.Enumeration;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.HashMap;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.util.List;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.util.Map;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.util.Properties;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import java.util.SortedMap;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import java.util.StringTokenizer;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import java.util.TreeMap;<a name="line.45"></a>
<span class="sourceLineNo">046</span><a name="line.46"></a>
<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
<span class="sourceLineNo">048</span> * Construct a configuration based on Log4j 1 properties.<a name="line.48"></a>
<span class="sourceLineNo">049</span> */<a name="line.49"></a>
<span class="sourceLineNo">050</span>public class PropertiesConfiguration  extends Log4j1Configuration {<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>    private static final String CATEGORY_PREFIX = "log4j.category.";<a name="line.52"></a>
<span class="sourceLineNo">053</span>    private static final String LOGGER_PREFIX = "log4j.logger.";<a name="line.53"></a>
<span class="sourceLineNo">054</span>    private static final String ADDITIVITY_PREFIX = "log4j.additivity.";<a name="line.54"></a>
<span class="sourceLineNo">055</span>    private static final String ROOT_CATEGORY_PREFIX = "log4j.rootCategory";<a name="line.55"></a>
<span class="sourceLineNo">056</span>    private static final String ROOT_LOGGER_PREFIX = "log4j.rootLogger";<a name="line.56"></a>
<span class="sourceLineNo">057</span>    private static final String APPENDER_PREFIX = "log4j.appender.";<a name="line.57"></a>
<span class="sourceLineNo">058</span>    private static final String LOGGER_REF      = "logger-ref";<a name="line.58"></a>
<span class="sourceLineNo">059</span>    private static final String ROOT_REF                = "root-ref";<a name="line.59"></a>
<span class="sourceLineNo">060</span>    private static final String APPENDER_REF_TAG = "appender-ref";<a name="line.60"></a>
<span class="sourceLineNo">061</span>    public static final long DEFAULT_DELAY = 60000;<a name="line.61"></a>
<span class="sourceLineNo">062</span>    public static final String DEBUG_KEY="log4j.debug";<a name="line.62"></a>
<span class="sourceLineNo">063</span><a name="line.63"></a>
<span class="sourceLineNo">064</span>    private static final String INTERNAL_ROOT_NAME = "root";<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>    private final Map&lt;String, Appender&gt; registry;<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span>    /**<a name="line.68"></a>
<span class="sourceLineNo">069</span>     * Constructor.<a name="line.69"></a>
<span class="sourceLineNo">070</span>     * @param loggerContext The LoggerContext.<a name="line.70"></a>
<span class="sourceLineNo">071</span>     * @param source The ConfigurationSource.<a name="line.71"></a>
<span class="sourceLineNo">072</span>     * @param monitorIntervalSeconds The monitoring interval in seconds.<a name="line.72"></a>
<span class="sourceLineNo">073</span>     */<a name="line.73"></a>
<span class="sourceLineNo">074</span>    public PropertiesConfiguration(final LoggerContext loggerContext, final ConfigurationSource source,<a name="line.74"></a>
<span class="sourceLineNo">075</span>            int monitorIntervalSeconds) {<a name="line.75"></a>
<span class="sourceLineNo">076</span>        super(loggerContext, source, monitorIntervalSeconds);<a name="line.76"></a>
<span class="sourceLineNo">077</span>        registry = new HashMap&lt;&gt;();<a name="line.77"></a>
<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span>    public void doConfigure() {<a name="line.80"></a>
<span class="sourceLineNo">081</span>        InputStream is = getConfigurationSource().getInputStream();<a name="line.81"></a>
<span class="sourceLineNo">082</span>        Properties props = new Properties();<a name="line.82"></a>
<span class="sourceLineNo">083</span>        try {<a name="line.83"></a>
<span class="sourceLineNo">084</span>            props.load(is);<a name="line.84"></a>
<span class="sourceLineNo">085</span>        } catch (Exception e) {<a name="line.85"></a>
<span class="sourceLineNo">086</span>            LOGGER.error("Could not read configuration file [{}].", getConfigurationSource().toString(), e);<a name="line.86"></a>
<span class="sourceLineNo">087</span>            return;<a name="line.87"></a>
<span class="sourceLineNo">088</span>        }<a name="line.88"></a>
<span class="sourceLineNo">089</span>        // If we reach here, then the config file is alright.<a name="line.89"></a>
<span class="sourceLineNo">090</span>        doConfigure(props);<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>    /**<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * Read configuration from a file. &lt;b&gt;The existing configuration is<a name="line.94"></a>
<span class="sourceLineNo">095</span>     * not cleared nor reset.&lt;/b&gt; If you require a different behavior,<a name="line.95"></a>
<span class="sourceLineNo">096</span>     * then call {@link  LogManager#resetConfiguration<a name="line.96"></a>
<span class="sourceLineNo">097</span>     * resetConfiguration} method before calling<a name="line.97"></a>
<span class="sourceLineNo">098</span>     * &lt;code&gt;doConfigure&lt;/code&gt;.<a name="line.98"></a>
<span class="sourceLineNo">099</span>     *<a name="line.99"></a>
<span class="sourceLineNo">100</span>     * &lt;p&gt;The configuration file consists of statements in the format<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * &lt;code&gt;key=value&lt;/code&gt;. The syntax of different configuration<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * elements are discussed below.<a name="line.102"></a>
<span class="sourceLineNo">103</span>     *<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * &lt;p&gt;The level value can consist of the string values OFF, FATAL,<a name="line.104"></a>
<span class="sourceLineNo">105</span>     * ERROR, WARN, INFO, DEBUG, ALL or a &lt;em&gt;custom level&lt;/em&gt; value. A<a name="line.105"></a>
<span class="sourceLineNo">106</span>     * custom level value can be specified in the form<a name="line.106"></a>
<span class="sourceLineNo">107</span>     * level#classname. By default the repository-wide threshold is set<a name="line.107"></a>
<span class="sourceLineNo">108</span>     * to the lowest possible value, namely the level &lt;code&gt;ALL&lt;/code&gt;.<a name="line.108"></a>
<span class="sourceLineNo">109</span>     * &lt;/p&gt;<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>     * &lt;h3&gt;Appender configuration&lt;/h3&gt;<a name="line.112"></a>
<span class="sourceLineNo">113</span>     *<a name="line.113"></a>
<span class="sourceLineNo">114</span>     * &lt;p&gt;Appender configuration syntax is:<a name="line.114"></a>
<span class="sourceLineNo">115</span>     * &lt;pre&gt;<a name="line.115"></a>
<span class="sourceLineNo">116</span>     * # For appender named &lt;i&gt;appenderName&lt;/i&gt;, set its class.<a name="line.116"></a>
<span class="sourceLineNo">117</span>     * # Note: The appender name can contain dots.<a name="line.117"></a>
<span class="sourceLineNo">118</span>     * log4j.appender.appenderName=fully.qualified.name.of.appender.class<a name="line.118"></a>
<span class="sourceLineNo">119</span>     *<a name="line.119"></a>
<span class="sourceLineNo">120</span>     * # Set appender specific options.<a name="line.120"></a>
<span class="sourceLineNo">121</span>     * log4j.appender.appenderName.option1=value1<a name="line.121"></a>
<span class="sourceLineNo">122</span>     * ...<a name="line.122"></a>
<span class="sourceLineNo">123</span>     * log4j.appender.appenderName.optionN=valueN<a name="line.123"></a>
<span class="sourceLineNo">124</span>     * &lt;/pre&gt;<a name="line.124"></a>
<span class="sourceLineNo">125</span>     * &lt;p&gt;<a name="line.125"></a>
<span class="sourceLineNo">126</span>     * For each named appender you can configure its {@link Layout}. The<a name="line.126"></a>
<span class="sourceLineNo">127</span>     * syntax for configuring an appender's layout is:<a name="line.127"></a>
<span class="sourceLineNo">128</span>     * &lt;pre&gt;<a name="line.128"></a>
<span class="sourceLineNo">129</span>     * log4j.appender.appenderName.layout=fully.qualified.name.of.layout.class<a name="line.129"></a>
<span class="sourceLineNo">130</span>     * log4j.appender.appenderName.layout.option1=value1<a name="line.130"></a>
<span class="sourceLineNo">131</span>     * ....<a name="line.131"></a>
<span class="sourceLineNo">132</span>     * log4j.appender.appenderName.layout.optionN=valueN<a name="line.132"></a>
<span class="sourceLineNo">133</span>     * &lt;/pre&gt;<a name="line.133"></a>
<span class="sourceLineNo">134</span>     * &lt;p&gt;<a name="line.134"></a>
<span class="sourceLineNo">135</span>     * The syntax for adding {@link Filter}s to an appender is:<a name="line.135"></a>
<span class="sourceLineNo">136</span>     * &lt;pre&gt;<a name="line.136"></a>
<span class="sourceLineNo">137</span>     * log4j.appender.appenderName.filter.ID=fully.qualified.name.of.filter.class<a name="line.137"></a>
<span class="sourceLineNo">138</span>     * log4j.appender.appenderName.filter.ID.option1=value1<a name="line.138"></a>
<span class="sourceLineNo">139</span>     * ...<a name="line.139"></a>
<span class="sourceLineNo">140</span>     * log4j.appender.appenderName.filter.ID.optionN=valueN<a name="line.140"></a>
<span class="sourceLineNo">141</span>     * &lt;/pre&gt;<a name="line.141"></a>
<span class="sourceLineNo">142</span>     * The first line defines the class name of the filter identified by ID;<a name="line.142"></a>
<span class="sourceLineNo">143</span>     * subsequent lines with the same ID specify filter option - value<a name="line.143"></a>
<span class="sourceLineNo">144</span>     * pairs. Multiple filters are added to the appender in the lexicographic<a name="line.144"></a>
<span class="sourceLineNo">145</span>     * order of IDs.<a name="line.145"></a>
<span class="sourceLineNo">146</span>     * &lt;p&gt;<a name="line.146"></a>
<span class="sourceLineNo">147</span>     * The syntax for adding an {@link ErrorHandler} to an appender is:<a name="line.147"></a>
<span class="sourceLineNo">148</span>     * &lt;pre&gt;<a name="line.148"></a>
<span class="sourceLineNo">149</span>     * log4j.appender.appenderName.errorhandler=fully.qualified.name.of.errorhandler.class<a name="line.149"></a>
<span class="sourceLineNo">150</span>     * log4j.appender.appenderName.errorhandler.appender-ref=appenderName<a name="line.150"></a>
<span class="sourceLineNo">151</span>     * log4j.appender.appenderName.errorhandler.option1=value1<a name="line.151"></a>
<span class="sourceLineNo">152</span>     * ...<a name="line.152"></a>
<span class="sourceLineNo">153</span>     * log4j.appender.appenderName.errorhandler.optionN=valueN<a name="line.153"></a>
<span class="sourceLineNo">154</span>     * &lt;/pre&gt;<a name="line.154"></a>
<span class="sourceLineNo">155</span>     *<a name="line.155"></a>
<span class="sourceLineNo">156</span>     * &lt;h3&gt;Configuring loggers&lt;/h3&gt;<a name="line.156"></a>
<span class="sourceLineNo">157</span>     *<a name="line.157"></a>
<span class="sourceLineNo">158</span>     * &lt;p&gt;The syntax for configuring the root logger is:<a name="line.158"></a>
<span class="sourceLineNo">159</span>     * &lt;pre&gt;<a name="line.159"></a>
<span class="sourceLineNo">160</span>     * log4j.rootLogger=[level], appenderName, appenderName, ...<a name="line.160"></a>
<span class="sourceLineNo">161</span>     * &lt;/pre&gt;<a name="line.161"></a>
<span class="sourceLineNo">162</span>     *<a name="line.162"></a>
<span class="sourceLineNo">163</span>     * &lt;p&gt;This syntax means that an optional &lt;em&gt;level&lt;/em&gt; can be<a name="line.163"></a>
<span class="sourceLineNo">164</span>     * supplied followed by appender names separated by commas.<a name="line.164"></a>
<span class="sourceLineNo">165</span>     *<a name="line.165"></a>
<span class="sourceLineNo">166</span>     * &lt;p&gt;The level value can consist of the string values OFF, FATAL,<a name="line.166"></a>
<span class="sourceLineNo">167</span>     * ERROR, WARN, INFO, DEBUG, ALL or a &lt;em&gt;custom level&lt;/em&gt; value. A<a name="line.167"></a>
<span class="sourceLineNo">168</span>     * custom level value can be specified in the form<a name="line.168"></a>
<span class="sourceLineNo">169</span>     * &lt;code&gt;level#classname&lt;/code&gt;.<a name="line.169"></a>
<span class="sourceLineNo">170</span>     *<a name="line.170"></a>
<span class="sourceLineNo">171</span>     * &lt;p&gt;If a level value is specified, then the root level is set<a name="line.171"></a>
<span class="sourceLineNo">172</span>     * to the corresponding level.  If no level value is specified,<a name="line.172"></a>
<span class="sourceLineNo">173</span>     * then the root level remains untouched.<a name="line.173"></a>
<span class="sourceLineNo">174</span>     *<a name="line.174"></a>
<span class="sourceLineNo">175</span>     * &lt;p&gt;The root logger can be assigned multiple appenders.<a name="line.175"></a>
<span class="sourceLineNo">176</span>     *<a name="line.176"></a>
<span class="sourceLineNo">177</span>     * &lt;p&gt;Each &lt;i&gt;appenderName&lt;/i&gt; (separated by commas) will be added to<a name="line.177"></a>
<span class="sourceLineNo">178</span>     * the root logger. The named appender is defined using the<a name="line.178"></a>
<span class="sourceLineNo">179</span>     * appender syntax defined above.<a name="line.179"></a>
<span class="sourceLineNo">180</span>     *<a name="line.180"></a>
<span class="sourceLineNo">181</span>     * &lt;p&gt;For non-root categories the syntax is almost the same:<a name="line.181"></a>
<span class="sourceLineNo">182</span>     * &lt;pre&gt;<a name="line.182"></a>
<span class="sourceLineNo">183</span>     * log4j.logger.logger_name=[level|INHERITED|NULL], appenderName, appenderName, ...<a name="line.183"></a>
<span class="sourceLineNo">184</span>     * &lt;/pre&gt;<a name="line.184"></a>
<span class="sourceLineNo">185</span>     *<a name="line.185"></a>
<span class="sourceLineNo">186</span>     * &lt;p&gt;The meaning of the optional level value is discussed above<a name="line.186"></a>
<span class="sourceLineNo">187</span>     * in relation to the root logger. In addition however, the value<a name="line.187"></a>
<span class="sourceLineNo">188</span>     * INHERITED can be specified meaning that the named logger should<a name="line.188"></a>
<span class="sourceLineNo">189</span>     * inherit its level from the logger hierarchy.<a name="line.189"></a>
<span class="sourceLineNo">190</span>     *<a name="line.190"></a>
<span class="sourceLineNo">191</span>     * &lt;p&gt;If no level value is supplied, then the level of the<a name="line.191"></a>
<span class="sourceLineNo">192</span>     * named logger remains untouched.<a name="line.192"></a>
<span class="sourceLineNo">193</span>     *<a name="line.193"></a>
<span class="sourceLineNo">194</span>     * &lt;p&gt;By default categories inherit their level from the<a name="line.194"></a>
<span class="sourceLineNo">195</span>     * hierarchy. However, if you set the level of a logger and later<a name="line.195"></a>
<span class="sourceLineNo">196</span>     * decide that that logger should inherit its level, then you should<a name="line.196"></a>
<span class="sourceLineNo">197</span>     * specify INHERITED as the value for the level value. NULL is a<a name="line.197"></a>
<span class="sourceLineNo">198</span>     * synonym for INHERITED.<a name="line.198"></a>
<span class="sourceLineNo">199</span>     *<a name="line.199"></a>
<span class="sourceLineNo">200</span>     * &lt;p&gt;Similar to the root logger syntax, each &lt;i&gt;appenderName&lt;/i&gt;<a name="line.200"></a>
<span class="sourceLineNo">201</span>     * (separated by commas) will be attached to the named logger.<a name="line.201"></a>
<span class="sourceLineNo">202</span>     *<a name="line.202"></a>
<span class="sourceLineNo">203</span>     * &lt;p&gt;See the &lt;a href="../../../../manual.html#additivity"&gt;appender<a name="line.203"></a>
<span class="sourceLineNo">204</span>     * additivity rule&lt;/a&gt; in the user manual for the meaning of the<a name="line.204"></a>
<span class="sourceLineNo">205</span>     * &lt;code&gt;additivity&lt;/code&gt; flag.<a name="line.205"></a>
<span class="sourceLineNo">206</span>     *<a name="line.206"></a>
<span class="sourceLineNo">207</span>     *<a name="line.207"></a>
<span class="sourceLineNo">208</span>     * # Set options for appender named "A1".<a name="line.208"></a>
<span class="sourceLineNo">209</span>     * # Appender "A1" will be a SyslogAppender<a name="line.209"></a>
<span class="sourceLineNo">210</span>     * log4j.appender.A1=org.apache.log4j.net.SyslogAppender<a name="line.210"></a>
<span class="sourceLineNo">211</span>     *<a name="line.211"></a>
<span class="sourceLineNo">212</span>     * # The syslog daemon resides on www.abc.net<a name="line.212"></a>
<span class="sourceLineNo">213</span>     * log4j.appender.A1.SyslogHost=www.abc.net<a name="line.213"></a>
<span class="sourceLineNo">214</span>     *<a name="line.214"></a>
<span class="sourceLineNo">215</span>     * # A1's layout is a PatternLayout, using the conversion pattern<a name="line.215"></a>
<span class="sourceLineNo">216</span>     * # &lt;b&gt;%r %-5p %c{2} %M.%L %x - %m\n&lt;/b&gt;. Thus, the log output will<a name="line.216"></a>
<span class="sourceLineNo">217</span>     * # include # the relative time since the start of the application in<a name="line.217"></a>
<span class="sourceLineNo">218</span>     * # milliseconds, followed by the level of the log request,<a name="line.218"></a>
<span class="sourceLineNo">219</span>     * # followed by the two rightmost components of the logger name,<a name="line.219"></a>
<span class="sourceLineNo">220</span>     * # followed by the callers method name, followed by the line number,<a name="line.220"></a>
<span class="sourceLineNo">221</span>     * # the nested diagnostic context and finally the message itself.<a name="line.221"></a>
<span class="sourceLineNo">222</span>     * # Refer to the documentation of {@link PatternLayout} for further information<a name="line.222"></a>
<span class="sourceLineNo">223</span>     * # on the syntax of the ConversionPattern key.<a name="line.223"></a>
<span class="sourceLineNo">224</span>     * log4j.appender.A1.layout=org.apache.log4j.PatternLayout<a name="line.224"></a>
<span class="sourceLineNo">225</span>     * log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %c{2} %M.%L %x - %m\n<a name="line.225"></a>
<span class="sourceLineNo">226</span>     *<a name="line.226"></a>
<span class="sourceLineNo">227</span>     * # Set options for appender named "A2"<a name="line.227"></a>
<span class="sourceLineNo">228</span>     * # A2 should be a RollingFileAppender, with maximum file size of 10 MB<a name="line.228"></a>
<span class="sourceLineNo">229</span>     * # using at most one backup file. A2's layout is TTCC, using the<a name="line.229"></a>
<span class="sourceLineNo">230</span>     * # ISO8061 date format with context printing enabled.<a name="line.230"></a>
<span class="sourceLineNo">231</span>     * log4j.appender.A2=org.apache.log4j.RollingFileAppender<a name="line.231"></a>
<span class="sourceLineNo">232</span>     * log4j.appender.A2.MaxFileSize=10MB<a name="line.232"></a>
<span class="sourceLineNo">233</span>     * log4j.appender.A2.MaxBackupIndex=1<a name="line.233"></a>
<span class="sourceLineNo">234</span>     * log4j.appender.A2.layout=org.apache.log4j.TTCCLayout<a name="line.234"></a>
<span class="sourceLineNo">235</span>     * log4j.appender.A2.layout.ContextPrinting=enabled<a name="line.235"></a>
<span class="sourceLineNo">236</span>     * log4j.appender.A2.layout.DateFormat=ISO8601<a name="line.236"></a>
<span class="sourceLineNo">237</span>     *<a name="line.237"></a>
<span class="sourceLineNo">238</span>     * # Root logger set to DEBUG using the A2 appender defined above.<a name="line.238"></a>
<span class="sourceLineNo">239</span>     * log4j.rootLogger=DEBUG, A2<a name="line.239"></a>
<span class="sourceLineNo">240</span>     *<a name="line.240"></a>
<span class="sourceLineNo">241</span>     * # Logger definitions:<a name="line.241"></a>
<span class="sourceLineNo">242</span>     * # The SECURITY logger inherits is level from root. However, it's output<a name="line.242"></a>
<span class="sourceLineNo">243</span>     * # will go to A1 appender defined above. It's additivity is non-cumulative.<a name="line.243"></a>
<span class="sourceLineNo">244</span>     * log4j.logger.SECURITY=INHERIT, A1<a name="line.244"></a>
<span class="sourceLineNo">245</span>     * log4j.additivity.SECURITY=false<a name="line.245"></a>
<span class="sourceLineNo">246</span>     *<a name="line.246"></a>
<span class="sourceLineNo">247</span>     * # Only warnings or above will be logged for the logger "SECURITY.access".<a name="line.247"></a>
<span class="sourceLineNo">248</span>     * # Output will go to A1.<a name="line.248"></a>
<span class="sourceLineNo">249</span>     * log4j.logger.SECURITY.access=WARN<a name="line.249"></a>
<span class="sourceLineNo">250</span>     *<a name="line.250"></a>
<span class="sourceLineNo">251</span>     *<a name="line.251"></a>
<span class="sourceLineNo">252</span>     * # The logger "class.of.the.day" inherits its level from the<a name="line.252"></a>
<span class="sourceLineNo">253</span>     * # logger hierarchy.  Output will go to the appender's of the root<a name="line.253"></a>
<span class="sourceLineNo">254</span>     * # logger, A2 in this case.<a name="line.254"></a>
<span class="sourceLineNo">255</span>     * log4j.logger.class.of.the.day=INHERIT<a name="line.255"></a>
<span class="sourceLineNo">256</span>     * &lt;/pre&gt;<a name="line.256"></a>
<span class="sourceLineNo">257</span>     *<a name="line.257"></a>
<span class="sourceLineNo">258</span>     * &lt;p&gt;Refer to the &lt;b&gt;setOption&lt;/b&gt; method in each Appender and<a name="line.258"></a>
<span class="sourceLineNo">259</span>     * Layout for class specific options.<a name="line.259"></a>
<span class="sourceLineNo">260</span>     *<a name="line.260"></a>
<span class="sourceLineNo">261</span>     * &lt;p&gt;Use the &lt;code&gt;#&lt;/code&gt; or &lt;code&gt;!&lt;/code&gt; characters at the<a name="line.261"></a>
<span class="sourceLineNo">262</span>     * beginning of a line for comments.<a name="line.262"></a>
<span class="sourceLineNo">263</span>     *<a name="line.263"></a>
<span class="sourceLineNo">264</span>     * &lt;p&gt;<a name="line.264"></a>
<span class="sourceLineNo">265</span>     */<a name="line.265"></a>
<span class="sourceLineNo">266</span>    private void doConfigure(Properties properties) {<a name="line.266"></a>
<span class="sourceLineNo">267</span>        String status = "error";<a name="line.267"></a>
<span class="sourceLineNo">268</span>        String value = properties.getProperty(DEBUG_KEY);<a name="line.268"></a>
<span class="sourceLineNo">269</span>        if (value == null) {<a name="line.269"></a>
<span class="sourceLineNo">270</span>            value = properties.getProperty("log4j.configDebug");<a name="line.270"></a>
<span class="sourceLineNo">271</span>            if (value != null) {<a name="line.271"></a>
<span class="sourceLineNo">272</span>                LOGGER.warn("[log4j.configDebug] is deprecated. Use [log4j.debug] instead.");<a name="line.272"></a>
<span class="sourceLineNo">273</span>            }<a name="line.273"></a>
<span class="sourceLineNo">274</span>        }<a name="line.274"></a>
<span class="sourceLineNo">275</span><a name="line.275"></a>
<span class="sourceLineNo">276</span>        if (value != null) {<a name="line.276"></a>
<span class="sourceLineNo">277</span>            status = OptionConverter.toBoolean(value, false) ? "debug" : "error";<a name="line.277"></a>
<span class="sourceLineNo">278</span>        }<a name="line.278"></a>
<span class="sourceLineNo">279</span><a name="line.279"></a>
<span class="sourceLineNo">280</span>        final StatusConfiguration statusConfig = new StatusConfiguration().withStatus(status);<a name="line.280"></a>
<span class="sourceLineNo">281</span>        statusConfig.initialize();<a name="line.281"></a>
<span class="sourceLineNo">282</span><a name="line.282"></a>
<span class="sourceLineNo">283</span>        configureRoot(properties);<a name="line.283"></a>
<span class="sourceLineNo">284</span>        parseLoggers(properties);<a name="line.284"></a>
<span class="sourceLineNo">285</span><a name="line.285"></a>
<span class="sourceLineNo">286</span>        LOGGER.debug("Finished configuring.");<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>    // --------------------------------------------------------------------------<a name="line.289"></a>
<span class="sourceLineNo">290</span>    // Internal stuff<a name="line.290"></a>
<span class="sourceLineNo">291</span>    // --------------------------------------------------------------------------<a name="line.291"></a>
<span class="sourceLineNo">292</span><a name="line.292"></a>
<span class="sourceLineNo">293</span>    private void configureRoot(Properties props) {<a name="line.293"></a>
<span class="sourceLineNo">294</span>        String effectiveFrefix = ROOT_LOGGER_PREFIX;<a name="line.294"></a>
<span class="sourceLineNo">295</span>        String value = OptionConverter.findAndSubst(ROOT_LOGGER_PREFIX, props);<a name="line.295"></a>
<span class="sourceLineNo">296</span><a name="line.296"></a>
<span class="sourceLineNo">297</span>        if (value == null) {<a name="line.297"></a>
<span class="sourceLineNo">298</span>            value = OptionConverter.findAndSubst(ROOT_CATEGORY_PREFIX, props);<a name="line.298"></a>
<span class="sourceLineNo">299</span>            effectiveFrefix = ROOT_CATEGORY_PREFIX;<a name="line.299"></a>
<span class="sourceLineNo">300</span>        }<a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
<span class="sourceLineNo">302</span>        if (value == null) {<a name="line.302"></a>
<span class="sourceLineNo">303</span>            LOGGER.debug("Could not find root logger information. Is this OK?");<a name="line.303"></a>
<span class="sourceLineNo">304</span>        } else {<a name="line.304"></a>
<span class="sourceLineNo">305</span>            LoggerConfig root = getRootLogger();<a name="line.305"></a>
<span class="sourceLineNo">306</span>            parseLogger(props, root, effectiveFrefix, INTERNAL_ROOT_NAME, value);<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><a name="line.309"></a>
<span class="sourceLineNo">310</span>    /**<a name="line.310"></a>
<span class="sourceLineNo">311</span>     * Parse non-root elements, such non-root categories and renderers.<a name="line.311"></a>
<span class="sourceLineNo">312</span>     */<a name="line.312"></a>
<span class="sourceLineNo">313</span>    private void parseLoggers(Properties props) {<a name="line.313"></a>
<span class="sourceLineNo">314</span>        Enumeration enumeration = props.propertyNames();<a name="line.314"></a>
<span class="sourceLineNo">315</span>        while (enumeration.hasMoreElements()) {<a name="line.315"></a>
<span class="sourceLineNo">316</span>            String key = (String) enumeration.nextElement();<a name="line.316"></a>
<span class="sourceLineNo">317</span>            if (key.startsWith(CATEGORY_PREFIX) || key.startsWith(LOGGER_PREFIX)) {<a name="line.317"></a>
<span class="sourceLineNo">318</span>                String loggerName = null;<a name="line.318"></a>
<span class="sourceLineNo">319</span>                if (key.startsWith(CATEGORY_PREFIX)) {<a name="line.319"></a>
<span class="sourceLineNo">320</span>                    loggerName = key.substring(CATEGORY_PREFIX.length());<a name="line.320"></a>
<span class="sourceLineNo">321</span>                } else if (key.startsWith(LOGGER_PREFIX)) {<a name="line.321"></a>
<span class="sourceLineNo">322</span>                    loggerName = key.substring(LOGGER_PREFIX.length());<a name="line.322"></a>
<span class="sourceLineNo">323</span>                }<a name="line.323"></a>
<span class="sourceLineNo">324</span>                String value = OptionConverter.findAndSubst(key, props);<a name="line.324"></a>
<span class="sourceLineNo">325</span>                LoggerConfig loggerConfig = getLogger(loggerName);<a name="line.325"></a>
<span class="sourceLineNo">326</span>                if (loggerConfig == null) {<a name="line.326"></a>
<span class="sourceLineNo">327</span>                    boolean additivity = getAdditivityForLogger(props, loggerName);<a name="line.327"></a>
<span class="sourceLineNo">328</span>                    loggerConfig = new LoggerConfig(loggerName, org.apache.logging.log4j.Level.ERROR, additivity);<a name="line.328"></a>
<span class="sourceLineNo">329</span>                    addLogger(loggerName, loggerConfig);<a name="line.329"></a>
<span class="sourceLineNo">330</span>                }<a name="line.330"></a>
<span class="sourceLineNo">331</span>                parseLogger(props, loggerConfig, key, loggerName, value);<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><a name="line.335"></a>
<span class="sourceLineNo">336</span>    /**<a name="line.336"></a>
<span class="sourceLineNo">337</span>     * Parse the additivity option for a non-root category.<a name="line.337"></a>
<span class="sourceLineNo">338</span>     */<a name="line.338"></a>
<span class="sourceLineNo">339</span>    private boolean getAdditivityForLogger(Properties props, String loggerName) {<a name="line.339"></a>
<span class="sourceLineNo">340</span>        boolean additivity = true;<a name="line.340"></a>
<span class="sourceLineNo">341</span>        String key = ADDITIVITY_PREFIX + loggerName;<a name="line.341"></a>
<span class="sourceLineNo">342</span>        String value = OptionConverter.findAndSubst(key, props);<a name="line.342"></a>
<span class="sourceLineNo">343</span>        LOGGER.debug("Handling {}=[{}]", key, value);<a name="line.343"></a>
<span class="sourceLineNo">344</span>        // touch additivity only if necessary<a name="line.344"></a>
<span class="sourceLineNo">345</span>        if ((value != null) &amp;&amp; (!value.equals(""))) {<a name="line.345"></a>
<span class="sourceLineNo">346</span>            additivity = OptionConverter.toBoolean(value, true);<a name="line.346"></a>
<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
<span class="sourceLineNo">348</span>        return additivity;<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>    /**<a name="line.351"></a>
<span class="sourceLineNo">352</span>     * This method must work for the root category as well.<a name="line.352"></a>
<span class="sourceLineNo">353</span>     */<a name="line.353"></a>
<span class="sourceLineNo">354</span>    private void parseLogger(Properties props, LoggerConfig logger, String optionKey, String loggerName, String value) {<a name="line.354"></a>
<span class="sourceLineNo">355</span><a name="line.355"></a>
<span class="sourceLineNo">356</span>        LOGGER.debug("Parsing for [{}] with value=[{}].", loggerName, value);<a name="line.356"></a>
<span class="sourceLineNo">357</span>        // We must skip over ',' but not white space<a name="line.357"></a>
<span class="sourceLineNo">358</span>        StringTokenizer st = new StringTokenizer(value, ",");<a name="line.358"></a>
<span class="sourceLineNo">359</span><a name="line.359"></a>
<span class="sourceLineNo">360</span>        // If value is not in the form ", appender.." or "", then we should set the level of the logger.<a name="line.360"></a>
<span class="sourceLineNo">361</span><a name="line.361"></a>
<span class="sourceLineNo">362</span>        if (!(value.startsWith(",") || value.equals(""))) {<a name="line.362"></a>
<span class="sourceLineNo">363</span><a name="line.363"></a>
<span class="sourceLineNo">364</span>            // just to be on the safe side...<a name="line.364"></a>
<span class="sourceLineNo">365</span>            if (!st.hasMoreTokens()) {<a name="line.365"></a>
<span class="sourceLineNo">366</span>                return;<a name="line.366"></a>
<span class="sourceLineNo">367</span>            }<a name="line.367"></a>
<span class="sourceLineNo">368</span><a name="line.368"></a>
<span class="sourceLineNo">369</span>            String levelStr = st.nextToken();<a name="line.369"></a>
<span class="sourceLineNo">370</span>            LOGGER.debug("Level token is [{}].", levelStr);<a name="line.370"></a>
<span class="sourceLineNo">371</span><a name="line.371"></a>
<span class="sourceLineNo">372</span>            org.apache.logging.log4j.Level level = levelStr == null ? org.apache.logging.log4j.Level.ERROR :<a name="line.372"></a>
<span class="sourceLineNo">373</span>                    OptionConverter.convertLevel(levelStr, org.apache.logging.log4j.Level.DEBUG);<a name="line.373"></a>
<span class="sourceLineNo">374</span>            logger.setLevel(level);<a name="line.374"></a>
<span class="sourceLineNo">375</span>            LOGGER.debug("Logger {} level set to {}", loggerName, level);<a name="line.375"></a>
<span class="sourceLineNo">376</span>        }<a name="line.376"></a>
<span class="sourceLineNo">377</span><a name="line.377"></a>
<span class="sourceLineNo">378</span>        Appender appender;<a name="line.378"></a>
<span class="sourceLineNo">379</span>        String appenderName;<a name="line.379"></a>
<span class="sourceLineNo">380</span>        while (st.hasMoreTokens()) {<a name="line.380"></a>
<span class="sourceLineNo">381</span>            appenderName = st.nextToken().trim();<a name="line.381"></a>
<span class="sourceLineNo">382</span>            if (appenderName == null || appenderName.equals(",")) {<a name="line.382"></a>
<span class="sourceLineNo">383</span>                continue;<a name="line.383"></a>
<span class="sourceLineNo">384</span>            }<a name="line.384"></a>
<span class="sourceLineNo">385</span>            LOGGER.debug("Parsing appender named \"{}\".", appenderName);<a name="line.385"></a>
<span class="sourceLineNo">386</span>            appender = parseAppender(props, appenderName);<a name="line.386"></a>
<span class="sourceLineNo">387</span>            if (appender != null) {<a name="line.387"></a>
<span class="sourceLineNo">388</span>                LOGGER.debug("Adding appender named [{}] to loggerConfig [{}].", appenderName,<a name="line.388"></a>
<span class="sourceLineNo">389</span>                        logger.getName());<a name="line.389"></a>
<span class="sourceLineNo">390</span>                logger.addAppender(getAppender(appenderName), null, null);<a name="line.390"></a>
<span class="sourceLineNo">391</span>            } else {<a name="line.391"></a>
<span class="sourceLineNo">392</span>                LOGGER.debug("Appender named [{}}] not found.", appenderName);<a name="line.392"></a>
<span class="sourceLineNo">393</span>            }<a name="line.393"></a>
<span class="sourceLineNo">394</span>        }<a name="line.394"></a>
<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
<span class="sourceLineNo">396</span><a name="line.396"></a>
<span class="sourceLineNo">397</span>    public Appender parseAppender(Properties props, String appenderName) {<a name="line.397"></a>
<span class="sourceLineNo">398</span>        Appender appender = registry.get(appenderName);<a name="line.398"></a>
<span class="sourceLineNo">399</span>        if ((appender != null)) {<a name="line.399"></a>
<span class="sourceLineNo">400</span>            LOGGER.debug("Appender \"" + appenderName + "\" was already parsed.");<a name="line.400"></a>
<span class="sourceLineNo">401</span>            return appender;<a name="line.401"></a>
<span class="sourceLineNo">402</span>        }<a name="line.402"></a>
<span class="sourceLineNo">403</span>        // Appender was not previously initialized.<a name="line.403"></a>
<span class="sourceLineNo">404</span>        final String prefix = APPENDER_PREFIX + appenderName;<a name="line.404"></a>
<span class="sourceLineNo">405</span>        final String layoutPrefix = prefix + ".layout";<a name="line.405"></a>
<span class="sourceLineNo">406</span>        final String filterPrefix = APPENDER_PREFIX + appenderName + ".filter.";<a name="line.406"></a>
<span class="sourceLineNo">407</span>        String className = OptionConverter.findAndSubst(prefix, props);<a name="line.407"></a>
<span class="sourceLineNo">408</span>        appender = manager.parseAppender(appenderName, className, prefix, layoutPrefix, filterPrefix, props, this);<a name="line.408"></a>
<span class="sourceLineNo">409</span>        if (appender == null) {<a name="line.409"></a>
<span class="sourceLineNo">410</span>            appender = buildAppender(appenderName, className, prefix, layoutPrefix, filterPrefix, props);<a name="line.410"></a>
<span class="sourceLineNo">411</span>        } else {<a name="line.411"></a>
<span class="sourceLineNo">412</span>            registry.put(appenderName, appender);<a name="line.412"></a>
<span class="sourceLineNo">413</span>            if (appender instanceof AppenderWrapper) {<a name="line.413"></a>
<span class="sourceLineNo">414</span>                addAppender(((AppenderWrapper) appender).getAppender());<a name="line.414"></a>
<span class="sourceLineNo">415</span>            } else {<a name="line.415"></a>
<span class="sourceLineNo">416</span>                addAppender(new AppenderAdapter(appender).getAdapter());<a name="line.416"></a>
<span class="sourceLineNo">417</span>            }<a name="line.417"></a>
<span class="sourceLineNo">418</span>        }<a name="line.418"></a>
<span class="sourceLineNo">419</span>        return appender;<a name="line.419"></a>
<span class="sourceLineNo">420</span>    }<a name="line.420"></a>
<span class="sourceLineNo">421</span><a name="line.421"></a>
<span class="sourceLineNo">422</span>    private Appender buildAppender(final String appenderName, final String className, final String prefix,<a name="line.422"></a>
<span class="sourceLineNo">423</span>            final String layoutPrefix, final String filterPrefix, final Properties props) {<a name="line.423"></a>
<span class="sourceLineNo">424</span>        Appender appender = newInstanceOf(className, "Appender");<a name="line.424"></a>
<span class="sourceLineNo">425</span>        if (appender == null) {<a name="line.425"></a>
<span class="sourceLineNo">426</span>            return null;<a name="line.426"></a>
<span class="sourceLineNo">427</span>        }<a name="line.427"></a>
<span class="sourceLineNo">428</span>        appender.setName(appenderName);<a name="line.428"></a>
<span class="sourceLineNo">429</span>        appender.setLayout(parseLayout(layoutPrefix, appenderName, props));<a name="line.429"></a>
<span class="sourceLineNo">430</span>        final String errorHandlerPrefix = prefix + ".errorhandler";<a name="line.430"></a>
<span class="sourceLineNo">431</span>        String errorHandlerClass = OptionConverter.findAndSubst(errorHandlerPrefix, props);<a name="line.431"></a>
<span class="sourceLineNo">432</span>        if (errorHandlerClass != null) {<a name="line.432"></a>
<span class="sourceLineNo">433</span>            ErrorHandler eh = parseErrorHandler(props, errorHandlerPrefix, errorHandlerClass, appender);<a name="line.433"></a>
<span class="sourceLineNo">434</span>            if (eh != null) {<a name="line.434"></a>
<span class="sourceLineNo">435</span>                appender.setErrorHandler(eh);<a name="line.435"></a>
<span class="sourceLineNo">436</span>            }<a name="line.436"></a>
<span class="sourceLineNo">437</span>        }<a name="line.437"></a>
<span class="sourceLineNo">438</span>        parseAppenderFilters(props, filterPrefix, appenderName);<a name="line.438"></a>
<span class="sourceLineNo">439</span>        String[] keys = new String[] {<a name="line.439"></a>
<span class="sourceLineNo">440</span>                layoutPrefix,<a name="line.440"></a>
<span class="sourceLineNo">441</span>        };<a name="line.441"></a>
<span class="sourceLineNo">442</span>        addProperties(appender, keys, props, prefix);<a name="line.442"></a>
<span class="sourceLineNo">443</span>        if (appender instanceof AppenderWrapper) {<a name="line.443"></a>
<span class="sourceLineNo">444</span>            addAppender(((AppenderWrapper) appender).getAppender());<a name="line.444"></a>
<span class="sourceLineNo">445</span>        } else {<a name="line.445"></a>
<span class="sourceLineNo">446</span>            addAppender(new AppenderAdapter(appender).getAdapter());<a name="line.446"></a>
<span class="sourceLineNo">447</span>        }<a name="line.447"></a>
<span class="sourceLineNo">448</span>        registry.put(appenderName, appender);<a name="line.448"></a>
<span class="sourceLineNo">449</span>        return appender;<a name="line.449"></a>
<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
<span class="sourceLineNo">451</span><a name="line.451"></a>
<span class="sourceLineNo">452</span>    public Layout parseLayout(String layoutPrefix, String appenderName, Properties props) {<a name="line.452"></a>
<span class="sourceLineNo">453</span>        String layoutClass = OptionConverter.findAndSubst(layoutPrefix, props);<a name="line.453"></a>
<span class="sourceLineNo">454</span>        if (layoutClass == null) {<a name="line.454"></a>
<span class="sourceLineNo">455</span>            return null;<a name="line.455"></a>
<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
<span class="sourceLineNo">457</span>        Layout layout = manager.parseLayout(layoutClass, layoutPrefix, props, this);<a name="line.457"></a>
<span class="sourceLineNo">458</span>        if (layout == null) {<a name="line.458"></a>
<span class="sourceLineNo">459</span>            layout = buildLayout(layoutPrefix, layoutClass, appenderName, props);<a name="line.459"></a>
<span class="sourceLineNo">460</span>        }<a name="line.460"></a>
<span class="sourceLineNo">461</span>        return layout;<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>    private Layout buildLayout(String layoutPrefix, String className, String appenderName, Properties props) {<a name="line.464"></a>
<span class="sourceLineNo">465</span>        Layout layout = newInstanceOf(className, "Layout");<a name="line.465"></a>
<span class="sourceLineNo">466</span>        if (layout == null) {<a name="line.466"></a>
<span class="sourceLineNo">467</span>            return null;<a name="line.467"></a>
<span class="sourceLineNo">468</span>        }<a name="line.468"></a>
<span class="sourceLineNo">469</span>        LOGGER.debug("Parsing layout options for \"{}\".", appenderName);<a name="line.469"></a>
<span class="sourceLineNo">470</span>        PropertySetter.setProperties(layout, props, layoutPrefix + ".");<a name="line.470"></a>
<span class="sourceLineNo">471</span>        LOGGER.debug("End of parsing for \"{}\".", appenderName);<a name="line.471"></a>
<span class="sourceLineNo">472</span>        return layout;<a name="line.472"></a>
<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
<span class="sourceLineNo">474</span><a name="line.474"></a>
<span class="sourceLineNo">475</span>    public ErrorHandler parseErrorHandler(final Properties props, final String errorHandlerPrefix,<a name="line.475"></a>
<span class="sourceLineNo">476</span>            final String errorHandlerClass, final Appender appender) {<a name="line.476"></a>
<span class="sourceLineNo">477</span>        ErrorHandler eh = newInstanceOf(errorHandlerClass, "ErrorHandler");<a name="line.477"></a>
<span class="sourceLineNo">478</span>        final String[] keys = new String[] {<a name="line.478"></a>
<span class="sourceLineNo">479</span>                errorHandlerPrefix + "." + ROOT_REF,<a name="line.479"></a>
<span class="sourceLineNo">480</span>                errorHandlerPrefix + "." + LOGGER_REF,<a name="line.480"></a>
<span class="sourceLineNo">481</span>                errorHandlerPrefix + "." + APPENDER_REF_TAG<a name="line.481"></a>
<span class="sourceLineNo">482</span>        };<a name="line.482"></a>
<span class="sourceLineNo">483</span>        addProperties(eh, keys, props, errorHandlerPrefix);<a name="line.483"></a>
<span class="sourceLineNo">484</span>        return eh;<a name="line.484"></a>
<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
<span class="sourceLineNo">486</span><a name="line.486"></a>
<span class="sourceLineNo">487</span>    public void addProperties(final Object obj, final String[] keys, final Properties props, final String prefix) {<a name="line.487"></a>
<span class="sourceLineNo">488</span>        final Properties edited = new Properties();<a name="line.488"></a>
<span class="sourceLineNo">489</span>        props.stringPropertyNames().stream().filter((name) -&gt; {<a name="line.489"></a>
<span class="sourceLineNo">490</span>            if (name.startsWith(prefix)) {<a name="line.490"></a>
<span class="sourceLineNo">491</span>                for (String key : keys) {<a name="line.491"></a>
<span class="sourceLineNo">492</span>                    if (name.equals(key)) {<a name="line.492"></a>
<span class="sourceLineNo">493</span>                        return false;<a name="line.493"></a>
<span class="sourceLineNo">494</span>                    }<a name="line.494"></a>
<span class="sourceLineNo">495</span>                }<a name="line.495"></a>
<span class="sourceLineNo">496</span>                return true;<a name="line.496"></a>
<span class="sourceLineNo">497</span>            }<a name="line.497"></a>
<span class="sourceLineNo">498</span>            return false;<a name="line.498"></a>
<span class="sourceLineNo">499</span>        }).forEach((name) -&gt; edited.put(name, props.getProperty(name)));<a name="line.499"></a>
<span class="sourceLineNo">500</span>        PropertySetter.setProperties(obj, edited, prefix + ".");<a name="line.500"></a>
<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
<span class="sourceLineNo">502</span><a name="line.502"></a>
<span class="sourceLineNo">503</span><a name="line.503"></a>
<span class="sourceLineNo">504</span>    public Filter parseAppenderFilters(Properties props, String filterPrefix, String appenderName) {<a name="line.504"></a>
<span class="sourceLineNo">505</span>        // extract filters and filter options from props into a hashtable mapping<a name="line.505"></a>
<span class="sourceLineNo">506</span>        // the property name defining the filter class to a list of pre-parsed<a name="line.506"></a>
<span class="sourceLineNo">507</span>        // name-value pairs associated to that filter<a name="line.507"></a>
<span class="sourceLineNo">508</span>        int fIdx = filterPrefix.length();<a name="line.508"></a>
<span class="sourceLineNo">509</span>        SortedMap&lt;String, List&lt;NameValue&gt;&gt; filters = new TreeMap&lt;&gt;();<a name="line.509"></a>
<span class="sourceLineNo">510</span>        Enumeration e = props.keys();<a name="line.510"></a>
<span class="sourceLineNo">511</span>        String name = "";<a name="line.511"></a>
<span class="sourceLineNo">512</span>        while (e.hasMoreElements()) {<a name="line.512"></a>
<span class="sourceLineNo">513</span>            String key = (String) e.nextElement();<a name="line.513"></a>
<span class="sourceLineNo">514</span>            if (key.startsWith(filterPrefix)) {<a name="line.514"></a>
<span class="sourceLineNo">515</span>                int dotIdx = key.indexOf('.', fIdx);<a name="line.515"></a>
<span class="sourceLineNo">516</span>                String filterKey = key;<a name="line.516"></a>
<span class="sourceLineNo">517</span>                if (dotIdx != -1) {<a name="line.517"></a>
<span class="sourceLineNo">518</span>                    filterKey = key.substring(0, dotIdx);<a name="line.518"></a>
<span class="sourceLineNo">519</span>                    name = key.substring(dotIdx + 1);<a name="line.519"></a>
<span class="sourceLineNo">520</span>                }<a name="line.520"></a>
<span class="sourceLineNo">521</span>                List&lt;NameValue&gt; filterOpts = filters.computeIfAbsent(filterKey, k -&gt; new ArrayList&lt;&gt;());<a name="line.521"></a>
<span class="sourceLineNo">522</span>                if (dotIdx != -1) {<a name="line.522"></a>
<span class="sourceLineNo">523</span>                    String value = OptionConverter.findAndSubst(key, props);<a name="line.523"></a>
<span class="sourceLineNo">524</span>                    filterOpts.add(new NameValue(name, value));<a name="line.524"></a>
<span class="sourceLineNo">525</span>                }<a name="line.525"></a>
<span class="sourceLineNo">526</span>            }<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>        Filter head = null;<a name="line.529"></a>
<span class="sourceLineNo">530</span>        Filter next = null;<a name="line.530"></a>
<span class="sourceLineNo">531</span>        for (Map.Entry&lt;String, List&lt;NameValue&gt;&gt; entry : filters.entrySet()) {<a name="line.531"></a>
<span class="sourceLineNo">532</span>            String clazz = props.getProperty(entry.getKey());<a name="line.532"></a>
<span class="sourceLineNo">533</span>            Filter filter = null;<a name="line.533"></a>
<span class="sourceLineNo">534</span>            if (clazz != null) {<a name="line.534"></a>
<span class="sourceLineNo">535</span>                filter = manager.parseFilter(clazz, filterPrefix, props, this);<a name="line.535"></a>
<span class="sourceLineNo">536</span>                if (filter == null) {<a name="line.536"></a>
<span class="sourceLineNo">537</span>                    LOGGER.debug("Filter key: [{}] class: [{}] props: {}", entry.getKey(), clazz, entry.getValue());<a name="line.537"></a>
<span class="sourceLineNo">538</span>                    filter = buildFilter(clazz, appenderName, entry.getValue());<a name="line.538"></a>
<span class="sourceLineNo">539</span>                }<a name="line.539"></a>
<span class="sourceLineNo">540</span>            }<a name="line.540"></a>
<span class="sourceLineNo">541</span>            if (filter != null) {<a name="line.541"></a>
<span class="sourceLineNo">542</span>                if (head != null) {<a name="line.542"></a>
<span class="sourceLineNo">543</span>                    head = filter;<a name="line.543"></a>
<span class="sourceLineNo">544</span>                    next = filter;<a name="line.544"></a>
<span class="sourceLineNo">545</span>                } else {<a name="line.545"></a>
<span class="sourceLineNo">546</span>                    next.setNext(filter);<a name="line.546"></a>
<span class="sourceLineNo">547</span>                    next = filter;<a name="line.547"></a>
<span class="sourceLineNo">548</span>                }<a name="line.548"></a>
<span class="sourceLineNo">549</span>            }<a name="line.549"></a>
<span class="sourceLineNo">550</span>        }<a name="line.550"></a>
<span class="sourceLineNo">551</span>        return head;<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>    private Filter buildFilter(String className, String appenderName, List&lt;NameValue&gt; props) {<a name="line.554"></a>
<span class="sourceLineNo">555</span>        Filter filter = newInstanceOf(className, "Filter");<a name="line.555"></a>
<span class="sourceLineNo">556</span>        if (filter != null) {<a name="line.556"></a>
<span class="sourceLineNo">557</span>            PropertySetter propSetter = new PropertySetter(filter);<a name="line.557"></a>
<span class="sourceLineNo">558</span>            for (NameValue property : props) {<a name="line.558"></a>
<span class="sourceLineNo">559</span>                propSetter.setProperty(property.key, property.value);<a name="line.559"></a>
<span class="sourceLineNo">560</span>            }<a name="line.560"></a>
<span class="sourceLineNo">561</span>            propSetter.activate();<a name="line.561"></a>
<span class="sourceLineNo">562</span>        }<a name="line.562"></a>
<span class="sourceLineNo">563</span>        return filter;<a name="line.563"></a>
<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
<span class="sourceLineNo">565</span><a name="line.565"></a>
<span class="sourceLineNo">566</span><a name="line.566"></a>
<span class="sourceLineNo">567</span>    private static &lt;T&gt; T newInstanceOf(String className, String type) {<a name="line.567"></a>
<span class="sourceLineNo">568</span>        try {<a name="line.568"></a>
<span class="sourceLineNo">569</span>            return LoaderUtil.newInstanceOf(className);<a name="line.569"></a>
<span class="sourceLineNo">570</span>        } catch (ClassNotFoundException | IllegalAccessException | NoSuchMethodException |<a name="line.570"></a>
<span class="sourceLineNo">571</span>                InstantiationException | InvocationTargetException ex) {<a name="line.571"></a>
<span class="sourceLineNo">572</span>            LOGGER.error("Unable to create {} {} due to {}:{}", type,  className,<a name="line.572"></a>
<span class="sourceLineNo">573</span>                    ex.getClass().getSimpleName(), ex.getMessage());<a name="line.573"></a>
<span class="sourceLineNo">574</span>            return null;<a name="line.574"></a>
<span class="sourceLineNo">575</span>        }<a name="line.575"></a>
<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
<span class="sourceLineNo">577</span><a name="line.577"></a>
<span class="sourceLineNo">578</span>    private static class NameValue {<a name="line.578"></a>
<span class="sourceLineNo">579</span>        String key, value;<a name="line.579"></a>
<span class="sourceLineNo">580</span><a name="line.580"></a>
<span class="sourceLineNo">581</span>        NameValue(String key, String value) {<a name="line.581"></a>
<span class="sourceLineNo">582</span>            this.key = key;<a name="line.582"></a>
<span class="sourceLineNo">583</span>            this.value = value;<a name="line.583"></a>
<span class="sourceLineNo">584</span>        }<a name="line.584"></a>
<span class="sourceLineNo">585</span><a name="line.585"></a>
<span class="sourceLineNo">586</span>        public String toString() {<a name="line.586"></a>
<span class="sourceLineNo">587</span>            return key + "=" + value;<a name="line.587"></a>
<span class="sourceLineNo">588</span>        }<a name="line.588"></a>
<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
<span class="sourceLineNo">590</span><a name="line.590"></a>
<span class="sourceLineNo">591</span>}<a name="line.591"></a>




























































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