This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch main-site-stg-out
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/main-site-stg-out by this push:
new a758c7c23f Add website content generated from
`de60cffac9db967869885318db860452760b149d`
a758c7c23f is described below
commit a758c7c23f8c4cfda62cf72678328a5bd3d3ce46
Author: ASF Logging Services RM <[email protected]>
AuthorDate: Wed Jun 19 15:04:13 2024 +0000
Add website content generated from
`de60cffac9db967869885318db860452760b149d`
---
hibernate.html | 4 +-
manual/api.html | 4 +-
manual/architecture.html | 4 +-
manual/async.html | 2 +-
manual/garbagefree.html | 4 +-
manual/getting-started.html | 8 +-
manual/installation.html | 12 +-
manual/json-template-layout.html | 254 ++++++++++++++++++++++++++++++++++++---
manual/layouts.html | 27 +++--
manual/lookups.html | 2 +-
manual/pattern-layout.html | 89 +++++++++++---
manual/systemproperties.html | 26 +++-
migrate-from-logback.html | 6 +-
migrate-from-slf4j.html | 6 +-
plugin-reference.html | 7 +-
sitemap.xml | 96 +++++++--------
16 files changed, 427 insertions(+), 124 deletions(-)
diff --git a/hibernate.html b/hibernate.html
index 58d8c3fd03..fa84c870a5 100644
--- a/hibernate.html
+++ b/hibernate.html
@@ -290,7 +290,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/17/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/17/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>
@@ -299,7 +299,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/17/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/17/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 7e5d0d67bf..abb169ae82 100644
--- a/manual/api.html
+++ b/manual/api.html
@@ -286,7 +286,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/17/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/17/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>
@@ -295,7 +295,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/17/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/17/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 23cbc4c9c9..048859cdad 100644
--- a/manual/architecture.html
+++ b/manual/architecture.html
@@ -466,8 +466,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/async.html b/manual/async.html
index 0efd9c46fd..75bc0ba351 100644
--- a/manual/async.html
+++ b/manual/async.html
@@ -769,7 +769,7 @@ or predefined constant</p></td>
</table>
<div class="paragraph">
<p>Determines the
-<a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/async/AsyncQueueFullPolicy.html">AsyncQueueFullPolicy</a>
+<a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/async/AsyncQueueFullPolicy.html"><code>AsyncQueueFullPolicy</code></a>
to use when the underlying async component cannot keep up with the logging
rate and the queue is filling up.</p>
</div>
<div class="paragraph">
diff --git a/manual/garbagefree.html b/manual/garbagefree.html
index 0629613be3..9bbb7bc1e3 100644
--- a/manual/garbagefree.html
+++ b/manual/garbagefree.html
@@ -389,7 +389,7 @@ If not for yours, keep on reading.</p>
<p><a href="#core-properties">configure it using properties</a>,</p>
</li>
<li>
-<p>and employ garbage-free <a
href="#Layouts[layouts]">xref:Appenders[appenders], and
xref:#Filters,filters</a>.</p>
+<p>and employ garbage-free <a href="#Layouts">layouts</a>, <a
href="#Appenders">appenders</a>, and <a href="#Filters">filters</a>.</p>
</li>
</ul>
</div>
@@ -1183,7 +1183,7 @@ The <code>Unbox.box(primitive)</code> methods write
directly into a <code>String
<p>The <code>ThreadContext</code> stack (aka. NDC) is not garbage-free.</p>
</li>
<li>
-<p><a href="https://logging.apache.org/log4j/2.x/manual/scoped-context.adoc"
class="bare">https://logging.apache.org/log4j/2.x/manual/scoped-context.adoc</a>
is not garbage-free.</p>
+<p><a
href="https://logging.apache.org/log4j/2.x/manual/scoped-context.html">Scoped
Context</a> is not garbage-free.</p>
</li>
<li>
<p>Logging very large messages (i.e., more than <a
href="#log4j.gc.maxReusableMsgSize"><code>log4j.gc.maxReusableMsgSize</code></a>
characters, which defaults to 518), when all loggers are <a href="async.html"
class="xref page">asynchronous loggers</a>, will cause the internal
<code>StringBuilder</code> in the
diff --git a/manual/getting-started.html b/manual/getting-started.html
index 972817263b..70ca50dafb 100644
--- a/manual/getting-started.html
+++ b/manual/getting-started.html
@@ -391,7 +391,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/17/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/17/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>
@@ -400,7 +400,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/17/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/17/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>
@@ -803,7 +803,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>
@@ -1041,7 +1041,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 712a47494d..03e2d491c0 100644
--- a/manual/installation.html
+++ b/manual/installation.html
@@ -333,7 +333,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/17/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/17/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/17/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/17/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>
@@ -582,9 +582,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>
@@ -732,7 +732,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">
@@ -1301,7 +1301,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/json-template-layout.html b/manual/json-template-layout.html
index 5f25197915..ede1598b95 100644
--- a/manual/json-template-layout.html
+++ b/manual/json-template-layout.html
@@ -278,7 +278,7 @@
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
-<p><code>JsonTemplateLayout</code> is a customizable, <a
href="#performance">efficient</a>, and
xref:#faq-garbage-free,garbage-free>> JSON generating layout.
+<p><code>JsonTemplateLayout</code> is a customizable, <a
href="#performance">efficient</a>, and <a
href="#faq-garbage-free">garbage-free</a> JSON generating layout.
It encodes <code>LogEvent</code>s according to the structure described by the
JSON template provided.
In a nutshell, it shines with its</p>
</div>
@@ -887,7 +887,7 @@ That is,</p>
"key00002": "value00002",
"key00003": "value00003",
// ...
- "key16384": "value16384",
+ "key16384": "value16384"
}
}</code></pre>
</div>
@@ -987,7 +987,7 @@ Accepted values are:</p>
</div>
<div id="_tabs_3_xml--panel" class="tabpanel" aria-labelledby="_tabs_3_xml">
<div class="listingblock">
-<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/eventTemplateAdditionalField/log4j2.xml"><code>log4j2.xml</code></a></div>
+<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/event-template-additional-field/log4j2.xml"><code>log4j2.xml</code></a></div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-xml hljs"
data-lang="xml"><JsonTemplateLayout
eventTemplateUri="classpath:GelfLayout.json">
<EventTemplateAdditionalField
@@ -1011,7 +1011,7 @@ Accepted values are:</p>
</div>
<div id="_tabs_3_json--panel" class="tabpanel" aria-labelledby="_tabs_3_json">
<div class="listingblock">
-<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/eventTemplateAdditionalField/log4j2.json"><code>log4j2.json</code></a></div>
+<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/event-template-additional-field/log4j2.json"><code>log4j2.json</code></a></div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-json hljs"
data-lang="json">"JsonTemplateLayout": {
"eventTemplateUri": "classpath:GelfLayout.json",
@@ -1042,7 +1042,7 @@ Accepted values are:</p>
</div>
<div id="_tabs_3_yaml--panel" class="tabpanel" aria-labelledby="_tabs_3_yaml">
<div class="listingblock">
-<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/eventTemplateAdditionalField/log4j2.yaml"><code>log4j2.yaml</code></a></div>
+<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/event-template-additional-field/log4j2.yaml"><code>log4j2.yaml</code></a></div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-xml hljs"
data-lang="xml">JsonTemplateLayout:
eventTemplateUri: "classpath:GelfLayout.json"
@@ -1063,7 +1063,7 @@ Accepted values are:</p>
</div>
<div id="_tabs_3_properties--panel" class="tabpanel"
aria-labelledby="_tabs_3_properties">
<div class="listingblock">
-<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/eventTemplateAdditionalField/log4j2.properties"><code>log4j2.properties</code></a></div>
+<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/event-template-additional-field/log4j2.properties"><code>log4j2.properties</code></a></div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-xml hljs"
data-lang="xml">appender.0.layout.type = JsonTemplateLayout
appender.0.layout.eventTemplateUri = classpath:GelfLayout.json
@@ -2042,6 +2042,9 @@ stackTraceEnabled = "stackTraceEnabled" ->
boolean</code></pre>
</div>
</div>
<div class="paragraph">
+<p>Unlike providing the <code>pattern</code> attribute to Pattern Layout in a
configuration file, <a href="#faq-lookups">property substitutions</a> found in
the <code>pattern</code> will <em>not</em> be resolved.</p>
+</div>
+<div class="paragraph">
<p>The default value of <code>stackTraceEnabled</code> is inherited from the
parent JSON Template Layout.</p>
</div>
<div class="admonitionblock note">
@@ -2564,6 +2567,228 @@ The stack trace template used by these event template
resolvers to encode <code>
</div>
</div>
<div class="sect1">
+<h2 id="faq-lookups"><a class="anchor" href="#faq-lookups"></a>Property
substitution</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Property substitutions (e.g., <code>${myProperty}</code>), including <a
href="lookups.html" class="xref page">lookups</a> (e.g.,
<code>${java:version}</code>, <code>${env:USER}</code>,
<code>${date:MM-dd-yyyy}</code>), are supported, but extra care needs to be
taken.
+<strong>We strongly advise you to carefully read <a
href="configuration.html#property-substitution" class="xref page">the
configuration manual</a></strong> before using them.</p>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p><a href="lookups.html" class="xref page">Lookups</a> are intended as a very
generic, convenience utility to perform string interpolation for, in
particular, configuration files and components (e.g., layouts) lacking this
mechanism.
+<strong>JSON Template Layout has a rich template resolver collection, and you
should always prefer it whenever possible over lookups.</strong></p>
+</div>
+<details>
+<summary class="title">Which resolvers can I use to replace lookups?</summary>
+<div class="content">
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Instead of this lookup</th>
+<th class="tableblock halign-left valign-top">Use this resolver</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="lookups.html#ContextMapLookup" class="xref page">Context Map
Lookup</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="#event-template-resolver-mdc"><code>mdc</code></a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="lookups.html#DateLookup" class="xref page">Date Lookup</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="#event-template-resolver-timestamp"><code>timestamp</code></a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="lookups.html#EventLookup" class="xref page">Event Lookup</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="#event-template-resolver-exception"><code>exception</code></a><br>
+<a href="#event-template-resolver-level"><code>level</code></a><br>
+<a href="#event-template-resolver-logger"><code>logger</code></a><br>
+<a href="#event-template-resolver-marker"><code>marker</code></a><br>
+<a href="#event-template-resolver-message"><code>message</code></a><br>
+<a href="#event-template-resolver-thread"><code>thread</code></a><br>
+<a
href="#event-template-resolver-timestamp"><code>timestamp</code></a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="lookups.html#LowerLookup" class="xref page">Lower Lookup</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="#event-template-resolver-caseConverter"><code>caseConverter</code></a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="lookups.html#AppMainArgsLookup" class="xref page">Main Arguments
Lookup</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="#event-template-resolver-main"><code>main</code></a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="lookups.html#MapLookup" class="xref page">Map Lookup</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="#event-template-resolver-map"><code>map</code></a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="lookups.html#marker-lookup" class="xref page">Marker Lookup</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="#event-template-resolver-marker"><code>marker</code></a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="lookups.html#UpperLookup" class="xref page">Upper Lookup</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a
href="#event-template-resolver-caseConverter"><code>caseConverter</code></a></p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</details>
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="property-substitution-in-template"><a class="anchor"
href="#property-substitution-in-template"></a>Property substitution in event
templates</h3>
+<div class="paragraph">
+<p>JSON Template Layout performs property substitution in string literals in
templates, except if they are located in <em>configuration object of
resolvers</em>.
+Consider the following event template file provided using <a
href="#plugin-attr-eventTemplateUri">the <code>eventTemplateUri</code>
attribute</a>:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs"
data-lang="json">{
+ "java-version": "${java:version}", <i class="conum"
data-value="1"></i><b>(1)</b>
+ "pid": {
+ "$resolver": "pattern",
+ "pattern": "${env:NO_SUCH_KEY:-%pid}" <i class="conum"
data-value="2"></i><b>(2)</b>
+ }
+}</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>This works. <code>${java:version}</code> will be replaced with the
corresponding value.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>This won’t work! That is, <code>${env:NO_SUCH_KEY:-%pid}</code>
literal will not get substituted, since it is located in a <em>configuration
object of a resolver</em>.</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="property-substitution-in-config"><a class="anchor"
href="#property-substitution-in-config"></a>Property substitution in
configuration files</h3>
+<div class="paragraph">
+<p>If the very same event template <a
href="#property-substitution-in-template">shared above</a> is inlined in a
configuration file using <a href="#plugin-attr-eventTemplate">the
<code>eventTemplate</code> attribute</a> or <a
href="#plugin-element-EventTemplateAdditionalField">additional event template
fields</a>, then all substitutions will be replaced, once, at
configuration-time.
+This has nothing to do with the JSON Template Layout, but the substitution
performed by the configuration mechanism when the configuration is read.
+Consider the following example:</p>
+</div>
+<div id="_tabs_4" class="openblock tabs is-sync is-loading">
+<div class="content">
+<div class="ulist tablist">
+<ul>
+<li id="_tabs_4_xml" class="tab">
+<p>XML</p>
+</li>
+<li id="_tabs_4_json" class="tab">
+<p>JSON</p>
+</li>
+<li id="_tabs_4_yaml" class="tab">
+<p>YAML</p>
+</li>
+<li id="_tabs_4_properties" class="tab">
+<p>Properties</p>
+</li>
+</ul>
+</div>
+<div id="_tabs_4_xml--panel" class="tabpanel" aria-labelledby="_tabs_4_xml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/property-substitution/log4j2.xml"><code>log4j2.xml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs"
data-lang="xml"><JsonTemplateLayout eventTemplate='{"instant": {"$resolver":
"pattern", "pattern": "${env:LOG4J_DATE_PATTERN:-%d}"}}'> <i class="conum"
data-value="1"></i><b>(1)</b>
+ <EventTemplateAdditionalField
+ key="message"
+ format="JSON"
+ value='{"$resolver": "pattern", "pattern":
"${env:LOG4J_MESSAGE_PATTERN:-%m}"}'/> <i class="conum"
data-value="2"></i><b>(2)</b>
+</JsonTemplateLayout></code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_4_json--panel" class="tabpanel" aria-labelledby="_tabs_4_json">
+<div class="listingblock">
+<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/property-substitution/log4j2.json"><code>log4j2.json</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs"
data-lang="json">"JsonTemplateLayout": {
+ "eventTemplate": "{\"instant\": {\"$resolver\": \"pattern\", \"pattern\":
\"${env:LOG4J_DATE_PATTERN:-%d}\"}}", <i class="conum"
data-value="1"></i><b>(1)</b>
+ "eventTemplateAdditionalField": [
+ {
+ "key": "message",
+ "format": "JSON",
+ "value": "{\"$resolver\": \"pattern\", \"pattern\":
\"${env:LOG4J_MESSAGE_PATTERN:-%m}\"}" <i class="conum"
data-value="2"></i><b>(2)</b>
+ }
+ ]
+}</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_4_yaml--panel" class="tabpanel" aria-labelledby="_tabs_4_yaml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/property-substitution/log4j2.yaml"><code>log4j2.yaml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs"
data-lang="xml">JsonTemplateLayout:
+ eventTemplate: '{"instant": {"$resolver": "pattern", "pattern":
"${env:LOG4J_DATE_PATTERN:-%d}"}}' <i class="conum"
data-value="1"></i><b>(1)</b>
+ eventTemplateAdditionalField:
+ - key: "message"
+ format: "JSON"
+ value: '{"$resolver": "pattern", "pattern":
"${env:LOG4J_MESSAGE_PATTERN:-%m}"}' <i class="conum"
data-value="2"></i><b>(2)</b></code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_4_properties--panel" class="tabpanel"
aria-labelledby="_tabs_4_properties">
+<div class="listingblock">
+<div class="title">Snippet from an example <a
href="https://github.com/apache/logging-log4j2/tree/main/src/site/antora/modules/ROOT/examples/manual/json-template-layout/property-substitution/log4j2.properties"><code>log4j2.properties</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs"
data-lang="xml">appender.0.layout.type = JsonTemplateLayout
+appender.0.layout.eventTemplate = {"instant": {"$resolver": "pattern",
"pattern": "${env:LOG4J_DATE_PATTERN:-%d}"}} <i class="conum"
data-value="1"></i><b>(1)</b>
+appender.0.layout.eventTemplateAdditionalField[0].type =
EventTemplateAdditionalField
+appender.0.layout.eventTemplateAdditionalField[0].key = message
+appender.0.layout.eventTemplateAdditionalField[0].format = JSON
+appender.0.layout.eventTemplateAdditionalField[0].value = {"$resolver":
"pattern", "pattern": "${env:LOG4J_MESSAGE_PATTERN:-%m}"} <i class="conum"
data-value="2"></i><b>(2)</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><code>eventTemplate</code> will be passed to the layout with
<code>${env:…​}</code> substituted</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td><code>value</code> will be passed to the layout with
<code>${env:…​}</code> substituted</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>External values injected this way can corrupt your JSON schema.
+It is your responsibility to ensure the sanitization and safety of the
substitution source.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
<h2 id="extending"><a class="anchor" href="#extending"></a>Extending</h2>
<div class="sectionbody">
<div class="paragraph">
@@ -2945,18 +3170,6 @@ To get the most out of it, mind the following
checklist:</p>
<h2 id="faq"><a class="anchor" href="#faq"></a>F.A.Q.</h2>
<div class="sectionbody">
<div class="sect2">
-<h3 id="faq-lookups"><a class="anchor" href="#faq-lookups"></a>Are lookups
supported in templates?</h3>
-<div class="paragraph">
-<p>Yes, <a href="lookups.html" class="xref page">lookups</a> (e.g.,
<code>${java:version}</code>, <code>${env:USER}</code>,
<code>${date:MM-dd-yyyy}</code>) are supported in string literals of
templates.</p>
-</div>
-<div class="paragraph">
-<p>Encoding the output of a lookup is garbage-free, but executing the lookup
might not be.
-For instance, even though <a href="lookups.html#DateLookup" class="xref
page">the <code>date</code> lookup</a> allocates a new <code>String</code> for
each invocation, adding <code>${date:YYYY-MM-dd}</code> is garbage-free,
because it will be expanded at configuration time, that is, only once.
-Whereas adding <code>$${date:YYYY-MM-dd}</code> is not, since it will be
expanded for each log event.
-See <a href="configuration.html#property-substitution" class="xref
page">property substitution</a> for details.</p>
-</div>
-</div>
-<div class="sect2">
<h3 id="faq-recursive-collection"><a class="anchor"
href="#faq-recursive-collection"></a>Are recursive collections supported?</h3>
<div class="paragraph">
<p>No. Consider a <code>Message</code> containing a recursive value as
follows:</p>
@@ -2991,12 +3204,13 @@ Take into account the following caveats:</p>
<p>Serialization of <code>MapMessage</code>s and <code>ObjectMessage</code>s
are mostly garbage-free except for certain types (e.g.,
<code>BigDecimal</code>, <code>BigInteger</code>, <code>Collection</code>s,
except <code>List</code>).</p>
</li>
<li>
-<p><a href="lookups.html" class="xref page">Lookups</a> (that is,
<code>${…​}</code> variables) are not garbage-free.</p>
+<p><a href="#faq-lookups">Property substitutions</a> (that is,
<code>${…​}</code> variables) <em>might</em> not be
garbage-free.</p>
</li>
</ul>
</div>
<div class="paragraph">
-<p>Don’t forget to check out <a href="#event-template-resolvers">the
notes on garbage footprint of resolvers</a> you employ in templates.</p>
+<p><a href="#event-template-resolvers">Event template resolvers</a> contain
notes on their garbage footprint.
+Make sure to check those notes of resolvers you employ in templates.</p>
</div>
</div>
</div>
diff --git a/manual/layouts.html b/manual/layouts.html
index 410edda687..794353c805 100644
--- a/manual/layouts.html
+++ b/manual/layouts.html
@@ -302,9 +302,24 @@ This page will try to answer following questions:</p>
<p>This section introduces you to some common concerns shared by almost all <a
href="#collection">predefined layouts</a> that you need to be aware of while
using them.</p>
</div>
<div class="sect2">
+<h3 id="structured-logging"><a class="anchor"
href="#structured-logging"></a>Structured logging</h3>
+<div class="paragraph">
+<p>In almost any modern production deployment, logs are no more written to
files read by engineers while troubleshooting, but forwarded to log ingestion
systems (Elasticsearch, Google Cloud Logging, etc.) for several observability
use cases ranging from logging to metrics.
+This necessitates the applications to <em>structure</em> their logs in a
machine-readable way ready to be delivered to an external system.
+This act of encoding logs following a certain structure is called
<strong>structured logging</strong>.</p>
+</div>
+<div class="paragraph">
+<p>Log4j strives to provide top of the class support for structured logging.
+To create an end-to-end experience, it provides several <a
href="#manual/messages.adoc#collection-structured" class="xref
unresolved">structured message types</a> along with layouts supporting
structured logging.</p>
+</div>
+<div class="paragraph">
+<p>We recommend <a href="json-template-layout.html" class="xref page">JSON
Template Layout</a> for structured logging purposes.</p>
+</div>
+</div>
+<div class="sect2">
<h3 id="charset"><a class="anchor" href="#charset"></a>Character encoding</h3>
<div class="paragraph">
-<p>All <a href="#collection[predefined layouts] produce <code>String</code>
that eventually get converted into a <code>byte">[collection[predefined
layouts] produce <code>String</code> that eventually get converted into a
<code>byte]</a></code> using the <a
href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html"><code>Charset</code></a>
configured.
+<p>All <a href="#collection">predefined layouts</a> produce
<code>String</code> that eventually get converted into a <code>byte</code>
using the <a
href="https://docs.oracle.com/javase/17/docs/api/java/nio/charset/Charset.html"><code>Charset</code></a>
configured.
While doing so, unless an explicit encoding configuration is stated, they use
<code>UTF-8</code> by default.
If you want all your log events to be formatted in a certain character
encoding that is different from what the employed layout defaults to, make sure
to configure the layout’s character encoding as needed.</p>
</div>
@@ -718,9 +733,6 @@ You can use time zone IDs supported by <a
href="https://docs.oracle.com/javase/8
It encodes <code>LogEvent</code>s according to the structure described by the
JSON template provided.</p>
</div>
<div class="paragraph">
-<p><a
href="../plugin-reference.html#org-apache-logging-log4j_log4j-layout-template-json_org-apache-logging-log4j-layout-template-json-JsonTemplateLayout"
class="xref page">📖 Plugin reference for
<code>JsonTemplateLayout</code></a></p>
-</div>
-<div class="paragraph">
<p>For instance, given the following event template stored in
<code>MyLayout.json</code> in your classpath:</p>
</div>
<div class="listingblock">
@@ -862,9 +874,6 @@ For production environments, you are strongly advised to
use <a href="json-templ
</table>
</div>
<div class="paragraph">
-<p><a
href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-layout-PatternLayout"
class="xref page">📖 Plugin reference for <code>PatternLayout</code></a></p>
-</div>
-<div class="paragraph">
<p>A conversion pattern is composed of literal text and format control
expressions.
For instance, given the <code>%-5p [%t]: %m%n</code> pattern, following
statements</p>
</div>
@@ -1027,6 +1036,10 @@ This attribute only applies to RFC 5424 Syslog
records.</p></td>
</tr>
</tbody>
</table>
+<div class="paragraph">
+<p>RFC 5424 Layout has specialized handling for <a
href="#manual/messages.adoc#StructuredDataMessage" class="xref
unresolved"><code>StructuredDataMessage</code></a>s.
+By combining two, users can have complete control on how their message is
encoded in a way compliant with RFC 5424, while RFC 5424 Layout will make sure
the rest of the information attached to the log event is properly injected.</p>
+</div>
</div>
<div class="sect2">
<h3 id="SyslogLayout"><a class="anchor" href="#SyslogLayout"></a>Syslog
Layout</h3>
diff --git a/manual/lookups.html b/manual/lookups.html
index 900bc53a82..26f91a7c35 100644
--- a/manual/lookups.html
+++ b/manual/lookups.html
@@ -913,7 +913,7 @@ page for information on how to set the default values.</p>
</div>
</div>
<div class="sect1">
-<h2 id="_marker_lookup"><a class="anchor" href="#_marker_lookup"></a>Marker
Lookup</h2>
+<h2 id="marker-lookup"><a class="anchor" href="#marker-lookup"></a>Marker
Lookup</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The marker lookup allows you to use markers in interesting
diff --git a/manual/pattern-layout.html b/manual/pattern-layout.html
index 0d1299ff51..e9da94e27e 100644
--- a/manual/pattern-layout.html
+++ b/manual/pattern-layout.html
@@ -278,7 +278,7 @@
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
-<p><code>PatternLayout</code> is a customizable, <a
href="#performance[efficient]">xref:#garbage-free,garbage-free</a>, and
human-readable string generating layout using a user-provided pattern.
+<p><code>PatternLayout</code> is a customizable, <a
href="#performance">efficient</a>, <a href="#garbage-free">garbage-free</a>,
and human-readable string generating layout using a user-provided pattern.
It is analogous to <code>String#format()</code> with specialized directives on
injecting certain properties of a <code>LogEvent</code>.</p>
</div>
<div class="admonitionblock important">
@@ -1462,15 +1462,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>
@@ -2660,13 +2656,7 @@ Format modifiers to control such things as field width,
padding, left, and right
<tr>
<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><code>literal text</code></p></td>
<td class="tableblock halign-left valign-top" style="background-color:
white;"><div class="content"><div class="paragraph">
-<p>Garbage-free, but care is needed for <a href="lookups.html" class="xref
page">Lookups</a>.</p>
-</div>
-<div class="paragraph">
-<p>Encoding the output of a lookup is garbage-free, but executing the lookup
might not be.
-For instance, even though <a href="lookups.html#DateLookup" class="xref
page">the <code>date</code> lookup</a> allocates a new <code>String</code> for
each invocation, adding <code>${date:YYYY-MM-dd}</code> is garbage-free,
because it will be expanded at configuration time, that is, only once.
-Whereas adding <code>$${date:YYYY-MM-dd}</code> is not, since it will be
expanded for each log event.
-See <a href="configuration.html#property-substitution" class="xref
page">property substitution</a> for details.</p>
+<p>Garbage-free, but care is needed for <a
href="#property-substitution">Property substitution</a>, including <a
href="lookups.html" class="xref page">Lookups</a></p>
</div></div></td>
</tr>
</tbody>
@@ -2678,6 +2668,77 @@ See <a href="configuration.html#property-substitution"
class="xref page">propert
</div>
</div>
<div class="sect1">
+<h2 id="property-substitution"><a class="anchor"
href="#property-substitution"></a>Property substitution</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p><a href="configuration.html#property-substitution" class="xref
page">Property substitutions</a> (e.g., <code>${myProperty}</code>), including
<a href="lookups.html" class="xref page">lookups</a> (e.g.,
<code>${java:version}</code>, <code>${env:USER}</code>,
<code>${date:MM-dd-yyyy}</code>) are supported, but extra care needs to be
taken.
+<strong>We strongly advise you to carefully read <a
href="configuration.html#property-substitution" class="xref page">the
configuration manual</a></strong> before using them.</p>
+</div>
+<div class="admonitionblock important">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-important" title="Important"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p><a href="lookups.html" class="xref page">Lookups</a> are intended as a very
generic, convenience utility to perform string interpolation for, in
particular, configuration files and components (e.g., layouts) lacking this
mechanism.
+<strong>Pattern Layout has a rich converter collection, and you should always
prefer it whenever possible over lookups.</strong></p>
+</div>
+<details>
+<summary class="title">Which converters can I use to replace lookups?</summary>
+<div class="content">
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top" style="background-color:
white;">Instead of this lookup</th>
+<th class="tableblock halign-left valign-top" style="background-color:
white;">Use this converter</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><a href="lookups.html#ContextMapLookup"
class="xref page">Context Map Lookup</a></p></td>
+<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><a href="#converter-thread-context-map">Thread
context map</a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><a href="lookups.html#DateLookup" class="xref
page">Date Lookup</a></p></td>
+<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><a href="#converter-date">Date</a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><a href="lookups.html#EventLookup" class="xref
page">Event Lookup</a></p></td>
+<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><a href="#converter-exception">Exception</a><br>
+<a href="#converter-exception-extended">Exception (Extended)</a><br>
+<a href="#converter-level">Level</a><br>
+<a href="#converter-logger">Logger</a><br>
+<a href="#converter-marker">Marker</a><br>
+<a href="#converter-message">Message</a><br>
+<a href="#converter-thread-id">Thread ID</a><br>
+<a href="#converter-thread-name">Thread name</a><br>
+<a href="#converter-date">Date</a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><a href="lookups.html#MapLookup" class="xref
page">Map Lookup</a></p></td>
+<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><a href="#converter-map">Map</a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><a href="lookups.html#marker-lookup" class="xref
page">Marker Lookup</a></p></td>
+<td class="tableblock halign-left valign-top" style="background-color:
white;"><p class="tableblock"><a href="#converter-marker">Marker</a></p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</details>
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect1">
<h2 id="extending"><a class="anchor" href="#extending"></a>Extending</h2>
<div class="sectionbody">
<div class="paragraph">
diff --git a/manual/systemproperties.html b/manual/systemproperties.html
index 68c1b0ed6e..323e40c661 100644
--- a/manual/systemproperties.html
+++ b/manual/systemproperties.html
@@ -585,7 +585,7 @@ or predefined constant</p></td>
</table>
<div class="paragraph">
<p>Determines the
-<a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/async/AsyncQueueFullPolicy.html">AsyncQueueFullPolicy</a>
+<a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/async/AsyncQueueFullPolicy.html"><code>AsyncQueueFullPolicy</code></a>
to use when the underlying async component cannot keep up with the logging
rate and the queue is filling up.</p>
</div>
<div class="paragraph">
@@ -1441,6 +1441,26 @@ For a thread local recycler, it corresponds to the
per-thread buffer size.</p>
<div class="paragraph">
<p>To configure the thread context used by Log4j Core, you can use the
following properties:</p>
</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>These configuration properties are only used by Log4j Core and <a
href="https://logging.apache.org/log4j/2.x/manual/simple-logger.html">Simple
Logger</a> of Log4j API.</p>
+</div>
+<div class="paragraph">
+<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>
+</div>
+</td>
+</tr>
+</table>
+</div>
<div class="sect3">
<h4 id="log4j.threadContext.enable"><a class="anchor"
href="#log4j.threadContext.enable"></a><code>log4j.threadContext.enable</code></h4>
<table class="tableblock frame-all grid-all stretch">
@@ -2062,7 +2082,7 @@ to use for the value of the <a
href="#log4j.auth.basic.password"><code>log4j.aut
</table>
<div class="paragraph">
<p>The type of private key store.
-See <a
href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#KeyStore">KeyStore
types</a>.</p>
+See <a
href="https://docs.oracle.com/javase/17/docs/technotes/guides/security/StandardNames.html#KeyStore"><code>KeyStore</code></a>.</p>
</div>
</div>
<div class="sect3">
@@ -2140,7 +2160,7 @@ See <a
href="https://docs.oracle.com/javase/17/docs/api/java/time/Clock.html#sys
<dd>
<p>uses a separate thread to update the timestamp value.
See
-<a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/util/CachedClock.html">JavaDoc</a>
+<a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/util/CachedClock.html"><code>CachedClock</code></a>
for details.</p>
</dd>
<dt class="hdlist1">CoarseCachedClock</dt>
diff --git a/migrate-from-logback.html b/migrate-from-logback.html
index 0a698a75bb..0eac443ffb 100644
--- a/migrate-from-logback.html
+++ b/migrate-from-logback.html
@@ -276,7 +276,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">
@@ -304,7 +304,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/17/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/17/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>
@@ -313,7 +313,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/17/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/17/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 ae87d00711..9a7b073642 100644
--- a/migrate-from-slf4j.html
+++ b/migrate-from-slf4j.html
@@ -276,7 +276,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">
@@ -304,7 +304,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/17/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/17/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>
@@ -313,7 +313,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/17/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/17/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 a3eab372ee..ea6cc313ae 100644
--- a/plugin-reference.html
+++ b/plugin-reference.html
@@ -2567,12 +2567,7 @@ This attribute is ignored if <code>immediateFlush</code>
is set to <code>true</c
<tr>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>Property</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a
href="#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-config-Property">Property</a>?</code></p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div
class="paragraph">
-<p>A generic list of key/value properties</p>
-</div>
-<div class="paragraph">
-<p>The meaning of these properties depends on the component.</p>
-</div></div></td>
+<td class="tableblock halign-left valign-top"><div class="content"></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"></td>
diff --git a/sitemap.xml b/sitemap.xml
index 5a2f85ef4d..8c1bc879cc 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -2,194 +2,194 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://logging.apache.org/log4j/3.x/articles.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/development.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/download.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/faq.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/hibernate.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/index.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/javadoc.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/log4j-docker.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/log4j-flume-ng.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/log4j-jpl.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/log4j-jul.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/log4j-slf4j-impl.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/log4j-slf4j2-impl.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/log4j-spring-cloud-config-client.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/log4j-to-jul.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/log4j-to-slf4j.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/api.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/appenders.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/architecture.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/async.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/cloud.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/config-intro.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/configuration.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/customconfig.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/dependencyinjection.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/extending.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/filters.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/garbagefree.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/getting-started.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/index.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/installation.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/jmx.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/json-template-layout.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/layouts.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/logsep.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/lookups.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/migration.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/pattern-layout.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/performance.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/plugins.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/scripts.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/systemproperties.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/manual/usage.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/migrate-from-logback.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/migrate-from-slf4j.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/plugin-reference.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/release-notes.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/3.x/thanks.html</loc>
-<lastmod>2024-06-19T12:59:45.857Z</lastmod>
+<lastmod>2024-06-19T15:03:38.419Z</lastmod>
</url>
</urlset>