blob: 6a93d454bd3c381aa2e44f36e0dd769980eab869 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_144) on Sat Apr 25 12:11:39 MST 2020 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ContextDataInjector (Apache Log4j Core 2.13.2 API)</title>
<meta name="date" content="2020-04-25">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ContextDataInjector (Apache Log4j Core 2.13.2 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":6,"i1":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ContextDataInjector.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/logging/log4j/core/Appender.html" title="interface in org.apache.logging.log4j.core"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/logging/log4j/core/Core.html" title="class in org.apache.logging.log4j.core"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/logging/log4j/core/ContextDataInjector.html" target="_top">Frames</a></li>
<li><a href="ContextDataInjector.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.logging.log4j.core</div>
<h2 title="Interface ContextDataInjector" class="title">Interface ContextDataInjector</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../../org/apache/logging/log4j/core/impl/ThreadContextDataInjector.ForCopyOnWriteThreadContextMap.html" title="class in org.apache.logging.log4j.core.impl">ThreadContextDataInjector.ForCopyOnWriteThreadContextMap</a>, <a href="../../../../../org/apache/logging/log4j/core/impl/ThreadContextDataInjector.ForDefaultThreadContextMap.html" title="class in org.apache.logging.log4j.core.impl">ThreadContextDataInjector.ForDefaultThreadContextMap</a>, <a href="../../../../../org/apache/logging/log4j/core/impl/ThreadContextDataInjector.ForGarbageFreeThreadContextMap.html" title="class in org.apache.logging.log4j.core.impl">ThreadContextDataInjector.ForGarbageFreeThreadContextMap</a></dd>
</dl>
<hr>
<br>
<pre>public interface <a href="../../../../../src-html/org/apache/logging/log4j/core/ContextDataInjector.html#line.58">ContextDataInjector</a></pre>
<div class="block">Responsible for initializing the context data of LogEvents. Context data is data that is set by the application to be
included in all subsequent log events.
<p><b>NOTE: It is no longer recommended that custom implementations of this interface be provided as it is
difficult to do. Instead, provide a custom ContextDataProvider.</b></p>
<p>
<p>
The source of the context data is implementation-specific. The default source for context data is the ThreadContext.
</p><p>
In some asynchronous models, work may be delegated to several threads, while conceptually this work shares the same
context. In such models, storing context data in <code>ThreadLocal</code> variables is not convenient or desirable.
Users can configure the <code>ContextDataInjectorFactory</code> to provide custom <code>ContextDataInjector</code> objects,
in order to initialize log events with context data from any arbitrary context.
</p><p>
When providing a custom <code>ContextDataInjector</code>, be aware that the <code>ContextDataInjectorFactory</code> may be
invoked multiple times and the various components in Log4j that need access to context data may each have their own
instance of <code>ContextDataInjector</code>.
This includes the object(s) that populate log events, but also various lookups and filters that look at
context data to determine whether an event should be logged.
</p><p>
Implementors should take particular note of how the different methods in the interface have different thread-safety
guarantees to enable optimal performance.
</p></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>2.7</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><code>StringMap</code>,
<code>ReadOnlyStringMap</code>,
<a href="../../../../../org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.html" title="class in org.apache.logging.log4j.core.impl"><code>ContextDataInjectorFactory</code></a>,
<code>ThreadContext</code>,
<a href="../../../../../org/apache/logging/log4j/core/impl/ThreadContextDataInjector.html" title="class in org.apache.logging.log4j.core.impl"><code>ThreadContextDataInjector</code></a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>org.apache.logging.log4j.util.StringMap</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/logging/log4j/core/ContextDataInjector.html#injectContextData-java.util.List-org.apache.logging.log4j.util.StringMap-">injectContextData</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/logging/log4j/core/config/Property.html" title="class in org.apache.logging.log4j.core.config">Property</a>&gt;&nbsp;properties,
org.apache.logging.log4j.util.StringMap&nbsp;reusable)</code>
<div class="block">Returns a <code>StringMap</code> object initialized with the specified properties and the appropriate
context data.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>org.apache.logging.log4j.util.ReadOnlyStringMap</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/logging/log4j/core/ContextDataInjector.html#rawContextData--">rawContextData</a></span>()</code>
<div class="block">Returns a <code>ReadOnlyStringMap</code> object reflecting the current state of the context.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="injectContextData-java.util.List-org.apache.logging.log4j.util.StringMap-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>injectContextData</h4>
<pre>org.apache.logging.log4j.util.StringMap&nbsp;<a href="../../../../../src-html/org/apache/logging/log4j/core/ContextDataInjector.html#line.94">injectContextData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/logging/log4j/core/config/Property.html" title="class in org.apache.logging.log4j.core.config">Property</a>&gt;&nbsp;properties,
org.apache.logging.log4j.util.StringMap&nbsp;reusable)</pre>
<div class="block">Returns a <code>StringMap</code> object initialized with the specified properties and the appropriate
context data. The returned value may be the specified parameter or a different object.
<p>
This method will be called for each log event to initialize its context data and implementors should take
care to make this method as performant as possible while preserving at least the following thread-safety
guarantee.
</p><p>
Thread-safety note: The returned object can safely be passed off to another thread: future changes in the
underlying context data will not be reflected in the returned object.
</p><p>
Example implementation:
</p>
<pre>
public StringMap injectContextData(List<Property> properties, StringMap reusable) {
if (properties == null || properties.isEmpty()) {
// assume context data is stored in a copy-on-write data structure that is safe to pass to another thread
return (StringMap) rawContextData();
}
// first copy configuration properties into the result
ThreadContextDataInjector.copyProperties(properties, reusable);
// then copy context data key-value pairs (may overwrite configuration properties)
reusable.putAll(rawContextData());
return reusable;
}
</pre></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>properties</code> - Properties from the log4j configuration to be added to the resulting ReadOnlyStringMap. May be
<code>null</code> or empty</dd>
<dd><code>reusable</code> - a <code>StringMap</code> instance that may be reused to avoid creating temporary objects</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a <code>StringMap</code> instance initialized with the specified properties and the appropriate
context data. The returned value may be the specified parameter or a different object.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/logging/log4j/core/impl/ThreadContextDataInjector.html#copyProperties-java.util.List-org.apache.logging.log4j.util.StringMap-"><code>ThreadContextDataInjector.copyProperties(List, StringMap)</code></a></dd>
</dl>
</li>
</ul>
<a name="rawContextData--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>rawContextData</h4>
<pre>org.apache.logging.log4j.util.ReadOnlyStringMap&nbsp;<a href="../../../../../src-html/org/apache/logging/log4j/core/ContextDataInjector.html#line.110">rawContextData</a>()</pre>
<div class="block">Returns a <code>ReadOnlyStringMap</code> object reflecting the current state of the context. Configuration properties
are not included in the result.
<p>
This method may be called multiple times for each log event by Filters and Lookups and implementors should take
care to make this method as performant as possible while preserving at least the following thread-safety
guarantee.
</p><p>
Thread-safety note: The returned object can only be safely used <em>in the current thread</em>. Changes in the
underlying context may or may not be reflected in the returned object, depending on the context data source and
the implementation of this method. It is not safe to pass the returned object to another thread.
</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>a <code>ReadOnlyStringMap</code> object reflecting the current state of the context, may not return <code>null</code></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ContextDataInjector.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/logging/log4j/core/Appender.html" title="interface in org.apache.logging.log4j.core"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/logging/log4j/core/Core.html" title="class in org.apache.logging.log4j.core"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/logging/log4j/core/ContextDataInjector.html" target="_top">Frames</a></li>
<li><a href="ContextDataInjector.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small><p align="center">Copyright &#169; 1999-2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All Rights Reserved.<br /> Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, the Apache Logging project logo, and the Apache Log4j logo are trademarks of The Apache Software Foundation.</p></small></p>
</body>
</html>