<!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><a name="line.17"></a>
<span class="sourceLineNo">018</span>package org.apache.logging.log4j;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.io.Serializable;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.util.AbstractCollection;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.Collection;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.Collections;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.Iterator;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.List;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.Map;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.NoSuchElementException;<a name="line.27"></a>
<span class="sourceLineNo">028</span><a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.logging.log4j.message.ParameterizedMessage;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.logging.log4j.spi.DefaultThreadContextMap;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.logging.log4j.spi.DefaultThreadContextStack;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.logging.log4j.spi.NoOpThreadContextMap;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.logging.log4j.spi.ReadOnlyThreadContextMap;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.logging.log4j.spi.ThreadContextMap;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.logging.log4j.spi.ThreadContextMap2;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.logging.log4j.spi.CleanableThreadContextMap;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.logging.log4j.spi.ThreadContextMapFactory;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.logging.log4j.spi.ThreadContextStack;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.logging.log4j.util.PropertiesUtil;<a name="line.39"></a>
<span class="sourceLineNo">040</span><a name="line.40"></a>
<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
<span class="sourceLineNo">042</span> * The ThreadContext allows applications to store information either in a Map or a Stack.<a name="line.42"></a>
<span class="sourceLineNo">043</span> * &lt;p&gt;<a name="line.43"></a>
<span class="sourceLineNo">044</span> * &lt;b&gt;&lt;em&gt;The MDC is managed on a per thread basis&lt;/em&gt;&lt;/b&gt;. To enable automatic inheritance of &lt;i&gt;copies&lt;/i&gt; of the MDC<a name="line.44"></a>
<span class="sourceLineNo">045</span> * to newly created threads, enable the {@value DefaultThreadContextMap#INHERITABLE_MAP} Log4j system property.<a name="line.45"></a>
<span class="sourceLineNo">046</span> * &lt;/p&gt;<a name="line.46"></a>
<span class="sourceLineNo">047</span> * @see &lt;a href="https://logging.apache.org/log4j/2.x/manual/thread-context.html"&gt;Thread Context Manual&lt;/a&gt;<a name="line.47"></a>
<span class="sourceLineNo">048</span> */<a name="line.48"></a>
<span class="sourceLineNo">049</span>public final class ThreadContext {<a name="line.49"></a>
<span class="sourceLineNo">050</span><a name="line.50"></a>
<span class="sourceLineNo">051</span>    /**<a name="line.51"></a>
<span class="sourceLineNo">052</span>     * An empty read-only ThreadContextStack.<a name="line.52"></a>
<span class="sourceLineNo">053</span>     */<a name="line.53"></a>
<span class="sourceLineNo">054</span>    private static class EmptyThreadContextStack extends AbstractCollection&lt;String&gt; implements ThreadContextStack {<a name="line.54"></a>
<span class="sourceLineNo">055</span><a name="line.55"></a>
<span class="sourceLineNo">056</span>        private static final long serialVersionUID = 1L;<a name="line.56"></a>
<span class="sourceLineNo">057</span><a name="line.57"></a>
<span class="sourceLineNo">058</span>        private static final Iterator&lt;String&gt; EMPTY_ITERATOR = new EmptyIterator&lt;&gt;();<a name="line.58"></a>
<span class="sourceLineNo">059</span><a name="line.59"></a>
<span class="sourceLineNo">060</span>        @Override<a name="line.60"></a>
<span class="sourceLineNo">061</span>        public String pop() {<a name="line.61"></a>
<span class="sourceLineNo">062</span>            return null;<a name="line.62"></a>
<span class="sourceLineNo">063</span>        }<a name="line.63"></a>
<span class="sourceLineNo">064</span><a name="line.64"></a>
<span class="sourceLineNo">065</span>        @Override<a name="line.65"></a>
<span class="sourceLineNo">066</span>        public String peek() {<a name="line.66"></a>
<span class="sourceLineNo">067</span>            return null;<a name="line.67"></a>
<span class="sourceLineNo">068</span>        }<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>        @Override<a name="line.70"></a>
<span class="sourceLineNo">071</span>        public void push(final String message) {<a name="line.71"></a>
<span class="sourceLineNo">072</span>            throw new UnsupportedOperationException();<a name="line.72"></a>
<span class="sourceLineNo">073</span>        }<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span>        @Override<a name="line.75"></a>
<span class="sourceLineNo">076</span>        public int getDepth() {<a name="line.76"></a>
<span class="sourceLineNo">077</span>            return 0;<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>        @Override<a name="line.80"></a>
<span class="sourceLineNo">081</span>        public List&lt;String&gt; asList() {<a name="line.81"></a>
<span class="sourceLineNo">082</span>            return Collections.emptyList();<a name="line.82"></a>
<span class="sourceLineNo">083</span>        }<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>        @Override<a name="line.85"></a>
<span class="sourceLineNo">086</span>        public void trim(final int depth) {<a name="line.86"></a>
<span class="sourceLineNo">087</span>            // Do nothing<a name="line.87"></a>
<span class="sourceLineNo">088</span>        }<a name="line.88"></a>
<span class="sourceLineNo">089</span><a name="line.89"></a>
<span class="sourceLineNo">090</span>        @Override<a name="line.90"></a>
<span class="sourceLineNo">091</span>        public boolean equals(final Object o) {<a name="line.91"></a>
<span class="sourceLineNo">092</span>            // Similar to java.util.Collections.EmptyList.equals(Object)<a name="line.92"></a>
<span class="sourceLineNo">093</span>            return (o instanceof Collection) &amp;&amp; ((Collection&lt;?&gt;) o).isEmpty();<a name="line.93"></a>
<span class="sourceLineNo">094</span>        }<a name="line.94"></a>
<span class="sourceLineNo">095</span><a name="line.95"></a>
<span class="sourceLineNo">096</span>        @Override<a name="line.96"></a>
<span class="sourceLineNo">097</span>        public int hashCode() {<a name="line.97"></a>
<span class="sourceLineNo">098</span>            // Same as java.util.Collections.EmptyList.hashCode()<a name="line.98"></a>
<span class="sourceLineNo">099</span>            return 1;<a name="line.99"></a>
<span class="sourceLineNo">100</span>        }<a name="line.100"></a>
<span class="sourceLineNo">101</span><a name="line.101"></a>
<span class="sourceLineNo">102</span>        @Override<a name="line.102"></a>
<span class="sourceLineNo">103</span>        public ContextStack copy() {<a name="line.103"></a>
<span class="sourceLineNo">104</span>            return this;<a name="line.104"></a>
<span class="sourceLineNo">105</span>        }<a name="line.105"></a>
<span class="sourceLineNo">106</span><a name="line.106"></a>
<span class="sourceLineNo">107</span>        @Override<a name="line.107"></a>
<span class="sourceLineNo">108</span>        public &lt;T&gt; T[] toArray(final T[] a) {<a name="line.108"></a>
<span class="sourceLineNo">109</span>            throw new UnsupportedOperationException();<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>        @Override<a name="line.112"></a>
<span class="sourceLineNo">113</span>        public boolean add(final String e) {<a name="line.113"></a>
<span class="sourceLineNo">114</span>            throw new UnsupportedOperationException();<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>        @Override<a name="line.117"></a>
<span class="sourceLineNo">118</span>        public boolean containsAll(final Collection&lt;?&gt; c) {<a name="line.118"></a>
<span class="sourceLineNo">119</span>            return false;<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>        @Override<a name="line.122"></a>
<span class="sourceLineNo">123</span>        public boolean addAll(final Collection&lt;? extends String&gt; c) {<a name="line.123"></a>
<span class="sourceLineNo">124</span>            throw new UnsupportedOperationException();<a name="line.124"></a>
<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
<span class="sourceLineNo">126</span><a name="line.126"></a>
<span class="sourceLineNo">127</span>        @Override<a name="line.127"></a>
<span class="sourceLineNo">128</span>        public boolean removeAll(final Collection&lt;?&gt; c) {<a name="line.128"></a>
<span class="sourceLineNo">129</span>            throw new UnsupportedOperationException();<a name="line.129"></a>
<span class="sourceLineNo">130</span>        }<a name="line.130"></a>
<span class="sourceLineNo">131</span><a name="line.131"></a>
<span class="sourceLineNo">132</span>        @Override<a name="line.132"></a>
<span class="sourceLineNo">133</span>        public boolean retainAll(final Collection&lt;?&gt; c) {<a name="line.133"></a>
<span class="sourceLineNo">134</span>            throw new UnsupportedOperationException();<a name="line.134"></a>
<span class="sourceLineNo">135</span>        }<a name="line.135"></a>
<span class="sourceLineNo">136</span><a name="line.136"></a>
<span class="sourceLineNo">137</span>        @Override<a name="line.137"></a>
<span class="sourceLineNo">138</span>        public Iterator&lt;String&gt; iterator() {<a name="line.138"></a>
<span class="sourceLineNo">139</span>            return EMPTY_ITERATOR;<a name="line.139"></a>
<span class="sourceLineNo">140</span>        }<a name="line.140"></a>
<span class="sourceLineNo">141</span><a name="line.141"></a>
<span class="sourceLineNo">142</span>        @Override<a name="line.142"></a>
<span class="sourceLineNo">143</span>        public int size() {<a name="line.143"></a>
<span class="sourceLineNo">144</span>            return 0;<a name="line.144"></a>
<span class="sourceLineNo">145</span>        }<a name="line.145"></a>
<span class="sourceLineNo">146</span><a name="line.146"></a>
<span class="sourceLineNo">147</span>        @Override<a name="line.147"></a>
<span class="sourceLineNo">148</span>        public ContextStack getImmutableStackOrNull() {<a name="line.148"></a>
<span class="sourceLineNo">149</span>            return this;<a name="line.149"></a>
<span class="sourceLineNo">150</span>        }<a name="line.150"></a>
<span class="sourceLineNo">151</span>    }<a name="line.151"></a>
<span class="sourceLineNo">152</span><a name="line.152"></a>
<span class="sourceLineNo">153</span>    /**<a name="line.153"></a>
<span class="sourceLineNo">154</span>     * An empty iterator. Since Java 1.7 added the Collections.emptyIterator() method, we have to make do.<a name="line.154"></a>
<span class="sourceLineNo">155</span>     *<a name="line.155"></a>
<span class="sourceLineNo">156</span>     * @param &lt;E&gt; the type of the empty iterator<a name="line.156"></a>
<span class="sourceLineNo">157</span>     */<a name="line.157"></a>
<span class="sourceLineNo">158</span>    private static class EmptyIterator&lt;E&gt; implements Iterator&lt;E&gt; {<a name="line.158"></a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span>        @Override<a name="line.160"></a>
<span class="sourceLineNo">161</span>        public boolean hasNext() {<a name="line.161"></a>
<span class="sourceLineNo">162</span>            return false;<a name="line.162"></a>
<span class="sourceLineNo">163</span>        }<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>        @Override<a name="line.165"></a>
<span class="sourceLineNo">166</span>        public E next() {<a name="line.166"></a>
<span class="sourceLineNo">167</span>            throw new NoSuchElementException("This is an empty iterator!");<a name="line.167"></a>
<span class="sourceLineNo">168</span>        }<a name="line.168"></a>
<span class="sourceLineNo">169</span><a name="line.169"></a>
<span class="sourceLineNo">170</span>        @Override<a name="line.170"></a>
<span class="sourceLineNo">171</span>        public void remove() {<a name="line.171"></a>
<span class="sourceLineNo">172</span>            // no-op<a name="line.172"></a>
<span class="sourceLineNo">173</span>        }<a name="line.173"></a>
<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
<span class="sourceLineNo">175</span><a name="line.175"></a>
<span class="sourceLineNo">176</span>    /**<a name="line.176"></a>
<span class="sourceLineNo">177</span>     * Empty, immutable Map.<a name="line.177"></a>
<span class="sourceLineNo">178</span>     */<a name="line.178"></a>
<span class="sourceLineNo">179</span>    // ironically, this annotation gives an "unsupported @SuppressWarnings" warning in Eclipse<a name="line.179"></a>
<span class="sourceLineNo">180</span>    @SuppressWarnings("PublicStaticCollectionField")<a name="line.180"></a>
<span class="sourceLineNo">181</span>    // I like irony, so I won't delete it...<a name="line.181"></a>
<span class="sourceLineNo">182</span>    public static final Map&lt;String, String&gt; EMPTY_MAP = Collections.emptyMap();<a name="line.182"></a>
<span class="sourceLineNo">183</span><a name="line.183"></a>
<span class="sourceLineNo">184</span>    /**<a name="line.184"></a>
<span class="sourceLineNo">185</span>     * Empty, immutable ContextStack.<a name="line.185"></a>
<span class="sourceLineNo">186</span>     */<a name="line.186"></a>
<span class="sourceLineNo">187</span>    // ironically, this annotation gives an "unsupported @SuppressWarnings" warning in Eclipse<a name="line.187"></a>
<span class="sourceLineNo">188</span>    @SuppressWarnings("PublicStaticCollectionField")<a name="line.188"></a>
<span class="sourceLineNo">189</span>    public static final ThreadContextStack EMPTY_STACK = new EmptyThreadContextStack();<a name="line.189"></a>
<span class="sourceLineNo">190</span><a name="line.190"></a>
<span class="sourceLineNo">191</span>    private static final String DISABLE_MAP = "disableThreadContextMap";<a name="line.191"></a>
<span class="sourceLineNo">192</span>    private static final String DISABLE_STACK = "disableThreadContextStack";<a name="line.192"></a>
<span class="sourceLineNo">193</span>    private static final String DISABLE_ALL = "disableThreadContext";<a name="line.193"></a>
<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span>    private static boolean useStack;<a name="line.195"></a>
<span class="sourceLineNo">196</span>    private static ThreadContextMap contextMap;<a name="line.196"></a>
<span class="sourceLineNo">197</span>    private static ThreadContextStack contextStack;<a name="line.197"></a>
<span class="sourceLineNo">198</span>    private static ReadOnlyThreadContextMap readOnlyContextMap;<a name="line.198"></a>
<span class="sourceLineNo">199</span><a name="line.199"></a>
<span class="sourceLineNo">200</span>    static {<a name="line.200"></a>
<span class="sourceLineNo">201</span>        init();<a name="line.201"></a>
<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
<span class="sourceLineNo">203</span><a name="line.203"></a>
<span class="sourceLineNo">204</span>    private ThreadContext() {<a name="line.204"></a>
<span class="sourceLineNo">205</span>        // empty<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>    /**<a name="line.208"></a>
<span class="sourceLineNo">209</span>     * &lt;em&gt;Consider private, used for testing.&lt;/em&gt;<a name="line.209"></a>
<span class="sourceLineNo">210</span>     */<a name="line.210"></a>
<span class="sourceLineNo">211</span>    static void init() {<a name="line.211"></a>
<span class="sourceLineNo">212</span>        ThreadContextMapFactory.init();<a name="line.212"></a>
<span class="sourceLineNo">213</span>        contextMap = null;<a name="line.213"></a>
<span class="sourceLineNo">214</span>        final PropertiesUtil managerProps = PropertiesUtil.getProperties();<a name="line.214"></a>
<span class="sourceLineNo">215</span>        boolean disableAll = managerProps.getBooleanProperty(DISABLE_ALL);<a name="line.215"></a>
<span class="sourceLineNo">216</span>        useStack = !(managerProps.getBooleanProperty(DISABLE_STACK) || disableAll);<a name="line.216"></a>
<span class="sourceLineNo">217</span>        boolean useMap = !(managerProps.getBooleanProperty(DISABLE_MAP) || disableAll);<a name="line.217"></a>
<span class="sourceLineNo">218</span><a name="line.218"></a>
<span class="sourceLineNo">219</span>        contextStack = new DefaultThreadContextStack(useStack);<a name="line.219"></a>
<span class="sourceLineNo">220</span>        if (!useMap) {<a name="line.220"></a>
<span class="sourceLineNo">221</span>            contextMap = new NoOpThreadContextMap();<a name="line.221"></a>
<span class="sourceLineNo">222</span>        } else {<a name="line.222"></a>
<span class="sourceLineNo">223</span>            contextMap = ThreadContextMapFactory.createThreadContextMap();<a name="line.223"></a>
<span class="sourceLineNo">224</span>        }<a name="line.224"></a>
<span class="sourceLineNo">225</span>        if (contextMap instanceof ReadOnlyThreadContextMap) {<a name="line.225"></a>
<span class="sourceLineNo">226</span>            readOnlyContextMap = (ReadOnlyThreadContextMap) contextMap;<a name="line.226"></a>
<span class="sourceLineNo">227</span>        } else {<a name="line.227"></a>
<span class="sourceLineNo">228</span>            readOnlyContextMap = null;<a name="line.228"></a>
<span class="sourceLineNo">229</span>        }<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>     * Puts a context value (the &lt;code&gt;value&lt;/code&gt; parameter) as identified with the &lt;code&gt;key&lt;/code&gt; parameter into<a name="line.233"></a>
<span class="sourceLineNo">234</span>     * the current thread's context map.<a name="line.234"></a>
<span class="sourceLineNo">235</span>     *<a name="line.235"></a>
<span class="sourceLineNo">236</span>     * &lt;p&gt;<a name="line.236"></a>
<span class="sourceLineNo">237</span>     * If the current thread does not have a context map it is created as a side effect.<a name="line.237"></a>
<span class="sourceLineNo">238</span>     * &lt;/p&gt;<a name="line.238"></a>
<span class="sourceLineNo">239</span>     *<a name="line.239"></a>
<span class="sourceLineNo">240</span>     * @param key The key name.<a name="line.240"></a>
<span class="sourceLineNo">241</span>     * @param value The key value.<a name="line.241"></a>
<span class="sourceLineNo">242</span>     */<a name="line.242"></a>
<span class="sourceLineNo">243</span>    public static void put(final String key, final String value) {<a name="line.243"></a>
<span class="sourceLineNo">244</span>        contextMap.put(key, value);<a name="line.244"></a>
<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
<span class="sourceLineNo">246</span><a name="line.246"></a>
<span class="sourceLineNo">247</span>    /**<a name="line.247"></a>
<span class="sourceLineNo">248</span>     * Puts a context value (the &lt;code&gt;value&lt;/code&gt; parameter) as identified with the &lt;code&gt;key&lt;/code&gt; parameter into<a name="line.248"></a>
<span class="sourceLineNo">249</span>     * the current thread's context map if the key does not exist.<a name="line.249"></a>
<span class="sourceLineNo">250</span>     *<a name="line.250"></a>
<span class="sourceLineNo">251</span>     * &lt;p&gt;<a name="line.251"></a>
<span class="sourceLineNo">252</span>     * If the current thread does not have a context map it is created as a side effect.<a name="line.252"></a>
<span class="sourceLineNo">253</span>     * &lt;/p&gt;<a name="line.253"></a>
<span class="sourceLineNo">254</span>     *<a name="line.254"></a>
<span class="sourceLineNo">255</span>     * @param key The key name.<a name="line.255"></a>
<span class="sourceLineNo">256</span>     * @param value The key value.<a name="line.256"></a>
<span class="sourceLineNo">257</span>     * @since 2.13.0<a name="line.257"></a>
<span class="sourceLineNo">258</span>     */<a name="line.258"></a>
<span class="sourceLineNo">259</span>    public static void putIfNull(final String key, final String value) {<a name="line.259"></a>
<span class="sourceLineNo">260</span>        if(!contextMap.containsKey(key)) {<a name="line.260"></a>
<span class="sourceLineNo">261</span>            contextMap.put(key, value);<a name="line.261"></a>
<span class="sourceLineNo">262</span>        }<a name="line.262"></a>
<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
<span class="sourceLineNo">264</span><a name="line.264"></a>
<span class="sourceLineNo">265</span>    /**<a name="line.265"></a>
<span class="sourceLineNo">266</span>     * Puts all given context map entries into the current thread's<a name="line.266"></a>
<span class="sourceLineNo">267</span>     * context map.<a name="line.267"></a>
<span class="sourceLineNo">268</span>     *<a name="line.268"></a>
<span class="sourceLineNo">269</span>     * &lt;p&gt;If the current thread does not have a context map it is<a name="line.269"></a>
<span class="sourceLineNo">270</span>     * created as a side effect.&lt;/p&gt;<a name="line.270"></a>
<span class="sourceLineNo">271</span>     * @param m The map.<a name="line.271"></a>
<span class="sourceLineNo">272</span>     * @since 2.7<a name="line.272"></a>
<span class="sourceLineNo">273</span>     */<a name="line.273"></a>
<span class="sourceLineNo">274</span>    public static void putAll(final Map&lt;String, String&gt; m) {<a name="line.274"></a>
<span class="sourceLineNo">275</span>        if (contextMap instanceof ThreadContextMap2) {<a name="line.275"></a>
<span class="sourceLineNo">276</span>            ((ThreadContextMap2) contextMap).putAll(m);<a name="line.276"></a>
<span class="sourceLineNo">277</span>        } else if (contextMap instanceof DefaultThreadContextMap) {<a name="line.277"></a>
<span class="sourceLineNo">278</span>            ((DefaultThreadContextMap) contextMap).putAll(m);<a name="line.278"></a>
<span class="sourceLineNo">279</span>        } else {<a name="line.279"></a>
<span class="sourceLineNo">280</span>            for (final Map.Entry&lt;String, String&gt; entry: m.entrySet()) {<a name="line.280"></a>
<span class="sourceLineNo">281</span>                contextMap.put(entry.getKey(), entry.getValue());<a name="line.281"></a>
<span class="sourceLineNo">282</span>            }<a name="line.282"></a>
<span class="sourceLineNo">283</span>        }<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>    /**<a name="line.286"></a>
<span class="sourceLineNo">287</span>     * Gets the context value identified by the &lt;code&gt;key&lt;/code&gt; parameter.<a name="line.287"></a>
<span class="sourceLineNo">288</span>     *<a name="line.288"></a>
<span class="sourceLineNo">289</span>     * &lt;p&gt;<a name="line.289"></a>
<span class="sourceLineNo">290</span>     * This method has no side effects.<a name="line.290"></a>
<span class="sourceLineNo">291</span>     * &lt;/p&gt;<a name="line.291"></a>
<span class="sourceLineNo">292</span>     *<a name="line.292"></a>
<span class="sourceLineNo">293</span>     * @param key The key to locate.<a name="line.293"></a>
<span class="sourceLineNo">294</span>     * @return The value associated with the key or null.<a name="line.294"></a>
<span class="sourceLineNo">295</span>     */<a name="line.295"></a>
<span class="sourceLineNo">296</span>    public static String get(final String key) {<a name="line.296"></a>
<span class="sourceLineNo">297</span>        return contextMap.get(key);<a name="line.297"></a>
<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
<span class="sourceLineNo">300</span>    /**<a name="line.300"></a>
<span class="sourceLineNo">301</span>     * Removes the context value identified by the &lt;code&gt;key&lt;/code&gt; parameter.<a name="line.301"></a>
<span class="sourceLineNo">302</span>     *<a name="line.302"></a>
<span class="sourceLineNo">303</span>     * @param key The key to remove.<a name="line.303"></a>
<span class="sourceLineNo">304</span>     */<a name="line.304"></a>
<span class="sourceLineNo">305</span>    public static void remove(final String key) {<a name="line.305"></a>
<span class="sourceLineNo">306</span>        contextMap.remove(key);<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>     * Removes the context values identified by the &lt;code&gt;keys&lt;/code&gt; parameter.<a name="line.310"></a>
<span class="sourceLineNo">311</span>     *<a name="line.311"></a>
<span class="sourceLineNo">312</span>     * @param keys The keys to remove.<a name="line.312"></a>
<span class="sourceLineNo">313</span>     *<a name="line.313"></a>
<span class="sourceLineNo">314</span>     * @since 2.8<a name="line.314"></a>
<span class="sourceLineNo">315</span>     */<a name="line.315"></a>
<span class="sourceLineNo">316</span>    public static void removeAll(final Iterable&lt;String&gt; keys) {<a name="line.316"></a>
<span class="sourceLineNo">317</span>        if (contextMap instanceof CleanableThreadContextMap) {<a name="line.317"></a>
<span class="sourceLineNo">318</span>            ((CleanableThreadContextMap) contextMap).removeAll(keys);<a name="line.318"></a>
<span class="sourceLineNo">319</span>        } else if (contextMap instanceof DefaultThreadContextMap) {<a name="line.319"></a>
<span class="sourceLineNo">320</span>            ((DefaultThreadContextMap) contextMap).removeAll(keys);<a name="line.320"></a>
<span class="sourceLineNo">321</span>        } else {<a name="line.321"></a>
<span class="sourceLineNo">322</span>            for (final String key : keys) {<a name="line.322"></a>
<span class="sourceLineNo">323</span>                contextMap.remove(key);<a name="line.323"></a>
<span class="sourceLineNo">324</span>            }<a name="line.324"></a>
<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
<span class="sourceLineNo">326</span>    }<a name="line.326"></a>
<span class="sourceLineNo">327</span><a name="line.327"></a>
<span class="sourceLineNo">328</span>    /**<a name="line.328"></a>
<span class="sourceLineNo">329</span>     * Clears the context map.<a name="line.329"></a>
<span class="sourceLineNo">330</span>     */<a name="line.330"></a>
<span class="sourceLineNo">331</span>    public static void clearMap() {<a name="line.331"></a>
<span class="sourceLineNo">332</span>        contextMap.clear();<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>     * Clears the context map and stack.<a name="line.336"></a>
<span class="sourceLineNo">337</span>     */<a name="line.337"></a>
<span class="sourceLineNo">338</span>    public static void clearAll() {<a name="line.338"></a>
<span class="sourceLineNo">339</span>        clearMap();<a name="line.339"></a>
<span class="sourceLineNo">340</span>        clearStack();<a name="line.340"></a>
<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
<span class="sourceLineNo">342</span><a name="line.342"></a>
<span class="sourceLineNo">343</span>    /**<a name="line.343"></a>
<span class="sourceLineNo">344</span>     * Determines if the key is in the context.<a name="line.344"></a>
<span class="sourceLineNo">345</span>     *<a name="line.345"></a>
<span class="sourceLineNo">346</span>     * @param key The key to locate.<a name="line.346"></a>
<span class="sourceLineNo">347</span>     * @return True if the key is in the context, false otherwise.<a name="line.347"></a>
<span class="sourceLineNo">348</span>     */<a name="line.348"></a>
<span class="sourceLineNo">349</span>    public static boolean containsKey(final String key) {<a name="line.349"></a>
<span class="sourceLineNo">350</span>        return contextMap.containsKey(key);<a name="line.350"></a>
<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
<span class="sourceLineNo">353</span>    /**<a name="line.353"></a>
<span class="sourceLineNo">354</span>     * Returns a mutable copy of current thread's context Map.<a name="line.354"></a>
<span class="sourceLineNo">355</span>     *<a name="line.355"></a>
<span class="sourceLineNo">356</span>     * @return a mutable copy of the context.<a name="line.356"></a>
<span class="sourceLineNo">357</span>     */<a name="line.357"></a>
<span class="sourceLineNo">358</span>    public static Map&lt;String, String&gt; getContext() {<a name="line.358"></a>
<span class="sourceLineNo">359</span>        return contextMap.getCopy();<a name="line.359"></a>
<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
<span class="sourceLineNo">361</span><a name="line.361"></a>
<span class="sourceLineNo">362</span>    /**<a name="line.362"></a>
<span class="sourceLineNo">363</span>     * Returns an immutable view of the current thread's context Map.<a name="line.363"></a>
<span class="sourceLineNo">364</span>     *<a name="line.364"></a>
<span class="sourceLineNo">365</span>     * @return An immutable view of the ThreadContext Map.<a name="line.365"></a>
<span class="sourceLineNo">366</span>     */<a name="line.366"></a>
<span class="sourceLineNo">367</span>    public static Map&lt;String, String&gt; getImmutableContext() {<a name="line.367"></a>
<span class="sourceLineNo">368</span>        final Map&lt;String, String&gt; map = contextMap.getImmutableMapOrNull();<a name="line.368"></a>
<span class="sourceLineNo">369</span>        return map == null ? EMPTY_MAP : map;<a name="line.369"></a>
<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
<span class="sourceLineNo">371</span><a name="line.371"></a>
<span class="sourceLineNo">372</span>    /**<a name="line.372"></a>
<span class="sourceLineNo">373</span>     * Returns a read-only view of the internal data structure used to store thread context key-value pairs,<a name="line.373"></a>
<span class="sourceLineNo">374</span>     * or {@code null} if the internal data structure does not implement the<a name="line.374"></a>
<span class="sourceLineNo">375</span>     * {@code ReadOnlyThreadContextMap} interface.<a name="line.375"></a>
<span class="sourceLineNo">376</span>     * &lt;p&gt;<a name="line.376"></a>
<span class="sourceLineNo">377</span>     * The {@link DefaultThreadContextMap} implementation does not implement {@code ReadOnlyThreadContextMap}, so by<a name="line.377"></a>
<span class="sourceLineNo">378</span>     * default this method returns {@code null}.<a name="line.378"></a>
<span class="sourceLineNo">379</span>     * &lt;/p&gt;<a name="line.379"></a>
<span class="sourceLineNo">380</span>     *<a name="line.380"></a>
<span class="sourceLineNo">381</span>     * @return the internal data structure used to store thread context key-value pairs or {@code null}<a name="line.381"></a>
<span class="sourceLineNo">382</span>     * @see ThreadContextMapFactory<a name="line.382"></a>
<span class="sourceLineNo">383</span>     * @see DefaultThreadContextMap<a name="line.383"></a>
<span class="sourceLineNo">384</span>     * @see org.apache.logging.log4j.spi.CopyOnWriteSortedArrayThreadContextMap<a name="line.384"></a>
<span class="sourceLineNo">385</span>     * @see org.apache.logging.log4j.spi.GarbageFreeSortedArrayThreadContextMap<a name="line.385"></a>
<span class="sourceLineNo">386</span>     * @since 2.8<a name="line.386"></a>
<span class="sourceLineNo">387</span>     */<a name="line.387"></a>
<span class="sourceLineNo">388</span>    public static ReadOnlyThreadContextMap getThreadContextMap() {<a name="line.388"></a>
<span class="sourceLineNo">389</span>        return readOnlyContextMap;<a name="line.389"></a>
<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
<span class="sourceLineNo">391</span><a name="line.391"></a>
<span class="sourceLineNo">392</span>    /**<a name="line.392"></a>
<span class="sourceLineNo">393</span>     * Returns true if the Map is empty.<a name="line.393"></a>
<span class="sourceLineNo">394</span>     *<a name="line.394"></a>
<span class="sourceLineNo">395</span>     * @return true if the Map is empty, false otherwise.<a name="line.395"></a>
<span class="sourceLineNo">396</span>     */<a name="line.396"></a>
<span class="sourceLineNo">397</span>    public static boolean isEmpty() {<a name="line.397"></a>
<span class="sourceLineNo">398</span>        return contextMap.isEmpty();<a name="line.398"></a>
<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
<span class="sourceLineNo">400</span><a name="line.400"></a>
<span class="sourceLineNo">401</span>    /**<a name="line.401"></a>
<span class="sourceLineNo">402</span>     * Clears the stack for this thread.<a name="line.402"></a>
<span class="sourceLineNo">403</span>     */<a name="line.403"></a>
<span class="sourceLineNo">404</span>    public static void clearStack() {<a name="line.404"></a>
<span class="sourceLineNo">405</span>        contextStack.clear();<a name="line.405"></a>
<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
<span class="sourceLineNo">407</span><a name="line.407"></a>
<span class="sourceLineNo">408</span>    /**<a name="line.408"></a>
<span class="sourceLineNo">409</span>     * Returns a copy of this thread's stack.<a name="line.409"></a>
<span class="sourceLineNo">410</span>     *<a name="line.410"></a>
<span class="sourceLineNo">411</span>     * @return A copy of this thread's stack.<a name="line.411"></a>
<span class="sourceLineNo">412</span>     */<a name="line.412"></a>
<span class="sourceLineNo">413</span>    public static ContextStack cloneStack() {<a name="line.413"></a>
<span class="sourceLineNo">414</span>        return contextStack.copy();<a name="line.414"></a>
<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
<span class="sourceLineNo">416</span><a name="line.416"></a>
<span class="sourceLineNo">417</span>    /**<a name="line.417"></a>
<span class="sourceLineNo">418</span>     * Gets an immutable copy of this current thread's context stack.<a name="line.418"></a>
<span class="sourceLineNo">419</span>     *<a name="line.419"></a>
<span class="sourceLineNo">420</span>     * @return an immutable copy of the ThreadContext stack.<a name="line.420"></a>
<span class="sourceLineNo">421</span>     */<a name="line.421"></a>
<span class="sourceLineNo">422</span>    public static ContextStack getImmutableStack() {<a name="line.422"></a>
<span class="sourceLineNo">423</span>        final ContextStack result = contextStack.getImmutableStackOrNull();<a name="line.423"></a>
<span class="sourceLineNo">424</span>        return result == null ? EMPTY_STACK : result;<a name="line.424"></a>
<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
<span class="sourceLineNo">426</span><a name="line.426"></a>
<span class="sourceLineNo">427</span>    /**<a name="line.427"></a>
<span class="sourceLineNo">428</span>     * Sets this thread's stack.<a name="line.428"></a>
<span class="sourceLineNo">429</span>     *<a name="line.429"></a>
<span class="sourceLineNo">430</span>     * @param stack The stack to use.<a name="line.430"></a>
<span class="sourceLineNo">431</span>     */<a name="line.431"></a>
<span class="sourceLineNo">432</span>    public static void setStack(final Collection&lt;String&gt; stack) {<a name="line.432"></a>
<span class="sourceLineNo">433</span>        if (stack.isEmpty() || !useStack) {<a name="line.433"></a>
<span class="sourceLineNo">434</span>            return;<a name="line.434"></a>
<span class="sourceLineNo">435</span>        }<a name="line.435"></a>
<span class="sourceLineNo">436</span>        contextStack.clear();<a name="line.436"></a>
<span class="sourceLineNo">437</span>        contextStack.addAll(stack);<a name="line.437"></a>
<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
<span class="sourceLineNo">439</span><a name="line.439"></a>
<span class="sourceLineNo">440</span>    /**<a name="line.440"></a>
<span class="sourceLineNo">441</span>     * Gets the current nesting depth of this thread's stack.<a name="line.441"></a>
<span class="sourceLineNo">442</span>     *<a name="line.442"></a>
<span class="sourceLineNo">443</span>     * @return the number of items in the stack.<a name="line.443"></a>
<span class="sourceLineNo">444</span>     *<a name="line.444"></a>
<span class="sourceLineNo">445</span>     * @see #trim<a name="line.445"></a>
<span class="sourceLineNo">446</span>     */<a name="line.446"></a>
<span class="sourceLineNo">447</span>    public static int getDepth() {<a name="line.447"></a>
<span class="sourceLineNo">448</span>        return contextStack.getDepth();<a name="line.448"></a>
<span class="sourceLineNo">449</span>    }<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>     * Returns the value of the last item placed on the stack.<a name="line.452"></a>
<span class="sourceLineNo">453</span>     *<a name="line.453"></a>
<span class="sourceLineNo">454</span>     * &lt;p&gt;<a name="line.454"></a>
<span class="sourceLineNo">455</span>     * The returned value is the value that was pushed last. If no context is available, then the empty string "" is<a name="line.455"></a>
<span class="sourceLineNo">456</span>     * returned.<a name="line.456"></a>
<span class="sourceLineNo">457</span>     * &lt;/p&gt;<a name="line.457"></a>
<span class="sourceLineNo">458</span>     *<a name="line.458"></a>
<span class="sourceLineNo">459</span>     * @return String The innermost diagnostic context.<a name="line.459"></a>
<span class="sourceLineNo">460</span>     */<a name="line.460"></a>
<span class="sourceLineNo">461</span>    public static String pop() {<a name="line.461"></a>
<span class="sourceLineNo">462</span>        return contextStack.pop();<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>     * Looks at the last diagnostic context at the top of this NDC without removing it.<a name="line.466"></a>
<span class="sourceLineNo">467</span>     *<a name="line.467"></a>
<span class="sourceLineNo">468</span>     * &lt;p&gt;<a name="line.468"></a>
<span class="sourceLineNo">469</span>     * The returned value is the value that was pushed last. If no context is available, then the empty string "" is<a name="line.469"></a>
<span class="sourceLineNo">470</span>     * returned.<a name="line.470"></a>
<span class="sourceLineNo">471</span>     * &lt;/p&gt;<a name="line.471"></a>
<span class="sourceLineNo">472</span>     *<a name="line.472"></a>
<span class="sourceLineNo">473</span>     * @return String The innermost diagnostic context.<a name="line.473"></a>
<span class="sourceLineNo">474</span>     */<a name="line.474"></a>
<span class="sourceLineNo">475</span>    public static String peek() {<a name="line.475"></a>
<span class="sourceLineNo">476</span>        return contextStack.peek();<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>    /**<a name="line.479"></a>
<span class="sourceLineNo">480</span>     * Pushes new diagnostic context information for the current thread.<a name="line.480"></a>
<span class="sourceLineNo">481</span>     *<a name="line.481"></a>
<span class="sourceLineNo">482</span>     * &lt;p&gt;<a name="line.482"></a>
<span class="sourceLineNo">483</span>     * The contents of the &lt;code&gt;message&lt;/code&gt; parameter is determined solely by the client.<a name="line.483"></a>
<span class="sourceLineNo">484</span>     * &lt;/p&gt;<a name="line.484"></a>
<span class="sourceLineNo">485</span>     *<a name="line.485"></a>
<span class="sourceLineNo">486</span>     * @param message The new diagnostic context information.<a name="line.486"></a>
<span class="sourceLineNo">487</span>     */<a name="line.487"></a>
<span class="sourceLineNo">488</span>    public static void push(final String message) {<a name="line.488"></a>
<span class="sourceLineNo">489</span>        contextStack.push(message);<a name="line.489"></a>
<span class="sourceLineNo">490</span>    }<a name="line.490"></a>
<span class="sourceLineNo">491</span><a name="line.491"></a>
<span class="sourceLineNo">492</span>    /**<a name="line.492"></a>
<span class="sourceLineNo">493</span>     * Pushes new diagnostic context information for the current thread.<a name="line.493"></a>
<span class="sourceLineNo">494</span>     *<a name="line.494"></a>
<span class="sourceLineNo">495</span>     * &lt;p&gt;<a name="line.495"></a>
<span class="sourceLineNo">496</span>     * The contents of the &lt;code&gt;message&lt;/code&gt; and args parameters are determined solely by the client. The message<a name="line.496"></a>
<span class="sourceLineNo">497</span>     * will be treated as a format String and tokens will be replaced with the String value of the arguments in<a name="line.497"></a>
<span class="sourceLineNo">498</span>     * accordance with ParameterizedMessage.<a name="line.498"></a>
<span class="sourceLineNo">499</span>     * &lt;/p&gt;<a name="line.499"></a>
<span class="sourceLineNo">500</span>     *<a name="line.500"></a>
<span class="sourceLineNo">501</span>     * @param message The new diagnostic context information.<a name="line.501"></a>
<span class="sourceLineNo">502</span>     * @param args Parameters for the message.<a name="line.502"></a>
<span class="sourceLineNo">503</span>     */<a name="line.503"></a>
<span class="sourceLineNo">504</span>    public static void push(final String message, final Object... args) {<a name="line.504"></a>
<span class="sourceLineNo">505</span>        contextStack.push(ParameterizedMessage.format(message, args));<a name="line.505"></a>
<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
<span class="sourceLineNo">507</span><a name="line.507"></a>
<span class="sourceLineNo">508</span>    /**<a name="line.508"></a>
<span class="sourceLineNo">509</span>     * Removes the diagnostic context for this thread.<a name="line.509"></a>
<span class="sourceLineNo">510</span>     *<a name="line.510"></a>
<span class="sourceLineNo">511</span>     * &lt;p&gt;<a name="line.511"></a>
<span class="sourceLineNo">512</span>     * Each thread that created a diagnostic context by calling {@link #push} should call this method before exiting.<a name="line.512"></a>
<span class="sourceLineNo">513</span>     * Otherwise, the memory used by the &lt;b&gt;thread&lt;/b&gt; cannot be reclaimed by the VM.<a name="line.513"></a>
<span class="sourceLineNo">514</span>     * &lt;/p&gt;<a name="line.514"></a>
<span class="sourceLineNo">515</span>     *<a name="line.515"></a>
<span class="sourceLineNo">516</span>     * &lt;p&gt;<a name="line.516"></a>
<span class="sourceLineNo">517</span>     * As this is such an important problem in heavy duty systems and because it is difficult to always guarantee that<a name="line.517"></a>
<span class="sourceLineNo">518</span>     * the remove method is called before exiting a thread, this method has been augmented to lazily remove references<a name="line.518"></a>
<span class="sourceLineNo">519</span>     * to dead threads. In practice, this means that you can be a little sloppy and occasionally forget to call<a name="line.519"></a>
<span class="sourceLineNo">520</span>     * {@link #remove} before exiting a thread. However, you must call &lt;code&gt;remove&lt;/code&gt; sometime. If you never call<a name="line.520"></a>
<span class="sourceLineNo">521</span>     * it, then your application is sure to run out of memory.<a name="line.521"></a>
<span class="sourceLineNo">522</span>     * &lt;/p&gt;<a name="line.522"></a>
<span class="sourceLineNo">523</span>     */<a name="line.523"></a>
<span class="sourceLineNo">524</span>    public static void removeStack() {<a name="line.524"></a>
<span class="sourceLineNo">525</span>        contextStack.clear();<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>     * Trims elements from this diagnostic context. If the current depth is smaller or equal to &lt;code&gt;maxDepth&lt;/code&gt;,<a name="line.529"></a>
<span class="sourceLineNo">530</span>     * then no action is taken. If the current depth is larger than newDepth then all elements at maxDepth or higher are<a name="line.530"></a>
<span class="sourceLineNo">531</span>     * discarded.<a name="line.531"></a>
<span class="sourceLineNo">532</span>     *<a name="line.532"></a>
<span class="sourceLineNo">533</span>     * &lt;p&gt;<a name="line.533"></a>
<span class="sourceLineNo">534</span>     * This method is a convenient alternative to multiple {@link #pop} calls. Moreover, it is often the case that at<a name="line.534"></a>
<span class="sourceLineNo">535</span>     * the end of complex call sequences, the depth of the ThreadContext is unpredictable. The &lt;code&gt;trim&lt;/code&gt; method<a name="line.535"></a>
<span class="sourceLineNo">536</span>     * circumvents this problem.<a name="line.536"></a>
<span class="sourceLineNo">537</span>     * &lt;/p&gt;<a name="line.537"></a>
<span class="sourceLineNo">538</span>     *<a name="line.538"></a>
<span class="sourceLineNo">539</span>     * &lt;p&gt;<a name="line.539"></a>
<span class="sourceLineNo">540</span>     * For example, the combination<a name="line.540"></a>
<span class="sourceLineNo">541</span>     * &lt;/p&gt;<a name="line.541"></a>
<span class="sourceLineNo">542</span>     *<a name="line.542"></a>
<span class="sourceLineNo">543</span>     * &lt;pre&gt;<a name="line.543"></a>
<span class="sourceLineNo">544</span>     * void foo() {<a name="line.544"></a>
<span class="sourceLineNo">545</span>     *     final int depth = ThreadContext.getDepth();<a name="line.545"></a>
<span class="sourceLineNo">546</span>     *<a name="line.546"></a>
<span class="sourceLineNo">547</span>     *     // ... complex sequence of calls<a name="line.547"></a>
<span class="sourceLineNo">548</span>     *<a name="line.548"></a>
<span class="sourceLineNo">549</span>     *     ThreadContext.trim(depth);<a name="line.549"></a>
<span class="sourceLineNo">550</span>     * }<a name="line.550"></a>
<span class="sourceLineNo">551</span>     * &lt;/pre&gt;<a name="line.551"></a>
<span class="sourceLineNo">552</span>     *<a name="line.552"></a>
<span class="sourceLineNo">553</span>     * &lt;p&gt;<a name="line.553"></a>
<span class="sourceLineNo">554</span>     * ensures that between the entry and exit of {@code foo} the depth of the diagnostic stack is conserved.<a name="line.554"></a>
<span class="sourceLineNo">555</span>     * &lt;/p&gt;<a name="line.555"></a>
<span class="sourceLineNo">556</span>     *<a name="line.556"></a>
<span class="sourceLineNo">557</span>     * @see #getDepth<a name="line.557"></a>
<span class="sourceLineNo">558</span>     * @param depth The number of elements to keep.<a name="line.558"></a>
<span class="sourceLineNo">559</span>     */<a name="line.559"></a>
<span class="sourceLineNo">560</span>    public static void trim(final int depth) {<a name="line.560"></a>
<span class="sourceLineNo">561</span>        contextStack.trim(depth);<a name="line.561"></a>
<span class="sourceLineNo">562</span>    }<a name="line.562"></a>
<span class="sourceLineNo">563</span><a name="line.563"></a>
<span class="sourceLineNo">564</span>    /**<a name="line.564"></a>
<span class="sourceLineNo">565</span>     * The ThreadContext Stack interface.<a name="line.565"></a>
<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
<span class="sourceLineNo">567</span>    public interface ContextStack extends Serializable, Collection&lt;String&gt; {<a name="line.567"></a>
<span class="sourceLineNo">568</span><a name="line.568"></a>
<span class="sourceLineNo">569</span>        /**<a name="line.569"></a>
<span class="sourceLineNo">570</span>         * Returns the element at the top of the stack.<a name="line.570"></a>
<span class="sourceLineNo">571</span>         *<a name="line.571"></a>
<span class="sourceLineNo">572</span>         * @return The element at the top of the stack.<a name="line.572"></a>
<span class="sourceLineNo">573</span>         * @throws java.util.NoSuchElementException if the stack is empty.<a name="line.573"></a>
<span class="sourceLineNo">574</span>         */<a name="line.574"></a>
<span class="sourceLineNo">575</span>        String pop();<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>         * Returns the element at the top of the stack without removing it or null if the stack is empty.<a name="line.578"></a>
<span class="sourceLineNo">579</span>         *<a name="line.579"></a>
<span class="sourceLineNo">580</span>         * @return the element at the top of the stack or null if the stack is empty.<a name="line.580"></a>
<span class="sourceLineNo">581</span>         */<a name="line.581"></a>
<span class="sourceLineNo">582</span>        String peek();<a name="line.582"></a>
<span class="sourceLineNo">583</span><a name="line.583"></a>
<span class="sourceLineNo">584</span>        /**<a name="line.584"></a>
<span class="sourceLineNo">585</span>         * Pushes an element onto the stack.<a name="line.585"></a>
<span class="sourceLineNo">586</span>         *<a name="line.586"></a>
<span class="sourceLineNo">587</span>         * @param message The element to add.<a name="line.587"></a>
<span class="sourceLineNo">588</span>         */<a name="line.588"></a>
<span class="sourceLineNo">589</span>        void push(String message);<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>
<span class="sourceLineNo">592</span>         * Returns the number of elements in the stack.<a name="line.592"></a>
<span class="sourceLineNo">593</span>         *<a name="line.593"></a>
<span class="sourceLineNo">594</span>         * @return the number of elements in the stack.<a name="line.594"></a>
<span class="sourceLineNo">595</span>         */<a name="line.595"></a>
<span class="sourceLineNo">596</span>        int getDepth();<a name="line.596"></a>
<span class="sourceLineNo">597</span><a name="line.597"></a>
<span class="sourceLineNo">598</span>        /**<a name="line.598"></a>
<span class="sourceLineNo">599</span>         * Returns all the elements in the stack in a List.<a name="line.599"></a>
<span class="sourceLineNo">600</span>         *<a name="line.600"></a>
<span class="sourceLineNo">601</span>         * @return all the elements in the stack in a List.<a name="line.601"></a>
<span class="sourceLineNo">602</span>         */<a name="line.602"></a>
<span class="sourceLineNo">603</span>        List&lt;String&gt; asList();<a name="line.603"></a>
<span class="sourceLineNo">604</span><a name="line.604"></a>
<span class="sourceLineNo">605</span>        /**<a name="line.605"></a>
<span class="sourceLineNo">606</span>         * Trims elements from the end of the stack.<a name="line.606"></a>
<span class="sourceLineNo">607</span>         *<a name="line.607"></a>
<span class="sourceLineNo">608</span>         * @param depth The maximum number of items in the stack to keep.<a name="line.608"></a>
<span class="sourceLineNo">609</span>         */<a name="line.609"></a>
<span class="sourceLineNo">610</span>        void trim(int depth);<a name="line.610"></a>
<span class="sourceLineNo">611</span><a name="line.611"></a>
<span class="sourceLineNo">612</span>        /**<a name="line.612"></a>
<span class="sourceLineNo">613</span>         * Returns a copy of the ContextStack.<a name="line.613"></a>
<span class="sourceLineNo">614</span>         *<a name="line.614"></a>
<span class="sourceLineNo">615</span>         * @return a copy of the ContextStack.<a name="line.615"></a>
<span class="sourceLineNo">616</span>         */<a name="line.616"></a>
<span class="sourceLineNo">617</span>        ContextStack copy();<a name="line.617"></a>
<span class="sourceLineNo">618</span><a name="line.618"></a>
<span class="sourceLineNo">619</span>        /**<a name="line.619"></a>
<span class="sourceLineNo">620</span>         * Returns a ContextStack with the same contents as this ContextStack or {@code null}. Attempts to modify the<a name="line.620"></a>
<span class="sourceLineNo">621</span>         * returned stack may or may not throw an exception, but will not affect the contents of this ContextStack.<a name="line.621"></a>
<span class="sourceLineNo">622</span>         *<a name="line.622"></a>
<span class="sourceLineNo">623</span>         * @return a ContextStack with the same contents as this ContextStack or {@code null}.<a name="line.623"></a>
<span class="sourceLineNo">624</span>         */<a name="line.624"></a>
<span class="sourceLineNo">625</span>        ContextStack getImmutableStackOrNull();<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>
