<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache license, Version 2.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
<span class="sourceLineNo">010</span> *<a name="line.10"></a>
<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
<span class="sourceLineNo">014</span> * See the license for the specific language governing permissions and<a name="line.14"></a>
<span class="sourceLineNo">015</span> * limitations under the license.<a name="line.15"></a>
<span class="sourceLineNo">016</span> */<a name="line.16"></a>
<span class="sourceLineNo">017</span>package org.apache.logging.log4j.core.async;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import java.util.List;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.logging.log4j.Level;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.logging.log4j.Marker;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.logging.log4j.ThreadContext;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.logging.log4j.ThreadContext.ContextStack;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.logging.log4j.core.ContextDataInjector;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.logging.log4j.core.Logger;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.logging.log4j.core.LoggerContext;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.logging.log4j.core.config.Configuration;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.logging.log4j.core.config.LoggerConfig;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.logging.log4j.core.config.Property;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.logging.log4j.core.config.ReliabilityStrategy;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.logging.log4j.core.impl.ContextDataFactory;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.logging.log4j.core.impl.ContextDataInjectorFactory;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.logging.log4j.core.util.Clock;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.logging.log4j.core.util.ClockFactory;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.logging.log4j.core.util.NanoClock;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.logging.log4j.message.Message;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.logging.log4j.message.MessageFactory;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.logging.log4j.message.ReusableMessage;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.logging.log4j.spi.AbstractLogger;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.logging.log4j.status.StatusLogger;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.logging.log4j.util.StackLocatorUtil;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.logging.log4j.util.StringMap;<a name="line.43"></a>
<span class="sourceLineNo">044</span><a name="line.44"></a>
<span class="sourceLineNo">045</span>import com.lmax.disruptor.EventTranslatorVararg;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import com.lmax.disruptor.dsl.Disruptor;<a name="line.46"></a>
<span class="sourceLineNo">047</span><a name="line.47"></a>
<span class="sourceLineNo">048</span>/**<a name="line.48"></a>
<span class="sourceLineNo">049</span> * AsyncLogger is a logger designed for high throughput and low latency logging. It does not perform any I/O in the<a name="line.49"></a>
<span class="sourceLineNo">050</span> * calling (application) thread, but instead hands off the work to another thread as soon as possible. The actual<a name="line.50"></a>
<span class="sourceLineNo">051</span> * logging is performed in the background thread. It uses the LMAX Disruptor library for inter-thread communication. (&lt;a<a name="line.51"></a>
<span class="sourceLineNo">052</span> * href="http://lmax-exchange.github.com/disruptor/" &gt;http://lmax-exchange.github.com/disruptor/&lt;/a&gt;)<a name="line.52"></a>
<span class="sourceLineNo">053</span> * &lt;p&gt;<a name="line.53"></a>
<span class="sourceLineNo">054</span> * To use AsyncLogger, specify the System property<a name="line.54"></a>
<span class="sourceLineNo">055</span> * {@code -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector} before you obtain a<a name="line.55"></a>
<span class="sourceLineNo">056</span> * Logger, and all Loggers returned by LogManager.getLogger will be AsyncLoggers.<a name="line.56"></a>
<span class="sourceLineNo">057</span> * &lt;p&gt;<a name="line.57"></a>
<span class="sourceLineNo">058</span> * Note that for performance reasons, this logger does not include source location by default. You need to specify<a name="line.58"></a>
<span class="sourceLineNo">059</span> * {@code includeLocation="true"} in the configuration or any %class, %location or %line conversion patterns in your<a name="line.59"></a>
<span class="sourceLineNo">060</span> * log4j.xml configuration will produce either a "?" character or no output at all.<a name="line.60"></a>
<span class="sourceLineNo">061</span> * &lt;p&gt;<a name="line.61"></a>
<span class="sourceLineNo">062</span> * For best performance, use AsyncLogger with the RandomAccessFileAppender or RollingRandomAccessFileAppender, with<a name="line.62"></a>
<span class="sourceLineNo">063</span> * immediateFlush=false. These appenders have built-in support for the batching mechanism used by the Disruptor library,<a name="line.63"></a>
<span class="sourceLineNo">064</span> * and they will flush to disk at the end of each batch. This means that even with immediateFlush=false, there will<a name="line.64"></a>
<span class="sourceLineNo">065</span> * never be any items left in the buffer; all log events will all be written to disk in a very efficient manner.<a name="line.65"></a>
<span class="sourceLineNo">066</span> */<a name="line.66"></a>
<span class="sourceLineNo">067</span>public class AsyncLogger extends Logger implements EventTranslatorVararg&lt;RingBufferLogEvent&gt; {<a name="line.67"></a>
<span class="sourceLineNo">068</span>    // Implementation note: many methods in this class are tuned for performance. MODIFY WITH CARE!<a name="line.68"></a>
<span class="sourceLineNo">069</span>    // Specifically, try to keep the hot methods to 35 bytecodes or less:<a name="line.69"></a>
<span class="sourceLineNo">070</span>    // this is within the MaxInlineSize threshold and makes these methods candidates for<a name="line.70"></a>
<span class="sourceLineNo">071</span>    // immediate inlining instead of waiting until they are designated "hot enough".<a name="line.71"></a>
<span class="sourceLineNo">072</span><a name="line.72"></a>
<span class="sourceLineNo">073</span>    private static final StatusLogger LOGGER = StatusLogger.getLogger();<a name="line.73"></a>
<span class="sourceLineNo">074</span>    private static final Clock CLOCK = ClockFactory.getClock(); // not reconfigurable<a name="line.74"></a>
<span class="sourceLineNo">075</span>    private static final ContextDataInjector CONTEXT_DATA_INJECTOR = ContextDataInjectorFactory.createInjector();<a name="line.75"></a>
<span class="sourceLineNo">076</span><a name="line.76"></a>
<span class="sourceLineNo">077</span>    private static final ThreadNameCachingStrategy THREAD_NAME_CACHING_STRATEGY = ThreadNameCachingStrategy.create();<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>    private final ThreadLocal&lt;RingBufferLogEventTranslator&gt; threadLocalTranslator = new ThreadLocal&lt;&gt;();<a name="line.79"></a>
<span class="sourceLineNo">080</span>    private final AsyncLoggerDisruptor loggerDisruptor;<a name="line.80"></a>
<span class="sourceLineNo">081</span><a name="line.81"></a>
<span class="sourceLineNo">082</span>    private volatile boolean includeLocation; // reconfigurable<a name="line.82"></a>
<span class="sourceLineNo">083</span>    private volatile NanoClock nanoClock; // reconfigurable<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>    /**<a name="line.85"></a>
<span class="sourceLineNo">086</span>     * Constructs an {@code AsyncLogger} with the specified context, name and message factory.<a name="line.86"></a>
<span class="sourceLineNo">087</span>     *<a name="line.87"></a>
<span class="sourceLineNo">088</span>     * @param context context of this logger<a name="line.88"></a>
<span class="sourceLineNo">089</span>     * @param name name of this logger<a name="line.89"></a>
<span class="sourceLineNo">090</span>     * @param messageFactory message factory of this logger<a name="line.90"></a>
<span class="sourceLineNo">091</span>     * @param loggerDisruptor helper class that logging can be delegated to. This object owns the Disruptor.<a name="line.91"></a>
<span class="sourceLineNo">092</span>     */<a name="line.92"></a>
<span class="sourceLineNo">093</span>    public AsyncLogger(final LoggerContext context, final String name, final MessageFactory messageFactory,<a name="line.93"></a>
<span class="sourceLineNo">094</span>            final AsyncLoggerDisruptor loggerDisruptor) {<a name="line.94"></a>
<span class="sourceLineNo">095</span>        super(context, name, messageFactory);<a name="line.95"></a>
<span class="sourceLineNo">096</span>        this.loggerDisruptor = loggerDisruptor;<a name="line.96"></a>
<span class="sourceLineNo">097</span>        includeLocation = privateConfig.loggerConfig.isIncludeLocation();<a name="line.97"></a>
<span class="sourceLineNo">098</span>        nanoClock = context.getConfiguration().getNanoClock();<a name="line.98"></a>
<span class="sourceLineNo">099</span>    }<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>     * (non-Javadoc)<a name="line.102"></a>
<span class="sourceLineNo">103</span>     *<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * @see org.apache.logging.log4j.core.Logger#updateConfiguration(org.apache.logging.log4j.core.config.Configuration)<a name="line.104"></a>
<span class="sourceLineNo">105</span>     */<a name="line.105"></a>
<span class="sourceLineNo">106</span>    @Override<a name="line.106"></a>
<span class="sourceLineNo">107</span>    protected void updateConfiguration(final Configuration newConfig) {<a name="line.107"></a>
<span class="sourceLineNo">108</span>        nanoClock = newConfig.getNanoClock();<a name="line.108"></a>
<span class="sourceLineNo">109</span>        includeLocation = newConfig.getLoggerConfig(name).isIncludeLocation();<a name="line.109"></a>
<span class="sourceLineNo">110</span>        super.updateConfiguration(newConfig);<a name="line.110"></a>
<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>    // package protected for unit tests<a name="line.113"></a>
<span class="sourceLineNo">114</span>    NanoClock getNanoClock() {<a name="line.114"></a>
<span class="sourceLineNo">115</span>        return nanoClock;<a name="line.115"></a>
<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
<span class="sourceLineNo">117</span><a name="line.117"></a>
<span class="sourceLineNo">118</span>    private RingBufferLogEventTranslator getCachedTranslator() {<a name="line.118"></a>
<span class="sourceLineNo">119</span>        RingBufferLogEventTranslator result = threadLocalTranslator.get();<a name="line.119"></a>
<span class="sourceLineNo">120</span>        if (result == null) {<a name="line.120"></a>
<span class="sourceLineNo">121</span>            result = new RingBufferLogEventTranslator();<a name="line.121"></a>
<span class="sourceLineNo">122</span>            threadLocalTranslator.set(result);<a name="line.122"></a>
<span class="sourceLineNo">123</span>        }<a name="line.123"></a>
<span class="sourceLineNo">124</span>        return result;<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 void logMessage(final String fqcn, final Level level, final Marker marker, final Message message,<a name="line.128"></a>
<span class="sourceLineNo">129</span>            final Throwable thrown) {<a name="line.129"></a>
<span class="sourceLineNo">130</span>        getTranslatorType().log(fqcn, level, marker, message, thrown);<a name="line.130"></a>
<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span>    @Override<a name="line.133"></a>
<span class="sourceLineNo">134</span>    public void log(final Level level, final Marker marker, final String fqcn, final StackTraceElement location,<a name="line.134"></a>
<span class="sourceLineNo">135</span>        final Message message, final Throwable throwable) {<a name="line.135"></a>
<span class="sourceLineNo">136</span>        getTranslatorType().log(fqcn, location, level, marker, message, throwable);<a name="line.136"></a>
<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
<span class="sourceLineNo">138</span><a name="line.138"></a>
<span class="sourceLineNo">139</span><a name="line.139"></a>
<span class="sourceLineNo">140</span>    abstract class TranslatorType {<a name="line.140"></a>
<span class="sourceLineNo">141</span>        abstract void log(final String fqcn, final StackTraceElement location, final Level level, final Marker marker,<a name="line.141"></a>
<span class="sourceLineNo">142</span>            final Message message, final Throwable thrown);<a name="line.142"></a>
<span class="sourceLineNo">143</span><a name="line.143"></a>
<span class="sourceLineNo">144</span>        abstract void log(final String fqcn, final Level level, final Marker marker,<a name="line.144"></a>
<span class="sourceLineNo">145</span>                          final Message message, final Throwable thrown);<a name="line.145"></a>
<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
<span class="sourceLineNo">147</span><a name="line.147"></a>
<span class="sourceLineNo">148</span>    private final TranslatorType threadLocalTranslatorType = new TranslatorType() {<a name="line.148"></a>
<span class="sourceLineNo">149</span>        @Override<a name="line.149"></a>
<span class="sourceLineNo">150</span>        void log(String fqcn, StackTraceElement location, Level level, Marker marker, Message message,<a name="line.150"></a>
<span class="sourceLineNo">151</span>            Throwable thrown) {<a name="line.151"></a>
<span class="sourceLineNo">152</span>            logWithThreadLocalTranslator(fqcn, location, level, marker, message, thrown);<a name="line.152"></a>
<span class="sourceLineNo">153</span>        }<a name="line.153"></a>
<span class="sourceLineNo">154</span><a name="line.154"></a>
<span class="sourceLineNo">155</span>        @Override<a name="line.155"></a>
<span class="sourceLineNo">156</span>        void log(String fqcn, Level level, Marker marker, Message message, Throwable thrown) {<a name="line.156"></a>
<span class="sourceLineNo">157</span>            logWithThreadLocalTranslator(fqcn, level, marker, message, thrown);<a name="line.157"></a>
<span class="sourceLineNo">158</span>        }<a name="line.158"></a>
<span class="sourceLineNo">159</span>    };<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>    private final TranslatorType varargTranslatorType = new TranslatorType() {<a name="line.161"></a>
<span class="sourceLineNo">162</span>        @Override<a name="line.162"></a>
<span class="sourceLineNo">163</span>        void log(String fqcn, StackTraceElement location, Level level, Marker marker, Message message,<a name="line.163"></a>
<span class="sourceLineNo">164</span>            Throwable thrown) {<a name="line.164"></a>
<span class="sourceLineNo">165</span>            logWithVarargTranslator(fqcn, location, level, marker, message, thrown);<a name="line.165"></a>
<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
<span class="sourceLineNo">167</span><a name="line.167"></a>
<span class="sourceLineNo">168</span>        @Override<a name="line.168"></a>
<span class="sourceLineNo">169</span>        void log(String fqcn, Level level, Marker marker, Message message, Throwable thrown) {<a name="line.169"></a>
<span class="sourceLineNo">170</span>            // LOG4J2-1172: avoid storing non-JDK classes in ThreadLocals to avoid memory leaks in web apps<a name="line.170"></a>
<span class="sourceLineNo">171</span>            logWithVarargTranslator(fqcn, level, marker, message, thrown);<a name="line.171"></a>
<span class="sourceLineNo">172</span>        }<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>    private TranslatorType getTranslatorType() {<a name="line.175"></a>
<span class="sourceLineNo">176</span>        return loggerDisruptor.isUseThreadLocals() ? threadLocalTranslatorType : varargTranslatorType;<a name="line.176"></a>
<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
<span class="sourceLineNo">178</span><a name="line.178"></a>
<span class="sourceLineNo">179</span>    private boolean isReused(final Message message) {<a name="line.179"></a>
<span class="sourceLineNo">180</span>        return message instanceof ReusableMessage;<a name="line.180"></a>
<span class="sourceLineNo">181</span>    }<a name="line.181"></a>
<span class="sourceLineNo">182</span><a name="line.182"></a>
<span class="sourceLineNo">183</span>    /**<a name="line.183"></a>
<span class="sourceLineNo">184</span>     * Enqueues the specified log event data for logging in a background thread.<a name="line.184"></a>
<span class="sourceLineNo">185</span>     * &lt;p&gt;<a name="line.185"></a>
<span class="sourceLineNo">186</span>     * This re-uses a {@code RingBufferLogEventTranslator} instance cached in a {@code ThreadLocal} to avoid creating<a name="line.186"></a>
<span class="sourceLineNo">187</span>     * unnecessary objects with each event.<a name="line.187"></a>
<span class="sourceLineNo">188</span>     *<a name="line.188"></a>
<span class="sourceLineNo">189</span>     * @param fqcn fully qualified name of the caller<a name="line.189"></a>
<span class="sourceLineNo">190</span>     * @param level level at which the caller wants to log the message<a name="line.190"></a>
<span class="sourceLineNo">191</span>     * @param marker message marker<a name="line.191"></a>
<span class="sourceLineNo">192</span>     * @param message the log message<a name="line.192"></a>
<span class="sourceLineNo">193</span>     * @param thrown a {@code Throwable} or {@code null}<a name="line.193"></a>
<span class="sourceLineNo">194</span>     */<a name="line.194"></a>
<span class="sourceLineNo">195</span>    private void logWithThreadLocalTranslator(final String fqcn, final Level level, final Marker marker,<a name="line.195"></a>
<span class="sourceLineNo">196</span>            final Message message, final Throwable thrown) {<a name="line.196"></a>
<span class="sourceLineNo">197</span>        // Implementation note: this method is tuned for performance. MODIFY WITH CARE!<a name="line.197"></a>
<span class="sourceLineNo">198</span><a name="line.198"></a>
<span class="sourceLineNo">199</span>        final RingBufferLogEventTranslator translator = getCachedTranslator();<a name="line.199"></a>
<span class="sourceLineNo">200</span>        initTranslator(translator, fqcn, level, marker, message, thrown);<a name="line.200"></a>
<span class="sourceLineNo">201</span>        initTranslatorThreadValues(translator);<a name="line.201"></a>
<span class="sourceLineNo">202</span>        publish(translator);<a name="line.202"></a>
<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
<span class="sourceLineNo">204</span><a name="line.204"></a>
<span class="sourceLineNo">205</span>    /**<a name="line.205"></a>
<span class="sourceLineNo">206</span>     * Enqueues the specified log event data for logging in a background thread.<a name="line.206"></a>
<span class="sourceLineNo">207</span>     * &lt;p&gt;<a name="line.207"></a>
<span class="sourceLineNo">208</span>     * This re-uses a {@code RingBufferLogEventTranslator} instance cached in a {@code ThreadLocal} to avoid creating<a name="line.208"></a>
<span class="sourceLineNo">209</span>     * unnecessary objects with each event.<a name="line.209"></a>
<span class="sourceLineNo">210</span>     *<a name="line.210"></a>
<span class="sourceLineNo">211</span>     * @param fqcn fully qualified name of the caller<a name="line.211"></a>
<span class="sourceLineNo">212</span>     * @param location the Location of the caller.<a name="line.212"></a>
<span class="sourceLineNo">213</span>     * @param level level at which the caller wants to log the message<a name="line.213"></a>
<span class="sourceLineNo">214</span>     * @param marker message marker<a name="line.214"></a>
<span class="sourceLineNo">215</span>     * @param message the log message<a name="line.215"></a>
<span class="sourceLineNo">216</span>     * @param thrown a {@code Throwable} or {@code null}<a name="line.216"></a>
<span class="sourceLineNo">217</span>     */<a name="line.217"></a>
<span class="sourceLineNo">218</span>    private void logWithThreadLocalTranslator(final String fqcn, final StackTraceElement location, final Level level,<a name="line.218"></a>
<span class="sourceLineNo">219</span>        final Marker marker, final Message message, final Throwable thrown) {<a name="line.219"></a>
<span class="sourceLineNo">220</span>        // Implementation note: this method is tuned for performance. MODIFY WITH CARE!<a name="line.220"></a>
<span class="sourceLineNo">221</span><a name="line.221"></a>
<span class="sourceLineNo">222</span>        final RingBufferLogEventTranslator translator = getCachedTranslator();<a name="line.222"></a>
<span class="sourceLineNo">223</span>        initTranslator(translator, fqcn, location, level, marker, message, thrown);<a name="line.223"></a>
<span class="sourceLineNo">224</span>        initTranslatorThreadValues(translator);<a name="line.224"></a>
<span class="sourceLineNo">225</span>        publish(translator);<a name="line.225"></a>
<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
<span class="sourceLineNo">227</span><a name="line.227"></a>
<span class="sourceLineNo">228</span>    private void publish(final RingBufferLogEventTranslator translator) {<a name="line.228"></a>
<span class="sourceLineNo">229</span>        if (!loggerDisruptor.tryPublish(translator)) {<a name="line.229"></a>
<span class="sourceLineNo">230</span>            handleRingBufferFull(translator);<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><a name="line.233"></a>
<span class="sourceLineNo">234</span>    private void handleRingBufferFull(final RingBufferLogEventTranslator translator) {<a name="line.234"></a>
<span class="sourceLineNo">235</span>        if (AbstractLogger.getRecursionDepth() &gt; 1) { // LOG4J2-1518, LOG4J2-2031<a name="line.235"></a>
<span class="sourceLineNo">236</span>            // If queue is full AND we are in a recursive call, call appender directly to prevent deadlock<a name="line.236"></a>
<span class="sourceLineNo">237</span>            AsyncQueueFullMessageUtil.logWarningToStatusLogger();<a name="line.237"></a>
<span class="sourceLineNo">238</span>            logMessageInCurrentThread(translator.fqcn, translator.level, translator.marker, translator.message,<a name="line.238"></a>
<span class="sourceLineNo">239</span>                    translator.thrown);<a name="line.239"></a>
<span class="sourceLineNo">240</span>            translator.clear();<a name="line.240"></a>
<span class="sourceLineNo">241</span>            return;<a name="line.241"></a>
<span class="sourceLineNo">242</span>        }<a name="line.242"></a>
<span class="sourceLineNo">243</span>        final EventRoute eventRoute = loggerDisruptor.getEventRoute(translator.level);<a name="line.243"></a>
<span class="sourceLineNo">244</span>        switch (eventRoute) {<a name="line.244"></a>
<span class="sourceLineNo">245</span>            case ENQUEUE:<a name="line.245"></a>
<span class="sourceLineNo">246</span>                loggerDisruptor.enqueueLogMessageWhenQueueFull(translator);<a name="line.246"></a>
<span class="sourceLineNo">247</span>                break;<a name="line.247"></a>
<span class="sourceLineNo">248</span>            case SYNCHRONOUS:<a name="line.248"></a>
<span class="sourceLineNo">249</span>                logMessageInCurrentThread(translator.fqcn, translator.level, translator.marker, translator.message,<a name="line.249"></a>
<span class="sourceLineNo">250</span>                        translator.thrown);<a name="line.250"></a>
<span class="sourceLineNo">251</span>                translator.clear();<a name="line.251"></a>
<span class="sourceLineNo">252</span>                break;<a name="line.252"></a>
<span class="sourceLineNo">253</span>            case DISCARD:<a name="line.253"></a>
<span class="sourceLineNo">254</span>                translator.clear();<a name="line.254"></a>
<span class="sourceLineNo">255</span>                break;<a name="line.255"></a>
<span class="sourceLineNo">256</span>            default:<a name="line.256"></a>
<span class="sourceLineNo">257</span>                throw new IllegalStateException("Unknown EventRoute " + eventRoute);<a name="line.257"></a>
<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
<span class="sourceLineNo">260</span><a name="line.260"></a>
<span class="sourceLineNo">261</span>    private void initTranslator(final RingBufferLogEventTranslator translator, final String fqcn,<a name="line.261"></a>
<span class="sourceLineNo">262</span>        final StackTraceElement location, final Level level, final Marker marker,<a name="line.262"></a>
<span class="sourceLineNo">263</span>        final Message message, final Throwable thrown) {<a name="line.263"></a>
<span class="sourceLineNo">264</span><a name="line.264"></a>
<span class="sourceLineNo">265</span>        translator.setBasicValues(this, name, marker, fqcn, level, message, //<a name="line.265"></a>
<span class="sourceLineNo">266</span>            // don't construct ThrowableProxy until required<a name="line.266"></a>
<span class="sourceLineNo">267</span>            thrown,<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
<span class="sourceLineNo">269</span>            // needs shallow copy to be fast (LOG4J2-154)<a name="line.269"></a>
<span class="sourceLineNo">270</span>            ThreadContext.getImmutableStack(), //<a name="line.270"></a>
<span class="sourceLineNo">271</span><a name="line.271"></a>
<span class="sourceLineNo">272</span>            location,<a name="line.272"></a>
<span class="sourceLineNo">273</span>            CLOCK, //<a name="line.273"></a>
<span class="sourceLineNo">274</span>            nanoClock //<a name="line.274"></a>
<span class="sourceLineNo">275</span>        );<a name="line.275"></a>
<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
<span class="sourceLineNo">277</span><a name="line.277"></a>
<span class="sourceLineNo">278</span>    private void initTranslator(final RingBufferLogEventTranslator translator, final String fqcn,<a name="line.278"></a>
<span class="sourceLineNo">279</span>            final Level level, final Marker marker, final Message message, final Throwable thrown) {<a name="line.279"></a>
<span class="sourceLineNo">280</span><a name="line.280"></a>
<span class="sourceLineNo">281</span>        translator.setBasicValues(this, name, marker, fqcn, level, message, //<a name="line.281"></a>
<span class="sourceLineNo">282</span>                // don't construct ThrowableProxy until required<a name="line.282"></a>
<span class="sourceLineNo">283</span>                thrown,<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>                // needs shallow copy to be fast (LOG4J2-154)<a name="line.285"></a>
<span class="sourceLineNo">286</span>                ThreadContext.getImmutableStack(), //<a name="line.286"></a>
<span class="sourceLineNo">287</span><a name="line.287"></a>
<span class="sourceLineNo">288</span>                // location (expensive to calculate)<a name="line.288"></a>
<span class="sourceLineNo">289</span>                calcLocationIfRequested(fqcn), //<a name="line.289"></a>
<span class="sourceLineNo">290</span>                CLOCK, //<a name="line.290"></a>
<span class="sourceLineNo">291</span>                nanoClock //<a name="line.291"></a>
<span class="sourceLineNo">292</span>        );<a name="line.292"></a>
<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
<span class="sourceLineNo">294</span><a name="line.294"></a>
<span class="sourceLineNo">295</span>    private void initTranslatorThreadValues(final RingBufferLogEventTranslator translator) {<a name="line.295"></a>
<span class="sourceLineNo">296</span>        // constant check should be optimized out when using default (CACHED)<a name="line.296"></a>
<span class="sourceLineNo">297</span>        if (THREAD_NAME_CACHING_STRATEGY == ThreadNameCachingStrategy.UNCACHED) {<a name="line.297"></a>
<span class="sourceLineNo">298</span>            translator.updateThreadValues();<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><a name="line.301"></a>
<span class="sourceLineNo">302</span>    /**<a name="line.302"></a>
<span class="sourceLineNo">303</span>     * Returns the caller location if requested, {@code null} otherwise.<a name="line.303"></a>
<span class="sourceLineNo">304</span>     *<a name="line.304"></a>
<span class="sourceLineNo">305</span>     * @param fqcn fully qualified caller name.<a name="line.305"></a>
<span class="sourceLineNo">306</span>     * @return the caller location if requested, {@code null} otherwise.<a name="line.306"></a>
<span class="sourceLineNo">307</span>     */<a name="line.307"></a>
<span class="sourceLineNo">308</span>    private StackTraceElement calcLocationIfRequested(final String fqcn) {<a name="line.308"></a>
<span class="sourceLineNo">309</span>        // location: very expensive operation. LOG4J2-153:<a name="line.309"></a>
<span class="sourceLineNo">310</span>        // Only include if "includeLocation=true" is specified,<a name="line.310"></a>
<span class="sourceLineNo">311</span>        // exclude if not specified or if "false" was specified.<a name="line.311"></a>
<span class="sourceLineNo">312</span>        return includeLocation ? StackLocatorUtil.calcLocation(fqcn) : null;<a name="line.312"></a>
<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
<span class="sourceLineNo">314</span><a name="line.314"></a>
<span class="sourceLineNo">315</span>    /**<a name="line.315"></a>
<span class="sourceLineNo">316</span>     * Enqueues the specified log event data for logging in a background thread.<a name="line.316"></a>
<span class="sourceLineNo">317</span>     * &lt;p&gt;<a name="line.317"></a>
<span class="sourceLineNo">318</span>     * This creates a new varargs Object array for each invocation, but does not store any non-JDK classes in a<a name="line.318"></a>
<span class="sourceLineNo">319</span>     * {@code ThreadLocal} to avoid memory leaks in web applications (see LOG4J2-1172).<a name="line.319"></a>
<span class="sourceLineNo">320</span>     *<a name="line.320"></a>
<span class="sourceLineNo">321</span>     * @param fqcn fully qualified name of the caller<a name="line.321"></a>
<span class="sourceLineNo">322</span>     * @param level level at which the caller wants to log the message<a name="line.322"></a>
<span class="sourceLineNo">323</span>     * @param marker message marker<a name="line.323"></a>
<span class="sourceLineNo">324</span>     * @param message the log message<a name="line.324"></a>
<span class="sourceLineNo">325</span>     * @param thrown a {@code Throwable} or {@code null}<a name="line.325"></a>
<span class="sourceLineNo">326</span>     */<a name="line.326"></a>
<span class="sourceLineNo">327</span>    private void logWithVarargTranslator(final String fqcn, final Level level, final Marker marker,<a name="line.327"></a>
<span class="sourceLineNo">328</span>            final Message message, final Throwable thrown) {<a name="line.328"></a>
<span class="sourceLineNo">329</span>        // Implementation note: candidate for optimization: exceeds 35 bytecodes.<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
<span class="sourceLineNo">331</span>        final Disruptor&lt;RingBufferLogEvent&gt; disruptor = loggerDisruptor.getDisruptor();<a name="line.331"></a>
<span class="sourceLineNo">332</span>        if (disruptor == null) {<a name="line.332"></a>
<span class="sourceLineNo">333</span>            LOGGER.error("Ignoring log event after Log4j has been shut down.");<a name="line.333"></a>
<span class="sourceLineNo">334</span>            return;<a name="line.334"></a>
<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
<span class="sourceLineNo">336</span>        // if the Message instance is reused, there is no point in freezing its message here<a name="line.336"></a>
<span class="sourceLineNo">337</span>        if (!isReused(message)) {<a name="line.337"></a>
<span class="sourceLineNo">338</span>            InternalAsyncUtil.makeMessageImmutable(message);<a name="line.338"></a>
<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
<span class="sourceLineNo">340</span>        StackTraceElement location = null;<a name="line.340"></a>
<span class="sourceLineNo">341</span>        // calls the translateTo method on this AsyncLogger<a name="line.341"></a>
<span class="sourceLineNo">342</span>        if (!disruptor.getRingBuffer().tryPublishEvent(this,<a name="line.342"></a>
<span class="sourceLineNo">343</span>                this, // asyncLogger: 0<a name="line.343"></a>
<span class="sourceLineNo">344</span>                (location = calcLocationIfRequested(fqcn)), // location: 1<a name="line.344"></a>
<span class="sourceLineNo">345</span>                fqcn, // 2<a name="line.345"></a>
<span class="sourceLineNo">346</span>                level, // 3<a name="line.346"></a>
<span class="sourceLineNo">347</span>                marker, // 4<a name="line.347"></a>
<span class="sourceLineNo">348</span>                message, // 5<a name="line.348"></a>
<span class="sourceLineNo">349</span>                thrown)) { // 6<a name="line.349"></a>
<span class="sourceLineNo">350</span>            handleRingBufferFull(location, fqcn, level, marker, message, thrown);<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>    /**<a name="line.354"></a>
<span class="sourceLineNo">355</span>     * Enqueues the specified log event data for logging in a background thread.<a name="line.355"></a>
<span class="sourceLineNo">356</span>     * &lt;p&gt;<a name="line.356"></a>
<span class="sourceLineNo">357</span>     * This creates a new varargs Object array for each invocation, but does not store any non-JDK classes in a<a name="line.357"></a>
<span class="sourceLineNo">358</span>     * {@code ThreadLocal} to avoid memory leaks in web applications (see LOG4J2-1172).<a name="line.358"></a>
<span class="sourceLineNo">359</span>     *<a name="line.359"></a>
<span class="sourceLineNo">360</span>     * @param fqcn fully qualified name of the caller<a name="line.360"></a>
<span class="sourceLineNo">361</span>     * @param location location of the caller.<a name="line.361"></a>
<span class="sourceLineNo">362</span>     * @param level level at which the caller wants to log the message<a name="line.362"></a>
<span class="sourceLineNo">363</span>     * @param marker message marker<a name="line.363"></a>
<span class="sourceLineNo">364</span>     * @param message the log message<a name="line.364"></a>
<span class="sourceLineNo">365</span>     * @param thrown a {@code Throwable} or {@code null}<a name="line.365"></a>
<span class="sourceLineNo">366</span>     */<a name="line.366"></a>
<span class="sourceLineNo">367</span>    private void logWithVarargTranslator(final String fqcn, final StackTraceElement location, final Level level,<a name="line.367"></a>
<span class="sourceLineNo">368</span>        final Marker marker, final Message message, final Throwable thrown) {<a name="line.368"></a>
<span class="sourceLineNo">369</span>        // Implementation note: candidate for optimization: exceeds 35 bytecodes.<a name="line.369"></a>
<span class="sourceLineNo">370</span><a name="line.370"></a>
<span class="sourceLineNo">371</span>        final Disruptor&lt;RingBufferLogEvent&gt; disruptor = loggerDisruptor.getDisruptor();<a name="line.371"></a>
<span class="sourceLineNo">372</span>        if (disruptor == null) {<a name="line.372"></a>
<span class="sourceLineNo">373</span>            LOGGER.error("Ignoring log event after Log4j has been shut down.");<a name="line.373"></a>
<span class="sourceLineNo">374</span>            return;<a name="line.374"></a>
<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
<span class="sourceLineNo">376</span>        // if the Message instance is reused, there is no point in freezing its message here<a name="line.376"></a>
<span class="sourceLineNo">377</span>        if (!isReused(message)) {<a name="line.377"></a>
<span class="sourceLineNo">378</span>            InternalAsyncUtil.makeMessageImmutable(message);<a name="line.378"></a>
<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
<span class="sourceLineNo">380</span>        // calls the translateTo method on this AsyncLogger<a name="line.380"></a>
<span class="sourceLineNo">381</span>        if (!disruptor.getRingBuffer().tryPublishEvent(this,<a name="line.381"></a>
<span class="sourceLineNo">382</span>            this, // asyncLogger: 0<a name="line.382"></a>
<span class="sourceLineNo">383</span>            location, // location: 1<a name="line.383"></a>
<span class="sourceLineNo">384</span>            fqcn, // 2<a name="line.384"></a>
<span class="sourceLineNo">385</span>            level, // 3<a name="line.385"></a>
<span class="sourceLineNo">386</span>            marker, // 4<a name="line.386"></a>
<span class="sourceLineNo">387</span>            message, // 5<a name="line.387"></a>
<span class="sourceLineNo">388</span>            thrown)) { // 6<a name="line.388"></a>
<span class="sourceLineNo">389</span>            handleRingBufferFull(location, fqcn, level, marker, message, thrown);<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>    /*<a name="line.393"></a>
<span class="sourceLineNo">394</span>     * (non-Javadoc)<a name="line.394"></a>
<span class="sourceLineNo">395</span>     *<a name="line.395"></a>
<span class="sourceLineNo">396</span>     * @see com.lmax.disruptor.EventTranslatorVararg#translateTo(java.lang.Object, long, java.lang.Object[])<a name="line.396"></a>
<span class="sourceLineNo">397</span>     */<a name="line.397"></a>
<span class="sourceLineNo">398</span>    @Override<a name="line.398"></a>
<span class="sourceLineNo">399</span>    public void translateTo(final RingBufferLogEvent event, final long sequence, final Object... args) {<a name="line.399"></a>
<span class="sourceLineNo">400</span>        // Implementation note: candidate for optimization: exceeds 35 bytecodes.<a name="line.400"></a>
<span class="sourceLineNo">401</span>        final AsyncLogger asyncLogger = (AsyncLogger) args[0];<a name="line.401"></a>
<span class="sourceLineNo">402</span>        final StackTraceElement location = (StackTraceElement) args[1];<a name="line.402"></a>
<span class="sourceLineNo">403</span>        final String fqcn = (String) args[2];<a name="line.403"></a>
<span class="sourceLineNo">404</span>        final Level level = (Level) args[3];<a name="line.404"></a>
<span class="sourceLineNo">405</span>        final Marker marker = (Marker) args[4];<a name="line.405"></a>
<span class="sourceLineNo">406</span>        final Message message = (Message) args[5];<a name="line.406"></a>
<span class="sourceLineNo">407</span>        final Throwable thrown = (Throwable) args[6];<a name="line.407"></a>
<span class="sourceLineNo">408</span><a name="line.408"></a>
<span class="sourceLineNo">409</span>        // needs shallow copy to be fast (LOG4J2-154)<a name="line.409"></a>
<span class="sourceLineNo">410</span>        final ContextStack contextStack = ThreadContext.getImmutableStack();<a name="line.410"></a>
<span class="sourceLineNo">411</span><a name="line.411"></a>
<span class="sourceLineNo">412</span>        final Thread currentThread = Thread.currentThread();<a name="line.412"></a>
<span class="sourceLineNo">413</span>        final String threadName = THREAD_NAME_CACHING_STRATEGY.getThreadName();<a name="line.413"></a>
<span class="sourceLineNo">414</span>        event.setValues(asyncLogger, asyncLogger.getName(), marker, fqcn, level, message, thrown,<a name="line.414"></a>
<span class="sourceLineNo">415</span>                // config properties are taken care of in the EventHandler thread<a name="line.415"></a>
<span class="sourceLineNo">416</span>                // in the AsyncLogger#actualAsyncLog method<a name="line.416"></a>
<span class="sourceLineNo">417</span>                CONTEXT_DATA_INJECTOR.injectContextData(null, (StringMap) event.getContextData()),<a name="line.417"></a>
<span class="sourceLineNo">418</span>                contextStack, currentThread.getId(), threadName, currentThread.getPriority(), location,<a name="line.418"></a>
<span class="sourceLineNo">419</span>                CLOCK, nanoClock);<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>    /**<a name="line.422"></a>
<span class="sourceLineNo">423</span>     * LOG4J2-471: prevent deadlock when RingBuffer is full and object being logged calls Logger.log() from its<a name="line.423"></a>
<span class="sourceLineNo">424</span>     * toString() method<a name="line.424"></a>
<span class="sourceLineNo">425</span>     *<a name="line.425"></a>
<span class="sourceLineNo">426</span>     * @param fqcn fully qualified caller name<a name="line.426"></a>
<span class="sourceLineNo">427</span>     * @param level log level<a name="line.427"></a>
<span class="sourceLineNo">428</span>     * @param marker optional marker<a name="line.428"></a>
<span class="sourceLineNo">429</span>     * @param message log message<a name="line.429"></a>
<span class="sourceLineNo">430</span>     * @param thrown optional exception<a name="line.430"></a>
<span class="sourceLineNo">431</span>     */<a name="line.431"></a>
<span class="sourceLineNo">432</span>    void logMessageInCurrentThread(final String fqcn, final Level level, final Marker marker,<a name="line.432"></a>
<span class="sourceLineNo">433</span>            final Message message, final Throwable thrown) {<a name="line.433"></a>
<span class="sourceLineNo">434</span>        // bypass RingBuffer and invoke Appender directly<a name="line.434"></a>
<span class="sourceLineNo">435</span>        final ReliabilityStrategy strategy = privateConfig.loggerConfig.getReliabilityStrategy();<a name="line.435"></a>
<span class="sourceLineNo">436</span>        strategy.log(this, getName(), fqcn, marker, level, message, thrown);<a name="line.436"></a>
<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
<span class="sourceLineNo">438</span><a name="line.438"></a>
<span class="sourceLineNo">439</span>    private void handleRingBufferFull(final StackTraceElement location,<a name="line.439"></a>
<span class="sourceLineNo">440</span>                                      final String fqcn,<a name="line.440"></a>
<span class="sourceLineNo">441</span>                                      final Level level,<a name="line.441"></a>
<span class="sourceLineNo">442</span>                                      final Marker marker,<a name="line.442"></a>
<span class="sourceLineNo">443</span>                                      final Message msg,<a name="line.443"></a>
<span class="sourceLineNo">444</span>                                      final Throwable thrown) {<a name="line.444"></a>
<span class="sourceLineNo">445</span>        if (AbstractLogger.getRecursionDepth() &gt; 1) { // LOG4J2-1518, LOG4J2-2031<a name="line.445"></a>
<span class="sourceLineNo">446</span>            // If queue is full AND we are in a recursive call, call appender directly to prevent deadlock<a name="line.446"></a>
<span class="sourceLineNo">447</span>            AsyncQueueFullMessageUtil.logWarningToStatusLogger();<a name="line.447"></a>
<span class="sourceLineNo">448</span>            logMessageInCurrentThread(fqcn, level, marker, msg, thrown);<a name="line.448"></a>
<span class="sourceLineNo">449</span>            return;<a name="line.449"></a>
<span class="sourceLineNo">450</span>        }<a name="line.450"></a>
<span class="sourceLineNo">451</span>        final EventRoute eventRoute = loggerDisruptor.getEventRoute(level);<a name="line.451"></a>
<span class="sourceLineNo">452</span>        switch (eventRoute) {<a name="line.452"></a>
<span class="sourceLineNo">453</span>            case ENQUEUE:<a name="line.453"></a>
<span class="sourceLineNo">454</span>                loggerDisruptor.enqueueLogMessageWhenQueueFull(this,<a name="line.454"></a>
<span class="sourceLineNo">455</span>                        this, // asyncLogger: 0<a name="line.455"></a>
<span class="sourceLineNo">456</span>                        location, // location: 1<a name="line.456"></a>
<span class="sourceLineNo">457</span>                        fqcn, // 2<a name="line.457"></a>
<span class="sourceLineNo">458</span>                        level, // 3<a name="line.458"></a>
<span class="sourceLineNo">459</span>                        marker, // 4<a name="line.459"></a>
<span class="sourceLineNo">460</span>                        msg, // 5<a name="line.460"></a>
<span class="sourceLineNo">461</span>                        thrown); // 6<a name="line.461"></a>
<span class="sourceLineNo">462</span>                break;<a name="line.462"></a>
<span class="sourceLineNo">463</span>            case SYNCHRONOUS:<a name="line.463"></a>
<span class="sourceLineNo">464</span>                logMessageInCurrentThread(fqcn, level, marker, msg, thrown);<a name="line.464"></a>
<span class="sourceLineNo">465</span>                break;<a name="line.465"></a>
<span class="sourceLineNo">466</span>            case DISCARD:<a name="line.466"></a>
<span class="sourceLineNo">467</span>                break;<a name="line.467"></a>
<span class="sourceLineNo">468</span>            default:<a name="line.468"></a>
<span class="sourceLineNo">469</span>                throw new IllegalStateException("Unknown EventRoute " + eventRoute);<a name="line.469"></a>
<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
<span class="sourceLineNo">472</span><a name="line.472"></a>
<span class="sourceLineNo">473</span>    /**<a name="line.473"></a>
<span class="sourceLineNo">474</span>     * This method is called by the EventHandler that processes the RingBufferLogEvent in a separate thread.<a name="line.474"></a>
<span class="sourceLineNo">475</span>     * Merges the contents of the configuration map into the contextData, after replacing any variables in the property<a name="line.475"></a>
<span class="sourceLineNo">476</span>     * values with the StrSubstitutor-supplied actual values.<a name="line.476"></a>
<span class="sourceLineNo">477</span>     *<a name="line.477"></a>
<span class="sourceLineNo">478</span>     * @param event the event to log<a name="line.478"></a>
<span class="sourceLineNo">479</span>     */<a name="line.479"></a>
<span class="sourceLineNo">480</span>    public void actualAsyncLog(final RingBufferLogEvent event) {<a name="line.480"></a>
<span class="sourceLineNo">481</span>        final LoggerConfig privateConfigLoggerConfig = privateConfig.loggerConfig;<a name="line.481"></a>
<span class="sourceLineNo">482</span>        final List&lt;Property&gt; properties = privateConfigLoggerConfig.getPropertyList();<a name="line.482"></a>
<span class="sourceLineNo">483</span><a name="line.483"></a>
<span class="sourceLineNo">484</span>        if (properties != null) {<a name="line.484"></a>
<span class="sourceLineNo">485</span>            onPropertiesPresent(event, properties);<a name="line.485"></a>
<span class="sourceLineNo">486</span>        }<a name="line.486"></a>
<span class="sourceLineNo">487</span><a name="line.487"></a>
<span class="sourceLineNo">488</span>        privateConfigLoggerConfig.getReliabilityStrategy().log(this, event);<a name="line.488"></a>
<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
<span class="sourceLineNo">490</span><a name="line.490"></a>
<span class="sourceLineNo">491</span>    @SuppressWarnings("ForLoopReplaceableByForEach") // Avoid iterator allocation<a name="line.491"></a>
<span class="sourceLineNo">492</span>    private void onPropertiesPresent(final RingBufferLogEvent event, final List&lt;Property&gt; properties) {<a name="line.492"></a>
<span class="sourceLineNo">493</span>        StringMap contextData = getContextData(event);<a name="line.493"></a>
<span class="sourceLineNo">494</span>        for (int i = 0, size = properties.size(); i &lt; size; i++) {<a name="line.494"></a>
<span class="sourceLineNo">495</span>            final Property prop = properties.get(i);<a name="line.495"></a>
<span class="sourceLineNo">496</span>            if (contextData.getValue(prop.getName()) != null) {<a name="line.496"></a>
<span class="sourceLineNo">497</span>                continue; // contextMap overrides config properties<a name="line.497"></a>
<span class="sourceLineNo">498</span>            }<a name="line.498"></a>
<span class="sourceLineNo">499</span>            final String value = prop.isValueNeedsLookup() //<a name="line.499"></a>
<span class="sourceLineNo">500</span>                    ? privateConfig.config.getStrSubstitutor().replace(event, prop.getValue()) //<a name="line.500"></a>
<span class="sourceLineNo">501</span>                    : prop.getValue();<a name="line.501"></a>
<span class="sourceLineNo">502</span>            contextData.putValue(prop.getName(), value);<a name="line.502"></a>
<span class="sourceLineNo">503</span>        }<a name="line.503"></a>
<span class="sourceLineNo">504</span>        event.setContextData(contextData);<a name="line.504"></a>
<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
<span class="sourceLineNo">506</span><a name="line.506"></a>
<span class="sourceLineNo">507</span>    private static StringMap getContextData(final RingBufferLogEvent event) {<a name="line.507"></a>
<span class="sourceLineNo">508</span>        StringMap contextData = (StringMap) event.getContextData();<a name="line.508"></a>
<span class="sourceLineNo">509</span>        if (contextData.isFrozen()) {<a name="line.509"></a>
<span class="sourceLineNo">510</span>            final StringMap temp = ContextDataFactory.createContextData();<a name="line.510"></a>
<span class="sourceLineNo">511</span>            temp.putAll(contextData);<a name="line.511"></a>
<span class="sourceLineNo">512</span>            return temp;<a name="line.512"></a>
<span class="sourceLineNo">513</span>        }<a name="line.513"></a>
<span class="sourceLineNo">514</span>        return contextData;<a name="line.514"></a>
<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
<span class="sourceLineNo">516</span>}<a name="line.516"></a>




























































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