This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch 2.x-site-stg-out
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/2.x-site-stg-out by this push:
new 4acc3603a8 Add website content generated from
`a669c16833d24467d3cfee377bbd25b57cd97a5f`
4acc3603a8 is described below
commit 4acc3603a8a1eea14ba893d4ee44d305cebec07c
Author: ASF Logging Services RM <[email protected]>
AuthorDate: Wed Jun 19 11:55:15 2024 +0000
Add website content generated from
`a669c16833d24467d3cfee377bbd25b57cd97a5f`
---
hibernate.html | 4 +-
manual/api.html | 4 +-
manual/architecture.html | 4 +-
manual/flowtracing.html | 539 +++++++++++++++++++++++++++++++------------
manual/getting-started.html | 8 +-
manual/installation.html | 12 +-
manual/pattern-layout.html | 8 +-
manual/systemproperties.html | 2 +-
migrate-from-logback.html | 6 +-
migrate-from-slf4j.html | 6 +-
plugin-reference.html | 78 +++----
release-notes.html | 5 +-
sitemap.xml | 120 +++++-----
13 files changed, 518 insertions(+), 278 deletions(-)
diff --git a/hibernate.html b/hibernate.html
index d16e04291a..e4f165586d 100644
--- a/hibernate.html
+++ b/hibernate.html
@@ -335,7 +335,7 @@ If you have a working <a
href="manual/installation.html#impl-core" class="xref p
<p>A logging API is an interface your code or your dependencies directly logs
against.
It is required at compile-time.
It is implementation agnostic to ensure that your application can write logs,
but is not tied to a specific logging implementation.
-Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
+Log4j API, <a href="https://www.slf4j.org">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
</dd>
</dl>
</div>
@@ -344,7 +344,7 @@ Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.ora
<dt class="hdlist1">Logging implementation</dt>
<dd>
<p>A logging implementation is only required at runtime and can be changed
without the need to recompile your software.
-Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch/">Logback</a> are the most
well-known logging implementations.</p>
+Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch">Logback</a> are the most
well-known logging implementations.</p>
</dd>
</dl>
</div>
diff --git a/manual/api.html b/manual/api.html
index 7e8e9f9889..c494d82b4e 100644
--- a/manual/api.html
+++ b/manual/api.html
@@ -333,7 +333,7 @@
<p>A logging API is an interface your code or your dependencies directly logs
against.
It is required at compile-time.
It is implementation agnostic to ensure that your application can write logs,
but is not tied to a specific logging implementation.
-Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
+Log4j API, <a href="https://www.slf4j.org">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
</dd>
</dl>
</div>
@@ -342,7 +342,7 @@ Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.ora
<dt class="hdlist1">Logging implementation</dt>
<dd>
<p>A logging implementation is only required at runtime and can be changed
without the need to recompile your software.
-Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch/">Logback</a> are the most
well-known logging implementations.</p>
+Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch">Logback</a> are the most
well-known logging implementations.</p>
</dd>
</dl>
</div>
diff --git a/manual/architecture.html b/manual/architecture.html
index a6660aeadf..6daed1f854 100644
--- a/manual/architecture.html
+++ b/manual/architecture.html
@@ -511,8 +511,8 @@ However, it is generally recommended that a Marker with a
corresponding
global Marker Filter be used instead.</p>
</div>
<div class="paragraph">
-<p><a href="http://logging.apache.org/log4j/1.2/manual.html">Log4j 1.x</a> and
-<a
href="http://logback.qos.ch/manual/architecture.html#effectiveLevel">Logback</a>
+<p><a href="https://logging.apache.org/log4j/1.x/manual.html">Log4j 1</a> and
+<a
href="https://logback.qos.ch/manual/architecture.html#effectiveLevel">Logback</a>
both have the concept of "Level Inheritance". In Log4j 2, Loggers and
LoggerConfigs are two different objects so this concept is implemented
differently. Each Logger references the appropriate LoggerConfig which
diff --git a/manual/flowtracing.html b/manual/flowtracing.html
index 57b15a7b12..8a2fc39441 100644
--- a/manual/flowtracing.html
+++ b/manual/flowtracing.html
@@ -322,53 +322,60 @@
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
-<p>Flow tracing in Log4j is an advanced logging technique designed to enhance
-the visibility of application processes. With this technique, developers can
track
-data flow through their application using unique methods that log entry
-and exit points within the code.</p>
+<p><a href="api.html" class="xref page">Log4j API</a> provides convenience
logging methods to aid the tracking of the data flow through an application,
which is referred to as <strong>flow tracing</strong>.
+<a href="#impl">Logging implementations</a> can choose to <a
href="#log-events">generate specialized log events</a> allowing users to handle
these messages different from the rest – see <a href="#example">Example
configuration</a>.</p>
</div>
<div class="paragraph">
-<p>These methods are:</p>
+<p>Flow tracing is known to help with the following use cases:</p>
</div>
<div class="ulist">
<ul>
<li>
-<p><code>traceEntry()</code> (Deprecated <code>entry()</code>)</p>
+<p>Troubleshooting without requiring a debugging session</p>
</li>
<li>
-<p><code>traceExit()</code> (Deprecated: <code>exit()</code>)</p>
-</li>
-<li>
-<p><code>throwing()</code></p>
-</li>
-<li>
-<p><code>catching()</code></p>
+<p>Helping educate new developers in learning the application</p>
</li>
</ul>
</div>
-<div class="paragraph">
-<p>With these methods, we can investigate environments where traditional
debugging is not possible,
-such as in production or during live application monitoring.
-Furthermore, new developers can be educated on the application’s
behavior by examining the logs.</p>
-</div>
-<div class="paragraph">
-<p>Flow tracing offers a structured approach to all this.</p>
-</div>
</div>
</div>
<div class="sect1">
-<h2 id="_flow_tracing_methods"><a class="anchor"
href="#_flow_tracing_methods"></a>Flow Tracing Methods</h2>
+<h2 id="usage"><a class="anchor" href="#usage"></a>Usage</h2>
<div class="sectionbody">
<div class="paragraph">
-<p>The methods often used are <code>traceEntry()</code> and
<code>traceExit()</code>.
-As the name suggests, the "entry" method is used at the beginning and the
"exit" method at the end of a method.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/Logger.html"><code>Logger</code></a>
provides following methods for flow tracing purposes:</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>traceEntry()</code></dt>
+<dd>
+<p>Marks the entry to a block</p>
+</dd>
+<dt class="hdlist1"><code>traceExit()</code></dt>
+<dd>
+<p>Marks the exit from a block</p>
+</dd>
+<dt class="hdlist1"><code>catching()</code></dt>
+<dd>
+<p>Reports caught exceptions</p>
+</dd>
+<dt class="hdlist1"><code>throwing()</code></dt>
+<dd>
+<p>Reports exceptions that are either discarded or unlikely to be handled</p>
+</dd>
+</dl>
</div>
-<div class="listingblock">
+<div class="paragraph">
+<p>The most used <code>traceEntry()</code> and <code>traceExit()</code>
methods are intended to mark the <em>entry</em> and <em>exit</em> points of a
particular block of code:</p>
+</div>
+<div id="example-trace" class="listingblock">
+<div class="title">Example <code>traceEntry()</code> and
<code>traceExit()</code> usage</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-java hljs"
data-lang="java">public void someMethod() {
- logger.traceEntry(); <i class="conum" data-value="1"></i><b>(1)</b>
+ LOGGER.traceEntry(); <i class="conum" data-value="1"></i><b>(1)</b>
// method body
- logger.traceExit(); <i class="conum" data-value="2"></i><b>(2)</b>
+ LOGGER.traceExit(); <i class="conum" data-value="2"></i><b>(2)</b>
}</code></pre>
</div>
</div>
@@ -376,24 +383,26 @@ As the name suggests, the "entry" method is used at the
beginning and the "exit"
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
-<td>The <code>entry()</code> method is called at the beginning of the
method.</td>
+<td><code>traceEntry()</code> marks the entry to the block</td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
-<td>The <code>exit()</code> method is called at the end of the method.</td>
+<td><code>traceExit()</code> marks the exit from the block</td>
</tr>
</table>
</div>
<div class="paragraph">
-<p>Developers can call both <code>traceEntry()</code> and
<code>traceExit()</code> methods with or without parameters.
-In the case of <code>traceEntry()</code>, it makes sense to pass the method
parameters on as arguments.</p>
+<p>Both <code>traceEntry()</code> and <code>traceExit()</code> also accept
parameters.
+You can use them to track the input and output of the associated block:</p>
</div>
-<div class="listingblock">
+<div id="example-trace-args" class="listingblock">
+<div class="title">Example <code>traceEntry()</code> and
<code>traceExit()</code> usage with arguments</div>
<div class="content">
-<pre class="highlightjs highlight"><code class="language-java hljs"
data-lang="java">public void someMethod(String param) {
- logger.traceEntry(param); <i class="conum" data-value="1"></i><b>(1)</b>
+<pre class="highlightjs highlight"><code class="language-java hljs"
data-lang="java">public String someMethod(String input) {
+ logger.traceEntry(null, input); <i class="conum"
data-value="1"></i><b>(1)</b>
// method body
- logger.traceExit(); <i class="conum" data-value="2"></i><b>(2)</b>
+ String output = ...;
+ return logger.traceExit(output); <i class="conum"
data-value="2"></i><b>(2)</b>
}</code></pre>
</div>
</div>
@@ -401,42 +410,26 @@ In the case of <code>traceEntry()</code>, it makes sense
to pass the method para
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
-<td>The <code>traceEntry()</code> method is called at the beginning of the
method.</td>
+<td><code>traceEntry()</code> marks the entry to the block along with the
input</td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
-<td>The <code>traceExit()</code> method is called at the end of the
method.</td>
-</tr>
-</table>
-</div>
-<div class="paragraph">
-<p>The <code>traceEntry()</code> also supports messages.</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-java hljs"
data-lang="java">public void someMethod(String[] text) {
- logger.traceEntry(new JsonMessage(text)); <i class="conum"
data-value="1"></i><b>(1)</b>
- // method body
-}</code></pre>
-</div>
-</div>
-<div class="colist arabic">
-<table>
-<tr>
-<td><i class="conum" data-value="1"></i><b>1</b></td>
-<td>Using the <code>JsonMessage</code> class to log the <code>text</code>
parameter.</td>
+<td><code>traceExit()</code> marks the exit from the block along with the
output</td>
</tr>
</table>
</div>
<div class="paragraph">
-<p>Very similar, it is possible to use <code>traceExit()</code> with methods
that return a value.</p>
+<p>The <code>catching()</code> method can be used by an application when it
catches an exception that it will not rethrow, either explicitly or attached to
another exception:</p>
</div>
-<div class="listingblock">
+<div id="example-catching" class="listingblock">
+<div class="title">Example <code>catching()</code> usage</div>
<div class="content">
-<pre class="highlightjs highlight"><code class="language-java hljs"
data-lang="java">public String someMethod() {
- String result = "Hello";
- // method body
- return logger.traceExit(result); <i class="conum"
data-value="1"></i><b>(1)</b>
+<pre class="highlightjs highlight"><code class="language-java hljs"
data-lang="java">public void someMethod() {
+ try {
+ // Business logic
+ } catch (Exception error) {
+ logger.catching(error); <i class="conum" data-value="1"></i><b>(1)</b>
+ }
}</code></pre>
</div>
</div>
@@ -444,30 +437,22 @@ In the case of <code>traceEntry()</code>, it makes sense
to pass the method para
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
-<td>The <code>traceExit()</code> method can also return a value.</td>
+<td><code>catching()</code> reports the caught exception</td>
</tr>
</table>
</div>
<div class="paragraph">
-<p>Developers can use the <code>catching()</code> and <code>throwing()</code>
methods to work with exceptions.</p>
-</div>
-<div class="paragraph">
-<p>The following code shows the <code>catching()</code> method. It will be
called
-inside the <code>catch</code> block of a try-catch statement.</p>
+<p>The <code>throwing()</code> method can be used by an application when it is
throwing an exception that is unlikely to be handled, such as a
<code>RuntimeException</code>.
+This will ensure that proper diagnostics are available if needed.</p>
</div>
-<div class="paragraph">
-<p>The <code>catching()</code> method can be used by an application when it
catches an
-Exception that it will not rethrow, either explicitly or attached
-to another Exception. The generated logging event will have an
<code>ERROR</code> level.</p>
-</div>
-<div class="listingblock">
+<div id="example-throwing" class="listingblock">
+<div class="title">Example <code>throwing()</code> usage</div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-java hljs"
data-lang="java">public void someMethod() {
try {
- // Let's assume an exception is thrown here
- String msg = messages[messages.length];
- } catch (Exception ex) {
- logger.catching(ex); <i class="conum" data-value="1"></i><b>(1)</b>
+ // Business logic
+ } catch (RuntimeException error) {
+ throw logger.throwing(error); <i class="conum"
data-value="1"></i><b>(1)</b>
}
}</code></pre>
</div>
@@ -476,21 +461,11 @@ to another Exception. The generated logging event will
have an <code>ERROR</code
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
-<td>The <code>catching()</code> method logs exceptions that are caught and not
rethrown.</td>
+<td><code>thrown()</code> reports the caught exception that is about to be
rethrown.
+Plus, rethrowing the exception, contrary to <a href="#example-catching">the
<code>catching()</code> example</a> suppressing the exception.</td>
</tr>
</table>
</div>
-<div class="paragraph">
-<p>The <code>throwing()</code> method is used to log exceptions that are
thrown and not caught.
-The code shows how to use the <code>throwing()</code> method- like
<code>catching()</code>, which will be called
-inside the <code>catch</code> block of a try-catch statement.</p>
-</div>
-<div class="paragraph">
-<p>The <code>throwing()</code> method can be used by an application when it is
throwing
-an exception that is unlikely to be handled, such as a RuntimeException.
-This will ensure that proper diagnostics are available if needed.
-The generated logging event will have an <code>ERROR</code> level.</p>
-</div>
<div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-java hljs"
data-lang="java">public void someMethod() {
@@ -511,117 +486,383 @@ The generated logging event will have an
<code>ERROR</code> level.</p>
</tr>
</table>
</div>
+<div class="sect2">
+<h3 id="aop"><a class="anchor" href="#aop"></a>Aspect-oriented programming</h3>
+<div class="paragraph">
+<p>Logging has been a notorious example for demonstrating <a
href="https://en.wikipedia.org/wiki/Aspect-oriented_programming">aspect-oriented
programming</a> (AOP).
+For instance, using AOP, you can inject logging statements to methods that
match a particular footprint, e.g., all public methods in
<code>com.mycompany</code> package.
+With a couple of lines of AOP instructions, you can log input and output of
all matching functions.
+Flow tracing methods fits like a glove to this AOP use case.
+You can see a demonstration of this in <a
href="https://github.com/apache/logging-log4j-samples/tree/main/log4j-samples-aspectj">the
<code>log4j-samples-aspectj</code> project</a> demonstrating how you can
implement this use case using Log4j API flow methods and Spring Boot AspectJ
support.</p>
+</div>
+</div>
</div>
</div>
<div class="sect1">
-<h2 id="_differences_in_flow_tracing_methods"><a class="anchor"
href="#_differences_in_flow_tracing_methods"></a>Differences in flow tracing
methods</h2>
+<h2 id="impl"><a class="anchor" href="#impl"></a>Implementation</h2>
<div class="sectionbody">
<div class="paragraph">
-<p>Flow tracing methods have specific markers assigned and logs with a level
of <code>TRACE</code>.
-It’s also noteworthy that all messages begin with "event".</p>
+<p>This section explains how flow tracing is implemented by different logging
implementations.</p>
+</div>
+<div class="sect2">
+<h3 id="impl-log4j"><a class="anchor" href="#impl-log4j"></a>Log4j Core</h3>
+<div class="paragraph">
+<p>Log4j Core, the reference implementation of Log4j API, implements the flow
tracing methods such that</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="#impl-log4j-log-events">It generates specialized log events</a></p>
+</li>
+<li>
+<p><a href="#impl-log4j-config">Its behaviour is configurable</a></p>
+</li>
+</ul>
</div>
+<div class="sect3">
+<h4 id="impl-log4j-log-events"><a class="anchor"
href="#impl-log4j-log-events"></a>Log events</h4>
<div class="paragraph">
-<p>The table below shows the methods and their unique features.</p>
+<p>Log4j Core implements the flow tracing methods such that the generated log
events are decorated to accommodate any need to selectively handle them:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
+<col style="width: 25%;">
+<col style="width: 12.5%;">
+<col style="width: 25%;">
+<col style="width: 37.5%;">
</colgroup>
<thead>
<tr>
-<th class="tableblock halign-left valign-top">Method Name</th>
-<th class="tableblock halign-left valign-top">Marker Name</th>
-<th class="tableblock halign-left valign-top">Special Features</th>
+<th class="tableblock halign-left valign-top">Method</th>
+<th class="tableblock halign-left valign-top">Level</th>
+<th class="tableblock halign-left valign-top">Markers</th>
+<th class="tableblock halign-left valign-top">Message</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>traceEntry()</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>TRACE</code></p></td>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>ENTER</code>, <code>FLOW</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Can take a
format string and a variable list of parameters.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>entry()</code></p></td>
-<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>ENTER</code>, <code>FLOW</code></p></td>
-<td class="tableblock halign-left valign-top"><p
class="tableblock">DEPRECATED. Accepts 0 to 4 parameters</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/EntryMessage.html"><code>EntryMessage</code></a>
extending from <a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/FlowMessage.html"><code>FlowMessage</code></a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>traceExit()</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>TRACE</code></p></td>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>EXIT</code>, <code>FLOW</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Handles
return values differently based on the method signature.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>exit()</code></p></td>
-<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>EXIT</code>, <code>FLOW</code></p></td>
-<td class="tableblock halign-left valign-top"><p
class="tableblock">DEPRECATED. Can be called with or without
parameters.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/EntryMessage.html"><code>ExitMessage</code></a>
extending from <a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/FlowMessage.html"><code>FlowMessage</code></a></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>throwing()</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>ERROR</code></p></td>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>THROWING</code>, <code>EXCEPTION</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Typically
used when an application throws an exception that is unlikely to be handled,
such as a RuntimeException.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Plain
message</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>catching()</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>ERROR</code></p></td>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>CATCHING</code>, <code>EXCEPTION</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Used when
catching exceptions that are not rethrown; logs with ERROR level.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Plain
message</p></td>
</tr>
</tbody>
</table>
</div>
-</div>
-<div class="sect1">
-<h2 id="_flow_tracing_example_configuration"><a class="anchor"
href="#_flow_tracing_example_configuration"></a>Flow Tracing Example
Configuration</h2>
-<div class="sectionbody">
+<div class="sect3">
+<h4 id="impl-log4j-config"><a class="anchor"
href="#impl-log4j-config"></a>Configuration</h4>
<div class="paragraph">
-<p>The following example demonstrates how to configure Log4j to use flow
tracing.
-Note: While developers should prefer the <code>JsonTemplateLayout</code> in
production, this example uses <code>PatternLayout</code> for simplicity.</p>
+<p>Flow tracing implementation of Log4j Core can be configured using the
following system properties:</p>
</div>
+<div class="sect4">
+<h5 id="log4j2.flowMessageFactory"><a class="anchor"
href="#log4j2.flowMessageFactory"></a><code>log4j2.flowMessageFactory</code></h5>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 83.3334%;">
+</colgroup>
+<tbody>
+<tr>
+<th class="tableblock halign-left valign-top"><p class="tableblock">Env.
variable</p></th>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>LOG4J_FLOW_MESSAGE_FACTORY</code></p></td>
+</tr>
+<tr>
+<th class="tableblock halign-left valign-top"><p
class="tableblock">Type</p></th>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/FlowMessageFactory.html"><code>Class<?
extends FlowMessageFactory></code></a></p></td>
+</tr>
+<tr>
+<th class="tableblock halign-left valign-top"><p class="tableblock">Default
value</p></th>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/DefaultFlowMessageFactory.html"><code>DefaultFlowMessageFactory</code></a></p></td>
+</tr>
+</tbody>
+</table>
<div class="paragraph">
-<p>Two appenders are defined: <code>Console</code> and <code>File</code>.</p>
+<p>Fully qualified class name of a
+<a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/FlowMessageFactory.html"><code>FlowMessageFactory</code></a>
+implementation to be used by all loggers.</p>
+</div>
+</div>
</div>
+</div>
+<div class="sect2">
+<h3 id="impl-logback"><a class="anchor" href="#impl-logback"></a>Logback</h3>
<div class="paragraph">
-<p>The <code>Console</code> appender outputs logs to <code>SYSTEM_OUT</code>,
typically the console.
-It includes a <code>ThresholdFilter</code> set to only accept messages at the
<code>ERROR</code> level or above.
-Less severe messages are filtered.</p>
+<p><a href="https://logback.qos.ch">Logback</a> is another logging
implementation for the <a href="https://www.slf4j.org">SLF4J</a> logging API,
just like Log4j Core is a logging implementation for the <a href="api.html"
class="xref page">Log4j API</a>.
+Using Log4j-to-SLF4J bridge, Logback can be <a
href="installation.html#impl-logback" class="xref page">configured to consume
Log4j API</a>.</p>
</div>
<div class="paragraph">
-<p>Similarly, the File appender directs logs to a file named
<code>target/test.log</code>.
-The appenders configuration will create a new file for every application
run.</p>
+<p>Log4j-to-SLF4J bridge implements flow tracing methods such that log events
are generated with same <a href="#impl-log4j-log-events">marker and level
changes of Log4j Core</a>.
+They only differ in generated message types, since SLF4J has no <a
href="messages.html" class="xref page">extensible message contract</a> like
Log4j, but plain <code>String</code>-based messages.
+This effectively means Logback also has access to the stated marker and level
changes while using Log4j API flow tracing methods.</p>
+</div>
+</div>
</div>
+</div>
+<div class="sect1">
+<h2 id="example"><a class="anchor" href="#example"></a>Example
configuration</h2>
+<div class="sectionbody">
<div class="paragraph">
-<p>Both appenders use the already mentioned <code>PatternLayout</code>, which
includes detailed information such as time, log level, class name, line number,
and method name.</p>
+<p>In this section, we will share logging implementation configuration
examples to filter on flow tracing log events.</p>
</div>
+<div class="sect2">
+<h3 id="example-log4j"><a class="anchor" href="#example-log4j"></a>Log4j
Core</h3>
<div class="paragraph">
-<p>Finally, in the Loggers section, the Root logger is set to a
<code>TRACE</code> level, which is necessary to see flow tracing in action.
-The Root logger references the File appender, directing its output to the
configured file.</p>
+<p>Log4j Core is the reference implementation of Log4j API.
+In the example configurations below, we will employ a <a
href="pattern-layout.html" class="xref page">Pattern Layout</a> depending on
the associated markers of the log event:</p>
+</div>
+<div id="_tabs_1" class="openblock tabs is-sync is-loading">
+<div class="content">
+<div class="ulist tablist">
+<ul>
+<li id="_tabs_1_xml" class="tab">
+<p>XML</p>
+</li>
+<li id="_tabs_1_json" class="tab">
+<p>JSON</p>
+</li>
+<li id="_tabs_1_yaml" class="tab">
+<p>YAML</p>
+</li>
+<li id="_tabs_1_properties" class="tab">
+<p>Properties</p>
+</li>
+</ul>
</div>
+<div id="_tabs_1_xml--panel" class="tabpanel" aria-labelledby="_tabs_1_xml">
<div class="listingblock">
+<div class="title"><a
href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examplesmanual/flowtracing/log4j2.xml">log4j2.xml</a>
snippet</div>
<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs"
data-lang="xml"><?xml version="1.0" encoding="UTF-8"?>
-<Configuration>
- <Appenders>
- <Console name="Console" target="SYSTEM_OUT">
- <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
- <!-- Flow tracing is most useful with a pattern that shows location.
- Below pattern outputs class, line number and method name. -->
- <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M -
%msg%xEx%n"/>
- </Console>
- <File name="log" fileName="target/test.log" append="false">
- <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M -
%msg%xEx%n"/>
- </File>
- </Appenders>
- <Loggers>
- <Root level="trace">
- <AppenderRef ref="log"/>
- </Root>
- </Loggers>
-</Configuration></code></pre>
+<pre class="highlightjs highlight"><code class="language-xml hljs"
data-lang="xml"><MarkerFilter marker="FLOW" onMatch="ACCEPT"
onMismatch="NEUTRAL"/><i class="conum" data-value="1"></i><b>(1)</b>
+
+<Appenders>
+ <Console name="CONSOLE">
+ <PatternLayout>
+ <MarkerPatternSelector defaultPattern="%d %5p [%t] %c{1} --
%m%n"><i class="conum" data-value="2"></i><b>(2)</b>
+ <PatternMatch key="ENTER" pattern="%d %5p [%t] %c{1} =>
%m%n"/><i class="conum" data-value="3"></i><b>(3)</b>
+ <PatternMatch key="EXIT" pattern="%d %5p [%t] %c{1} <=
%m%n"/><i class="conum" data-value="4"></i><b>(4)</b>
+ </MarkerPatternSelector>
+ </PatternLayout>
+ </Console>
+</Appenders></code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_1_json--panel" class="tabpanel" aria-labelledby="_tabs_1_json">
+<div class="listingblock">
+<div class="title"><a
href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examplesmanual/flowtracing/log4j2.json">log4j2.json</a>
snippet</div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs"
data-lang="json">"MarkerFilter": { <i class="conum"
data-value="1"></i><b>(1)</b>
+ "marker": "FLOW",
+ "onMatch": "ACCEPT",
+ "onMismatch": "NEUTRAL"
+},
+
+"Appenders": {
+ "Console": {
+ "name": "CONSOLE",
+ "PatternLayout": {
+ "MarkerPatternSelector": {
+ "defaultPattern": "%d %5p [%t] %c{1} -- %m%n",<i class="conum"
data-value="2"></i><b>(2)</b>
+ "PatternMatch": [
+ {<i class="conum" data-value="3"></i><b>(3)</b>
+ "key": "ENTER",
+ "pattern": "%d %5p [%t] %c{1} => %m%n"
+ },
+ {<i class="conum" data-value="4"></i><b>(4)</b>
+ "key": "EXIT",
+ "pattern": "%d %5p [%t] %c{1} <= %m%n"
+ }
+ ]
+ }
+ }
+ }
+},</code></pre>
+</div>
</div>
</div>
+<div id="_tabs_1_yaml--panel" class="tabpanel" aria-labelledby="_tabs_1_yaml">
+<div class="listingblock">
+<div class="title"><a
href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examplesmanual/flowtracing/log4j2.yaml">log4j2.yaml</a>
snippet</div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-yaml hljs"
data-lang="yaml">MarkerFilter: <i class="conum" data-value="1"></i><b>(1)</b>
+ marker: "FLOW"
+ onMatch: "ACCEPT"
+ onMismatch: "NEUTRAL"
+
+Appenders:
+ Console:
+ name: "CONSOLE"
+ PatternLayout:
+ MarkerPatternSelector:
+ defaultPattern: "%d %5p [%t] %c{1} -- %m%n" <i class="conum"
data-value="2"></i><b>(2)</b>
+ PatternMatch:
+ - key: "ENTER" <i class="conum" data-value="3"></i><b>(3)</b>
+ pattern: "%d %5p [%t] %c{1} => %m%n"
+ - key: "EXIT" <i class="conum" data-value="4"></i><b>(4)</b>
+ pattern: "%d %5p [%t] %c{1} <= %m%n"</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_1_properties--panel" class="tabpanel"
aria-labelledby="_tabs_1_properties">
+<div class="listingblock">
+<div class="title"><a
href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examplesmanual/flowtracing/log4j2.properties">log4j2.properties</a>
snippet</div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-properties hljs"
data-lang="properties">filter.0.type = MarkerFilter <i class="conum"
data-value="1"></i><b>(1)</b>
+filter.0.marker = FLOW
+filter.0.onMatch = ACCEPT
+filter.0.onMismatch = NEUTRAL
+
+appender.0.type = Console
+appender.0.name = CONSOLE
+appender.0.layout.type = PatternLayout
+appender.0.layout.patternSelector.type = MarkerPatternSelector
+appender.0.layout.patternSelector.defaultPattern = "%d %5p [%t] %c{1} -- %m%n
<i class="conum" data-value="2"></i><b>(2)</b>
+appender.0.layout.patternSelector.properties.0.type = PatternMatch
+appender.0.layout.patternSelector.properties.0.key = ENTER
+appender.0.layout.patternSelector.properties.0.pattern = %d %5p [%t] %c{1}
=> %m%n <i class="conum" data-value="3"></i><b>(3)</b>
+appender.0.layout.patternSelector.properties.1.type = PatternMatch
+appender.0.layout.patternSelector.properties.1.key = EXIT
+appender.0.layout.patternSelector.properties.1.pattern = %d %5p [%t] %c{1}
<= %m%n <i class="conum" data-value="4"></i><b>(4)</b></code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>Accepting log events marked with <code>FLOW</code> regardless of their
level</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>By default, log event messages will be formatted with a <code>--</code>
prefix</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>Log events marked with <code>ENTER</code> (that is, generated by
<code>traceEntry()</code>) will have their message formatted with a
<code>⇒</code> prefix</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="4"></i><b>4</b></td>
+<td>Log events marked with <code>EXIT</code> (that is, generated by
<code>traceExit()</code>) will have their message formatted with a
<code>⇐</code> prefix</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="example-logback"><a class="anchor"
href="#example-logback"></a>Logback</h3>
<div class="paragraph">
-<p>By changing the Root logger’s level to <code>DEBUG</code>, developers
can reduce the amount of output.</p>
+<p><a href="https://logback.qos.ch">Logback</a> is another logging
implementation for the <a href="https://www.slf4j.org">SLF4J</a> logging API,
just like Log4j Core is a logging implementation for the <a href="api.html"
class="xref page">Log4j API</a>.
+Using Log4j-to-SLF4J bridge, Logback can be <a
href="installation.html#impl-logback" class="xref page">configured to consume
Log4j API</a>.</p>
+</div>
+<div class="paragraph">
+<p>Below we will use a combination of <code>EvaluatorFilter</code>,
<code>MarkerFilter</code>, and <code>OnMarkerEvaluator</code> in Logback to
adapt the formatting pattern of messages written to console based on flow
tracing specific markers:</p>
+</div>
+<div class="listingblock">
+<div class="title"><a
href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examplesmanual/flowtracing/logback.xml">logback.xml</a>
snippet</div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs"
data-lang="xml"><turboFilter class="MarkerFilter"><i class="conum"
data-value="1"></i><b>(1)</b>
+ <Marker>FLOW</Marker>
+ <OnMatch>ACCEPT</OnMatch>
+</turboFilter>
+
+<appender name="CONSOLE_DEFAULT" class="ConsoleAppender">
+ <filter class="EvaluatorFilter"><i class="conum"
data-value="2"></i><b>(2)</b>
+ <evaluator class="OnMarkerEvaluator">
+ <marker>ENTER</marker>
+ <marker>EXIT</marker>
+ </evaluator>
+ <onMismatch>ACCEPT</onMismatch>
+ <onMatch>DENY</onMatch>
+ </filter>
+ <encoder class="PatternLayoutEncoder"><i class="conum"
data-value="3"></i><b>(3)</b>
+ <pattern><![CDATA[%d %5p [%t] %c{1} -- %m%n]]></pattern>
+ </encoder>
+</appender>
+
+<appender name="CONSOLE_FLOW_ENTER" class="ConsoleAppender">
+ <filter class="EvaluatorFilter"><i class="conum"
data-value="4"></i><b>(4)</b>
+ <evaluator class="OnMarkerEvaluator">
+ <marker>ENTER</marker>
+ </evaluator>
+ <onMismatch>DENY</onMismatch>
+ <onMatch>ACCEPT</onMatch>
+ </filter>
+ <encoder class="PatternLayoutEncoder"><i class="conum"
data-value="5"></i><b>(5)</b>
+ <pattern><![CDATA[%d %5p [%t] %c{1} =>
%m%n]]></pattern>
+ </encoder>
+</appender>
+
+<appender name="CONSOLE_FLOW_EXIT" class="ConsoleAppender">
+ <filter class="EvaluatorFilter"><i class="conum"
data-value="6"></i><b>(6)</b>
+ <evaluator class="OnMarkerEvaluator">
+ <marker>EXIT</marker>
+ </evaluator>
+ <onMismatch>DENY</onMismatch>
+ <onMatch>ACCEPT</onMatch>
+ </filter>
+ <encoder class="PatternLayoutEncoder"><i class="conum"
data-value="7"></i><b>(7)</b>
+ <pattern><![CDATA[%d %5p [%t] %c{1} <=
%m%n]]></pattern>
+ </encoder>
+</appender>
+
+<root level="WARN">
+ <appender-ref ref="CONSOLE_DEFAULT"/>
+ <appender-ref ref="CONSOLE_FLOW_ENTER"/>
+ <appender-ref ref="CONSOLE_FLOW_EXIT"/>
+</root></code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>Accepting log events marked with <code>FLOW</code> regardless of their
level</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>In <code>CONSOLE_DEFAULT</code> appender, excluding all log events marked
with <code>ENTER</code> and <code>EXIT</code></td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>In <code>CONSOLE_DEFAULT</code> appender, log event messages will be
formatted with a <code>-</code> prefix</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="4"></i><b>4</b></td>
+<td>In <code>CONSOLE_FLOW_ENTER</code> appender, accepting only log events
marked with <code>ENTER</code></td>
+</tr>
+<tr>
+<td><i class="conum" data-value="5"></i><b>5</b></td>
+<td>In <code>CONSOLE_FLOW_ENTER</code> appender, log event messages will be
formatted with a <code>→</code> prefix</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="6"></i><b>6</b></td>
+<td>In <code>CONSOLE_FLOW_EXIT</code> appender, accepting only log events
marked with <code>EXIT</code></td>
+</tr>
+<tr>
+<td><i class="conum" data-value="7"></i><b>7</b></td>
+<td>In <code>CONSOLE_FLOW_EXIT</code> appender, log event messages will be
formatted with a <code>←</code> prefix</td>
+</tr>
+</table>
+</div>
</div>
</div>
</div>
diff --git a/manual/getting-started.html b/manual/getting-started.html
index 18e2a49fc4..748c0cb768 100644
--- a/manual/getting-started.html
+++ b/manual/getting-started.html
@@ -436,7 +436,7 @@ Let’s briefly explain these concepts:</p>
<p>A logging API is an interface your code or your dependencies directly logs
against.
It is required at compile-time.
It is implementation agnostic to ensure that your application can write logs,
but is not tied to a specific logging implementation.
-Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
+Log4j API, <a href="https://www.slf4j.org">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
</dd>
</dl>
</div>
@@ -445,7 +445,7 @@ Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.ora
<dt class="hdlist1">Logging implementation</dt>
<dd>
<p>A logging implementation is only required at runtime and can be changed
without the need to recompile your software.
-Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch/">Logback</a> are the most
well-known logging implementations.</p>
+Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch">Logback</a> are the most
well-known logging implementations.</p>
</dd>
</dl>
</div>
@@ -848,7 +848,7 @@ This is the most secure way to format log events and should
be preferred over th
<div class="paragraph">
<p>If your application has (direct or transitive!) dependencies that use
another logging API, you need to <a href="#logging-bridge">bridge</a> that to
Log4j.
This way the foreign logging API calls will effectively be consumed by Log4j
too.
-<a href="https://www.slf4j.org/">SLF4J</a> is another logging API used pretty
common in the wild.
+<a href="https://www.slf4j.org">SLF4J</a> is another logging API used pretty
common in the wild.
(<a href="installation.html" class="xref page">Installation</a> covers all
supported foreign APIs.)
Let’s see how you can use the <code>log4j-slf4j2-impl</code> bridge to
support SLF4J:</p>
</div>
@@ -1086,7 +1086,7 @@ Start with adding the <code>log4j-core</code> dependency
in <strong>test</strong
<div class="paragraph">
<p>If your library has (direct or transitive!) dependencies that use another
logging API, you need to <a href="#logging-bridge">bridge</a> that to Log4j.
This way the foreign logging API calls will effectively be consumed by Log4j
too.
-<a href="https://www.slf4j.org/">SLF4J</a> is another logging API used pretty
common in the wild.
+<a href="https://www.slf4j.org">SLF4J</a> is another logging API used pretty
common in the wild.
(<a href="installation.html" class="xref page">Installation</a> covers all
supported foreign APIs.)
Let’s see how you can use the <code>log4j-slf4j2-impl</code> bridge to
support SLF4J:</p>
</div>
diff --git a/manual/installation.html b/manual/installation.html
index 40f3bf4ab0..7f08a14c98 100644
--- a/manual/installation.html
+++ b/manual/installation.html
@@ -378,7 +378,7 @@ See <a href="#impl-core">Installing Log4j Core</a>.</p>
<p>A logging API is an interface your code or your dependencies directly logs
against.
It is required at compile-time.
It is implementation agnostic to ensure that your application can write logs,
but is not tied to a specific logging implementation.
-Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
+Log4j API, <a href="https://www.slf4j.org">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
</dd>
</dl>
</div>
@@ -387,7 +387,7 @@ Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.ora
<dt class="hdlist1">Logging implementation</dt>
<dd>
<p>A logging implementation is only required at runtime and can be changed
without the need to recompile your software.
-Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch/">Logback</a> are the most
well-known logging implementations.</p>
+Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch">Logback</a> are the most
well-known logging implementations.</p>
</dd>
</dl>
</div>
@@ -627,9 +627,9 @@ See <a href="#impl-jul">Installing JUL</a> for the
installation instructions.</p
</dd>
<dt class="hdlist1"><code>log4j-to-slf4j</code></dt>
<dd>
-<p>The bridge that translates Log4j API calls to <a
href="https://www.slf4j.org/">SLF4J</a>.
+<p>The bridge that translates Log4j API calls to <a
href="https://www.slf4j.org">SLF4J</a>.
Since currently only
-<a href="https://logback.qos.ch/">Logback</a> implements SLF4J natively, refer
to <a href="#impl-logback">Installing Logback</a> for the installation
instructions.</p>
+<a href="https://logback.qos.ch">Logback</a> implements SLF4J natively, refer
to <a href="#impl-logback">Installing Logback</a> for the installation
instructions.</p>
</dd>
</dl>
</div>
@@ -777,7 +777,7 @@ And if so, which ones?</strong></p>
<div class="sect4">
<h5 id="impl-core-bridge-slf4j"><a class="anchor"
href="#impl-core-bridge-slf4j"></a>Installing SLF4J-to-Log4j bridge</h5>
<div class="paragraph">
-<p>You can translate <a href="https://www.slf4j.org/">SLF4J</a> calls to Log4j
API using the <code>log4j-slf4j2-impl</code> artifact:</p>
+<p>You can translate <a href="https://www.slf4j.org">SLF4J</a> calls to Log4j
API using the <code>log4j-slf4j2-impl</code> artifact:</p>
</div>
<div id="_tabs_5" class="openblock tabs is-sync is-loading">
<div class="content">
@@ -1332,7 +1332,7 @@ runtimeOnly 'org.slf4j:slf4j-jdk14:2.0.13' //
SLF4J-to-JUL bridge</code></pre>
<div class="sect2">
<h3 id="impl-logback"><a class="anchor" href="#impl-logback"></a>Installing
Logback</h3>
<div class="paragraph">
-<p>To install <a href="https://logback.qos.ch/">Logback</a> as the logging
implementation, you only need to add a Log4j-to-SLF4J bridge:</p>
+<p>To install <a href="https://logback.qos.ch">Logback</a> as the logging
implementation, you only need to add a Log4j-to-SLF4J bridge:</p>
</div>
<div id="_tabs_15" class="openblock tabs is-sync is-loading">
<div class="content">
diff --git a/manual/pattern-layout.html b/manual/pattern-layout.html
index 9f50d7a0e8..c3a3a84087 100644
--- a/manual/pattern-layout.html
+++ b/manual/pattern-layout.html
@@ -1507,15 +1507,11 @@ See <a href="#ansi-modifiers">Style modifiers</a> for
the syntax of <code><st
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>STYLE=default</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Sets the
default style, which is equivalent to the following sequence of directives:
-<code>FATAL=bold red, ERROR=bold red, WARN=yellow, INFO=green, DEBUG=cyan,
TRACE=black</code>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Sets the
default style, which is equivalent to the following sequence of directives:
<code>FATAL=bold red, ERROR=bold red, WARN=yellow, INFO=green, DEBUG=cyan,
TRACE=black</code>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>STYLE=logback</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Applies
the style used by
-<a href="https://logback.qos.ch/manual/layouts.html#coloring">Logback’s
<code>%highlight</code> converter</a>,
-which is equivalent to the following sequence of directives:
-<code>FATAL=blink bold red, ERROR=bold red, WARN=red, INFO=blue, DEBUG=normal,
TRACE=normal</code>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Applies
the style used by <a
href="https://logback.qos.ch/manual/layouts.html#coloring">Logback’s
<code>%highlight</code> converter</a>, which is equivalent to the following
sequence of directives: <code>FATAL=blink bold red, ERROR=bold red, WARN=red,
INFO=blue, DEBUG=normal, TRACE=normal</code>.</p></td>
</tr>
</tbody>
</table>
diff --git a/manual/systemproperties.html b/manual/systemproperties.html
index 52f69ece03..1616eaafe3 100644
--- a/manual/systemproperties.html
+++ b/manual/systemproperties.html
@@ -1946,7 +1946,7 @@ See <a href="webapp.html#use-jndi-context-selector"
class="xref page">Web applic
<p>These configuration properties are only used by the Log4j Core and <a
href="simple-logger.html" class="xref page">Simple Logger</a> implementations
of Log4j API.</p>
</div>
<div class="paragraph">
-<p>The <code>log4j-to-slf4j</code> logging bridge delegates
<code>ThreadContext</code> calls to the SLF4J <a
href="https://slf4j.org/api/org/slf4j/MDC.html">MDC</a> class.</p>
+<p>The <code>log4j-to-slf4j</code> logging bridge delegates
<code>ThreadContext</code> calls to <a
href="https://www.slf4j.org/api/org/slf4j/MDC.html">the SLF4J <code>MDC</code>
class</a>.</p>
</div>
<div class="paragraph">
<p>The <code>log4j-to-jul</code> logging bridge ignores all
<code>ThreadContext</code> method calls.</p>
diff --git a/migrate-from-logback.html b/migrate-from-logback.html
index fc2c26d0ab..5a5b5cd670 100644
--- a/migrate-from-logback.html
+++ b/migrate-from-logback.html
@@ -321,7 +321,7 @@
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
-<p><a href="https://logback.qos.ch/">Logback</a> is a logging implementation
for the <a href="https://www.slf4j.org/">SLF4J</a> logging API, just like Log4j
Core is a logging implementation for the <a href="manual/api.html" class="xref
page">Log4j API</a>.
+<p><a href="https://logback.qos.ch">Logback</a> is a logging implementation
for the <a href="https://www.slf4j.org">SLF4J</a> logging API, just like Log4j
Core is a logging implementation for the <a href="manual/api.html" class="xref
page">Log4j API</a>.
In this page we will guide you through migrating from Logback to Log4j Core as
your logging implementation.</p>
</div>
<div class="admonitionblock tip">
@@ -349,7 +349,7 @@ Please refer to <a href="migrate-from-slf4j.html"
class="xref page">Migrating fr
<p>A logging API is an interface your code or your dependencies directly logs
against.
It is required at compile-time.
It is implementation agnostic to ensure that your application can write logs,
but is not tied to a specific logging implementation.
-Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
+Log4j API, <a href="https://www.slf4j.org">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
</dd>
</dl>
</div>
@@ -358,7 +358,7 @@ Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.ora
<dt class="hdlist1">Logging implementation</dt>
<dd>
<p>A logging implementation is only required at runtime and can be changed
without the need to recompile your software.
-Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch/">Logback</a> are the most
well-known logging implementations.</p>
+Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch">Logback</a> are the most
well-known logging implementations.</p>
</dd>
</dl>
</div>
diff --git a/migrate-from-slf4j.html b/migrate-from-slf4j.html
index d43568d2a9..78a0cfb3c5 100644
--- a/migrate-from-slf4j.html
+++ b/migrate-from-slf4j.html
@@ -321,7 +321,7 @@
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
-<p><a href="https://www.slf4j.org/">SLF4J</a> is a logging API whose reference
implementation is <a href="https://logback.qos.ch/">Logback</a>, just like <a
href="manual/api.html" class="xref page">Log4j API</a> is a logging API whose
reference implementation is Log4j Core.
+<p><a href="https://www.slf4j.org">SLF4J</a> is a logging API whose reference
implementation is <a href="https://logback.qos.ch">Logback</a>, just like <a
href="manual/api.html" class="xref page">Log4j API</a> is a logging API whose
reference implementation is Log4j Core.
In this page we will guide you through migrating from SLF4J to Log4j API as
your logging API.</p>
</div>
<div class="admonitionblock tip">
@@ -349,7 +349,7 @@ Please refer to <a href="migrate-from-logback.html"
class="xref page">Migrating
<p>A logging API is an interface your code or your dependencies directly logs
against.
It is required at compile-time.
It is implementation agnostic to ensure that your application can write logs,
but is not tied to a specific logging implementation.
-Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
+Log4j API, <a href="https://www.slf4j.org">SLF4J</a>, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a
href="https://commons.apache.org/proper/commons-logging/">JCL (Apache Commons
Logging)</a>, <a href="https://openjdk.org/jeps/264">JPL (Java Platform
Logging)</a> and <a href="https://github.com/jboss-logging/jboss-logging">JBoss
Logging</a> are major logging APIs.</p>
</dd>
</dl>
</div>
@@ -358,7 +358,7 @@ Log4j API, <a href="https://www.slf4j.org/">SLF4J</a>, <a
href="https://docs.ora
<dt class="hdlist1">Logging implementation</dt>
<dd>
<p>A logging implementation is only required at runtime and can be changed
without the need to recompile your software.
-Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch/">Logback</a> are the most
well-known logging implementations.</p>
+Log4j Core, <a
href="https://docs.oracle.com/en/java/javase/8/core/java-logging-overview.html">JUL
(Java Logging)</a>, <a href="https://logback.qos.ch">Logback</a> are the most
well-known logging implementations.</p>
</dd>
</dl>
</div>
diff --git a/plugin-reference.html b/plugin-reference.html
index 2445c222e6..1bf88da3e6 100644
--- a/plugin-reference.html
+++ b/plugin-reference.html
@@ -1444,7 +1444,7 @@ Originally developed by Ceki Glc and Anders
Kristensen.</p>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>header</code></p></td>
-<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>boolean?</code></p></td>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>String?</code></p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
</tr>
@@ -7405,7 +7405,7 @@ However, configurations set up for the 2.0 version of the
JMS appenders will sti
<tbody>
<tr>
<td class="tableblock halign-left valign-top"></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a
href="#org-apache-logging-log4j_log4j-mongodb_org-apache-logging-log4j-core-appender-nosql-NoSqlProvider">NoSqlProvider</a>?</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a
href="#org-apache-logging-log4j_log4j-couchdb_org-apache-logging-log4j-core-appender-nosql-NoSqlProvider">NoSqlProvider</a>?</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div
class="paragraph">
<p>Sets the provider.</p>
</div></div></td>
@@ -16127,10 +16127,10 @@ Supports Lookup expressions.</p>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>boolean?</code></p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><div class="content"><div
class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
</div>
<div class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
</div></div></td>
</tr>
<tr>
@@ -17426,10 +17426,10 @@ Supports Lookup expressions.</p>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>boolean?</code></p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><div class="content"><div
class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
</div>
<div class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
</div></div></td>
</tr>
<tr>
@@ -17625,10 +17625,10 @@ Supports Lookup expressions.</p>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>boolean?</code></p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><div class="content"><div
class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
</div>
<div class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
</div></div></td>
</tr>
<tr>
@@ -21770,6 +21770,37 @@ toString(), or to output the value of a specific key
within the property bundle
<div class="sect2">
<h3 id="org-apache-logging-log4j_log4j-couchdb"><a class="anchor"
href="#org-apache-logging-log4j_log4j-couchdb"></a><code>log4j-couchdb</code></h3>
<div class="sect3">
+<h4
id="org-apache-logging-log4j_log4j-couchdb_org-apache-logging-log4j-core-appender-nosql-NoSqlProvider"><a
class="anchor"
href="#org-apache-logging-log4j_log4j-couchdb_org-apache-logging-log4j-core-appender-nosql-NoSqlProvider"></a><code>NoSqlProvider</code></h4>
+<div class="dlist">
+<dl>
+<dt class="hdlist1">Class</dt>
+<dd>
+<p><code>org.apache.logging.log4j.core.appender.nosql.NoSqlProvider</code></p>
+</dd>
+<dt class="hdlist1">Provider</dt>
+<dd>
+<p><code>org.apache.logging.log4j:log4j-couchdb</code></p>
+</dd>
+</dl>
+</div>
+<div class="sect4">
+<h5
id="org-apache-logging-log4j_log4j-couchdb_org-apache-logging-log4j-core-appender-nosql-NoSqlProvider_implementations"><a
class="anchor"
href="#org-apache-logging-log4j_log4j-couchdb_org-apache-logging-log4j-core-appender-nosql-NoSqlProvider_implementations"></a>Known
implementations</h5>
+<div class="ulist">
+<ul>
+<li>
+<p><a
href="#org-apache-logging-log4j_log4j-couchdb_org-apache-logging-log4j-couchdb-CouchDbProvider">CouchDbProvider</a></p>
+</li>
+<li>
+<p><a
href="#org-apache-logging-log4j_log4j-mongodb_org-apache-logging-log4j-mongodb-MongoDbProvider">MongoDbProvider</a></p>
+</li>
+<li>
+<p><a
href="#org-apache-logging-log4j_log4j-mongodb4_org-apache-logging-log4j-mongodb4-MongoDb4Provider">MongoDb4Provider</a></p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect3">
<h4
id="org-apache-logging-log4j_log4j-couchdb_org-apache-logging-log4j-couchdb-CouchDbProvider"><a
class="anchor"
href="#org-apache-logging-log4j_log4j-couchdb_org-apache-logging-log4j-couchdb-CouchDbProvider"></a>CouchDB</h4>
<div class="dlist">
<dl>
@@ -23904,37 +23935,6 @@ Minimum is 1000.</p>
<div class="sect2">
<h3 id="org-apache-logging-log4j_log4j-mongodb"><a class="anchor"
href="#org-apache-logging-log4j_log4j-mongodb"></a><code>log4j-mongodb</code></h3>
<div class="sect3">
-<h4
id="org-apache-logging-log4j_log4j-mongodb_org-apache-logging-log4j-core-appender-nosql-NoSqlProvider"><a
class="anchor"
href="#org-apache-logging-log4j_log4j-mongodb_org-apache-logging-log4j-core-appender-nosql-NoSqlProvider"></a><code>NoSqlProvider</code></h4>
-<div class="dlist">
-<dl>
-<dt class="hdlist1">Class</dt>
-<dd>
-<p><code>org.apache.logging.log4j.core.appender.nosql.NoSqlProvider</code></p>
-</dd>
-<dt class="hdlist1">Provider</dt>
-<dd>
-<p><code>org.apache.logging.log4j:log4j-mongodb</code></p>
-</dd>
-</dl>
-</div>
-<div class="sect4">
-<h5
id="org-apache-logging-log4j_log4j-mongodb_org-apache-logging-log4j-core-appender-nosql-NoSqlProvider_implementations"><a
class="anchor"
href="#org-apache-logging-log4j_log4j-mongodb_org-apache-logging-log4j-core-appender-nosql-NoSqlProvider_implementations"></a>Known
implementations</h5>
-<div class="ulist">
-<ul>
-<li>
-<p><a
href="#org-apache-logging-log4j_log4j-couchdb_org-apache-logging-log4j-couchdb-CouchDbProvider">CouchDbProvider</a></p>
-</li>
-<li>
-<p><a
href="#org-apache-logging-log4j_log4j-mongodb_org-apache-logging-log4j-mongodb-MongoDbProvider">MongoDbProvider</a></p>
-</li>
-<li>
-<p><a
href="#org-apache-logging-log4j_log4j-mongodb4_org-apache-logging-log4j-mongodb4-MongoDb4Provider">MongoDb4Provider</a></p>
-</li>
-</ul>
-</div>
-</div>
-</div>
-<div class="sect3">
<h4
id="org-apache-logging-log4j_log4j-mongodb_org-apache-logging-log4j-mongodb-MongoDbProvider"><a
class="anchor"
href="#org-apache-logging-log4j_log4j-mongodb_org-apache-logging-log4j-mongodb-MongoDbProvider"></a>MongoDb</h4>
<div class="dlist">
<dl>
diff --git a/release-notes.html b/release-notes.html
index 17d16c82eb..c24556ea37 100644
--- a/release-notes.html
+++ b/release-notes.html
@@ -492,7 +492,10 @@
<p>Update <code>org.apache.logging:logging-parent</code> to version `` (<a
href="https://github.com/apache/logging-log4j2/pull/2600">2600</a>)</p>
</li>
<li>
-<p>Update <code>org.apache.maven:maven-core</code> to version
<code>3.9.7</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2616">2616</a>)</p>
+<p>Update <code>org.apache.maven:maven-core</code> to version
<code>3.9.8</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2668">2668</a>)</p>
+</li>
+<li>
+<p>Update <code>org.apache.maven.surefire:surefire-junit47</code> to version
<code>3.3.0</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2669">2669</a>)</p>
</li>
<li>
<p>Update <code>org.assertj:assertj-core</code> to version <code>3.26.0</code>
(<a href="https://github.com/apache/logging-log4j2/pull/2618">2618</a>)</p>
diff --git a/sitemap.xml b/sitemap.xml
index 138f946335..58d7e067d0 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -2,242 +2,242 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://logging.apache.org/log4j/2.x/development.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/download.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/faq.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/hibernate.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/index.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/javadoc.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-appserver.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-cassandra.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-couchdb.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-docker.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-flume-ng.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-iostreams.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-jakarta-web.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-spring-boot.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-spring-cloud-config-client.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-spring-cloud-config.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-taglib.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-web.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/api.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/appenders.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/architecture.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/async.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/cloud.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/compatibility.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/config-intro.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/configuration.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/customconfig.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/customloglevels.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/eventlogging.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/extending.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/filters.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/flowtracing.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/garbagefree.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/getting-started.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/index.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/installation.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/jmx.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/json-template-layout.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/layouts.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/logbuilder.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/logsep.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/lookups.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/markers.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/messages.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/migration.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/pattern-layout.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/performance.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/plugins.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/resource-logger.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/scoped-context.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/scripts.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/simple-logger.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/status-logger.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/systemproperties.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/thread-context.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/webapp.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/migrate-from-logback.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/migrate-from-slf4j.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/plugin-reference.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/release-notes.html</loc>
-<lastmod>2024-06-18T12:54:37.687Z</lastmod>
+<lastmod>2024-06-19T11:54:53.525Z</lastmod>
</url>
</urlset>