<!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;<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.core.config.Property;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.logging.log4j.core.impl.ContextDataInjectorFactory;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.logging.log4j.core.impl.ThreadContextDataInjector;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.logging.log4j.util.ReadOnlyStringMap;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.logging.log4j.util.StringMap;<a name="line.25"></a>
<span class="sourceLineNo">026</span><a name="line.26"></a>
<span class="sourceLineNo">027</span>/**<a name="line.27"></a>
<span class="sourceLineNo">028</span> * Responsible for initializing the context data of LogEvents. Context data is data that is set by the application to be<a name="line.28"></a>
<span class="sourceLineNo">029</span> * included in all subsequent log events.<a name="line.29"></a>
<span class="sourceLineNo">030</span> * &lt;p&gt;<a name="line.30"></a>
<span class="sourceLineNo">031</span> * The source of the context data is implementation-specific. The default source for context data is the ThreadContext.<a name="line.31"></a>
<span class="sourceLineNo">032</span> * &lt;/p&gt;&lt;p&gt;<a name="line.32"></a>
<span class="sourceLineNo">033</span> * In some asynchronous models, work may be delegated to several threads, while conceptually this work shares the same<a name="line.33"></a>
<span class="sourceLineNo">034</span> * context. In such models, storing context data in {@code ThreadLocal} variables is not convenient or desirable.<a name="line.34"></a>
<span class="sourceLineNo">035</span> * Users can configure the {@code ContextDataInjectorFactory} to provide custom {@code ContextDataInjector} objects,<a name="line.35"></a>
<span class="sourceLineNo">036</span> * in order to initialize log events with context data from any arbitrary context.<a name="line.36"></a>
<span class="sourceLineNo">037</span> * &lt;/p&gt;&lt;p&gt;<a name="line.37"></a>
<span class="sourceLineNo">038</span> * When providing a custom {@code ContextDataInjector}, be aware that the {@code ContextDataInjectorFactory} may be<a name="line.38"></a>
<span class="sourceLineNo">039</span> * invoked multiple times and the various components in Log4j that need access to context data may each have their own<a name="line.39"></a>
<span class="sourceLineNo">040</span> * instance of {@code ContextDataInjector}.<a name="line.40"></a>
<span class="sourceLineNo">041</span> * This includes the object(s) that populate log events, but also various lookups and filters that look at<a name="line.41"></a>
<span class="sourceLineNo">042</span> * context data to determine whether an event should be logged.<a name="line.42"></a>
<span class="sourceLineNo">043</span> * &lt;/p&gt;&lt;p&gt;<a name="line.43"></a>
<span class="sourceLineNo">044</span> * Implementors should take particular note of how the different methods in the interface have different thread-safety<a name="line.44"></a>
<span class="sourceLineNo">045</span> * guarantees to enable optimal performance.<a name="line.45"></a>
<span class="sourceLineNo">046</span> * &lt;/p&gt;<a name="line.46"></a>
<span class="sourceLineNo">047</span> *<a name="line.47"></a>
<span class="sourceLineNo">048</span> * @see StringMap<a name="line.48"></a>
<span class="sourceLineNo">049</span> * @see ReadOnlyStringMap<a name="line.49"></a>
<span class="sourceLineNo">050</span> * @see ContextDataInjectorFactory<a name="line.50"></a>
<span class="sourceLineNo">051</span> * @see org.apache.logging.log4j.ThreadContext<a name="line.51"></a>
<span class="sourceLineNo">052</span> * @see ThreadContextDataInjector<a name="line.52"></a>
<span class="sourceLineNo">053</span> * @since 2.7<a name="line.53"></a>
<span class="sourceLineNo">054</span> */<a name="line.54"></a>
<span class="sourceLineNo">055</span>public interface ContextDataInjector {<a name="line.55"></a>
<span class="sourceLineNo">056</span>    /**<a name="line.56"></a>
<span class="sourceLineNo">057</span>     * Returns a {@code StringMap} object initialized with the specified properties and the appropriate<a name="line.57"></a>
<span class="sourceLineNo">058</span>     * context data. The returned value may be the specified parameter or a different object.<a name="line.58"></a>
<span class="sourceLineNo">059</span>     * &lt;p&gt;<a name="line.59"></a>
<span class="sourceLineNo">060</span>     * This method will be called for each log event to initialize its context data and implementors should take<a name="line.60"></a>
<span class="sourceLineNo">061</span>     * care to make this method as performant as possible while preserving at least the following thread-safety<a name="line.61"></a>
<span class="sourceLineNo">062</span>     * guarantee.<a name="line.62"></a>
<span class="sourceLineNo">063</span>     * &lt;/p&gt;&lt;p&gt;<a name="line.63"></a>
<span class="sourceLineNo">064</span>     * Thread-safety note: The returned object can safely be passed off to another thread: future changes in the<a name="line.64"></a>
<span class="sourceLineNo">065</span>     * underlying context data will not be reflected in the returned object.<a name="line.65"></a>
<span class="sourceLineNo">066</span>     * &lt;/p&gt;&lt;p&gt;<a name="line.66"></a>
<span class="sourceLineNo">067</span>     * Example implementation:<a name="line.67"></a>
<span class="sourceLineNo">068</span>     * &lt;/p&gt;<a name="line.68"></a>
<span class="sourceLineNo">069</span>     * &lt;pre&gt;<a name="line.69"></a>
<span class="sourceLineNo">070</span>     * public StringMap injectContextData(List&lt;Property&gt; properties, StringMap reusable) {<a name="line.70"></a>
<span class="sourceLineNo">071</span>     *     if (properties == null || properties.isEmpty()) {<a name="line.71"></a>
<span class="sourceLineNo">072</span>     *         // assume context data is stored in a copy-on-write data structure that is safe to pass to another thread<a name="line.72"></a>
<span class="sourceLineNo">073</span>     *         return (StringMap) rawContextData();<a name="line.73"></a>
<span class="sourceLineNo">074</span>     *     }<a name="line.74"></a>
<span class="sourceLineNo">075</span>     *     // first copy configuration properties into the result<a name="line.75"></a>
<span class="sourceLineNo">076</span>     *     ThreadContextDataInjector.copyProperties(properties, reusable);<a name="line.76"></a>
<span class="sourceLineNo">077</span>     *<a name="line.77"></a>
<span class="sourceLineNo">078</span>     *     // then copy context data key-value pairs (may overwrite configuration properties)<a name="line.78"></a>
<span class="sourceLineNo">079</span>     *     reusable.putAll(rawContextData());<a name="line.79"></a>
<span class="sourceLineNo">080</span>     *     return reusable;<a name="line.80"></a>
<span class="sourceLineNo">081</span>     * }<a name="line.81"></a>
<span class="sourceLineNo">082</span>     * &lt;/pre&gt;<a name="line.82"></a>
<span class="sourceLineNo">083</span>     *<a name="line.83"></a>
<span class="sourceLineNo">084</span>     * @param properties Properties from the log4j configuration to be added to the resulting ReadOnlyStringMap. May be<a name="line.84"></a>
<span class="sourceLineNo">085</span>     *          {@code null} or empty<a name="line.85"></a>
<span class="sourceLineNo">086</span>     * @param reusable a {@code StringMap} instance that may be reused to avoid creating temporary objects<a name="line.86"></a>
<span class="sourceLineNo">087</span>     * @return a {@code StringMap} instance initialized with the specified properties and the appropriate<a name="line.87"></a>
<span class="sourceLineNo">088</span>     *          context data. The returned value may be the specified parameter or a different object.<a name="line.88"></a>
<span class="sourceLineNo">089</span>     * @see ThreadContextDataInjector#copyProperties(List, StringMap)<a name="line.89"></a>
<span class="sourceLineNo">090</span>     */<a name="line.90"></a>
<span class="sourceLineNo">091</span>    StringMap injectContextData(final List&lt;Property&gt; properties, final StringMap reusable);<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>    /**<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * Returns a {@code ReadOnlyStringMap} object reflecting the current state of the context. Configuration properties<a name="line.94"></a>
<span class="sourceLineNo">095</span>     * are not included in the result.<a name="line.95"></a>
<span class="sourceLineNo">096</span>     * &lt;p&gt;<a name="line.96"></a>
<span class="sourceLineNo">097</span>     * This method may be called multiple times for each log event by Filters and Lookups and implementors should take<a name="line.97"></a>
<span class="sourceLineNo">098</span>     * care to make this method as performant as possible while preserving at least the following thread-safety<a name="line.98"></a>
<span class="sourceLineNo">099</span>     * guarantee.<a name="line.99"></a>
<span class="sourceLineNo">100</span>     * &lt;/p&gt;&lt;p&gt;<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * Thread-safety note: The returned object can only be safely used &lt;em&gt;in the current thread&lt;/em&gt;. Changes in the<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * underlying context may or may not be reflected in the returned object, depending on the context data source and<a name="line.102"></a>
<span class="sourceLineNo">103</span>     * the implementation of this method. It is not safe to pass the returned object to another thread.<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * &lt;/p&gt;<a name="line.104"></a>
<span class="sourceLineNo">105</span>     * @return a {@code ReadOnlyStringMap} object reflecting the current state of the context, may not return {@code null}<a name="line.105"></a>
<span class="sourceLineNo">106</span>     */<a name="line.106"></a>
<span class="sourceLineNo">107</span>    ReadOnlyStringMap rawContextData();<a name="line.107"></a>
<span class="sourceLineNo">108</span>}<a name="line.108"></a>




























































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