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 0e7478a242 Add website content generated from
`7f82a4d57400004b675d7c9c8a3c2c5715817f63`
0e7478a242 is described below
commit 0e7478a2429ef8a4291bdc42daded4c8978f5ab8
Author: ASF Logging Services RM <[email protected]>
AuthorDate: Tue Jun 11 09:24:02 2024 +0000
Add website content generated from
`7f82a4d57400004b675d7c9c8a3c2c5715817f63`
---
.../core/selector/ClassLoaderContextSelector.html | 8 +-
manual/api.html | 155 ++++++++
manual/messages.html | 406 ++++++++++++---------
plugin-reference.html | 2 +-
release-notes.html | 13 +-
sitemap.xml | 118 +++---
6 files changed, 466 insertions(+), 236 deletions(-)
diff --git
a/javadoc/log4j-core/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.html
b/javadoc/log4j-core/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.html
index 4cf895f890..9fc59aedd3 100644
---
a/javadoc/log4j-core/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.html
+++
b/javadoc/log4j-core/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.html
@@ -93,10 +93,12 @@ implements <a href="ContextSelector.html" title="interface
in org.apache.logging
Loggers associated with classes loaded from different ClassLoaders to be
co-mingled. This is a problem if, for
example, a web application is undeployed as some of the Loggers being
released may be associated with a Class in a
parent ClassLoader, which will generally have negative consequences.
-
+ <p>
The main downside to this ContextSelector is that Configuration is more
challenging.
-
- This ContextSelector should not be used with a Servlet Filter such as the
Log4jServletFilter.</div>
+ </p>
+ <p>
+ This ContextSelector should not be used with a Servlet Filter such as the
Log4jServletFilter.
+ </p></div>
</section>
<section class="summary">
<ul class="summary-list">
diff --git a/manual/api.html b/manual/api.html
index 3e7384a8ac..f6d2ab4e29 100644
--- a/manual/api.html
+++ b/manual/api.html
@@ -527,6 +527,161 @@ try {
<p>While there is only one placeholder in the message, we pass two arguments:
<code>tableName</code> and <code>exception</code>.
Log4j will attach the last extra argument of type <code>Throwable</code> in a
separate field to the generated log event.</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><strong>Log messages</strong> are often used interchangeably with
<strong>log events</strong>.
+While this simplification holds for several cases, it is not technically
correct.
+A log event, capturing the logging context (level, logger name, instant, etc.)
along with the log message, is generated by the logging implementation (e.g.,
Log4j Core) when a user issues a log using a <a href="#loggers">logger</a>,
e.g., <code>LOGGER.info("Hello, world!")</code>.
+Hence, <strong>log events are compound objects containing log
messages</strong>.</p>
+</div>
+<details>
+<summary class="title">Read more on log events</summary>
+<div class="content">
+<div class="paragraph">
+<p>Log events contain fields that can be classified into three categories:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Some fields are provided explicitly, in a <a
href="../javadoc/log4j-api/org/apache/logging/log4j/Logger.html"><code>Logger</code></a>
method call.
+The most important are the log level and the log message, which is a
description of what happened, and it is addressed to humans.</p>
+</li>
+<li>
+<p>Some fields are contextual (e.g., <a href="thread-context.html" class="xref
page">Thread Context</a>) and are either provided explicitly by developers of
other parts of the application, or is injected by Java instrumentation.</p>
+</li>
+<li>
+<p>The last category of fields is those that are computed automatically by the
logging implementation employed.</p>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>For clarity’s sake let us look at a log event formatted as JSON:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs"
data-lang="json">{
+ <i class="conum" data-value="1"></i><b>(1)</b>
+ "log.level": "INFO",
+ "message": "Unable to insert data into my_table.",
+ "error.type": "java.lang.RuntimeException",
+ "error.message": null,
+ "error.stack_trace": [
+ {
+ "class": "com.example.Main",
+ "method": "doQuery",
+ "file.name": "Main.java",
+ "file.line": 36
+ },
+ {
+ "class": "com.example.Main",
+ "method": "main",
+ "file.name": "Main.java",
+ "file.line": 25
+ }
+ ],
+ "marker": "SQL",
+ "log.logger": "com.example.Main",
+ <i class="conum" data-value="2"></i><b>(2)</b>
+ "tags": [
+ "SQL query"
+ ],
+ "labels": {
+ "span_id": "3df85580-f001-4fb2-9e6e-3066ed6ddbb1",
+ "trace_id": "1b1f8fc9-1a0c-47b0-a06f-af3c1dd1edf9"
+ },
+ <i class="conum" data-value="3"></i><b>(3)</b>
+ "@timestamp": "2024-05-23T09:32:24.163Z",
+ "log.origin.class": "com.example.Main",
+ "log.origin.method": "doQuery",
+ "log.origin.file.name": "Main.java",
+ "log.origin.file.line": 36,
+ "process.thread.id": 1,
+ "process.thread.name": "main",
+ "process.thread.priority": 5
+}</code></pre>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>Explicitly supplied fields:
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>log.level</code></dt>
+<dd>
+<p>The <a href="customloglevels.html" class="xref page">level</a> of the
event, either explicitly provided as an argument to the logger call, or implied
by the name of the logger method</p>
+</dd>
+<dt class="hdlist1"><code>message</code></dt>
+<dd>
+<p>The <strong>log message</strong> that describes what happened</p>
+</dd>
+<dt class="hdlist1"><code>error.*</code></dt>
+<dd>
+<p>An <em>optional</em> <code>Throwable</code> explicitly passed as an
argument to the logger call</p>
+</dd>
+<dt class="hdlist1"><code>marker</code></dt>
+<dd>
+<p>An <em>optional</em> <a href="markers.html" class="xref page">marker</a>
explicitly passed as an argument to the logger call</p>
+</dd>
+<dt class="hdlist1"><code>log.logger</code></dt>
+<dd>
+<p>The <a href="#logger-names">logger name</a> provided explicitly to
<code>LogManager.getLogger()</code> or inferred by Log4j API</p>
+</dd>
+</dl>
+</div></td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>Contextual fields:
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>tags</code></dt>
+<dd>
+<p>The <a href="thread-context.html" class="xref page">Thread Context</a>
stack</p>
+</dd>
+<dt class="hdlist1"><code>labels</code></dt>
+<dd>
+<p>The <a href="thread-context.html" class="xref page">Thread Context</a>
map</p>
+</dd>
+</dl>
+</div></td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>Logging backend specific fields.
+In case you are using Log4j Core, the following fields can be automatically
generated:
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>@timestamp</code></dt>
+<dd>
+<p>The instant of the logger call</p>
+</dd>
+<dt class="hdlist1"><code>log.origin.*</code></dt>
+<dd>
+<p>The <a href="layouts.html#LocationInformation" class="xref
page">location</a> of the logger call in the source code</p>
+</dd>
+<dt class="hdlist1"><code>process.thread.*</code></dt>
+<dd>
+<p>The name of the Java thread, where the logger is called</p>
+</dd>
+</dl>
+</div></td>
+</tr>
+</table>
+</div>
+</div>
+</details>
+</td>
+</tr>
+</table>
+</div>
</div>
</div>
<div class="sect1">
diff --git a/manual/messages.html b/manual/messages.html
index 28c4fe27f0..10098792c2 100644
--- a/manual/messages.html
+++ b/manual/messages.html
@@ -319,43 +319,44 @@
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
-<p>Unlike other logging APIs, which either restrict the description of log
events to (possibly interpolated) Java
-<a
href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html"><code>String</code></a>s
-or allow generic Java
-<a
href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html"><code>Object</code></a>s,
-the Log4j API encapsulates every log message into the logging-specific
-<a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/Message.html"><code>Message</code></a>
-interface, before passing it to the logging backend. Such an approach opens to
developers a wide range of customization possibilities.</p>
+<p>Unlike other logging APIs, which either restrict the description of log
events to (possibly interpolated) Java <code>String</code>s or allow generic
Java <code>Object</code>s, the Log4j API encapsulates every log message into
the logging-specific <a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/Message.html"><code>Message</code></a>
interface, before passing it to the logging implementation.
+Such an approach opens to developers a wide range of customization
possibilities.</p>
</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="anatomy-log-event"><a class="anchor"
href="#anatomy-log-event"></a>Anatomy of a logging event</h2>
-<div class="sectionbody">
+<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><strong>Log messages</strong> are often used interchangeably with
<strong>log events</strong>.
+While this simplification holds for several cases, it is not technically
correct.
+A log event, capturing the logging context (level, logger name, instant, etc.)
along with the log message, is generated by the logging implementation (e.g.,
Log4j Core) when a user issues a log using a <a href="api.html#loggers"
class="xref page">logger</a>, e.g., <code>LOGGER.info("Hello, world!")</code>.
+Hence, <strong>log events are compound objects containing log
messages</strong>.</p>
+</div>
+<details>
+<summary class="title">Read more on log events</summary>
+<div class="content">
<div class="paragraph">
-<p>Logging events are complex objects that contain many fields that can be
classified into three categories:</p>
+<p>Log events contain fields that can be classified into three categories:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
-<p>Some fields are provided explicitly, in a
-<a
href="../javadoc/log4j-api/org/apache/logging/log4j/Logger.html"><code>Logger</code></a>
-method call.
-The most important are the log level and the <strong>log message</strong>,
which is a description of what happened addressed to humans.
-Log4j API provides a rich set of methods to specify log messages, which will
be described in this chapter.</p>
+<p>Some fields are provided explicitly, in a <a
href="../javadoc/log4j-api/org/apache/logging/log4j/Logger.html"><code>Logger</code></a>
method call.
+The most important are the log level and the log message, which is a
description of what happened, and it is addressed to humans.</p>
</li>
<li>
-<p>Some fields are contextual and is either provided explicitly by developers
of other parts of the application (see
-<a href="thread-context.html" class="xref page">Thread Context</a>)
-or is injected by Java instrumentation.</p>
+<p>Some fields are contextual (e.g., <a href="thread-context.html" class="xref
page">Thread Context</a>) and are either provided explicitly by developers of
other parts of the application, or is injected by Java instrumentation.</p>
</li>
<li>
-<p>The last category of fields is those that are computed automatically by the
logging backend you use.</p>
+<p>The last category of fields is those that are computed automatically by the
logging implementation employed.</p>
</li>
</ol>
</div>
<div class="paragraph">
-<p>For clarity’s sake let us look at a possible log event formatted as
JSON:</p>
+<p>For clarity’s sake let us look at a log event formatted as JSON:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -410,24 +411,23 @@ or is injected by Java instrumentation.</p>
<dl>
<dt class="hdlist1"><code>log.level</code></dt>
<dd>
-<p>The <a href="customloglevels.html" class="xref page">log level</a> of the
event, either explicitly provided as an argument to the logging call or implied
by the name of the logging method,</p>
+<p>The <a href="customloglevels.html" class="xref page">level</a> of the
event, either explicitly provided as an argument to the logger call, or implied
by the name of the logger method</p>
</dd>
<dt class="hdlist1"><code>message</code></dt>
<dd>
-<p>The <strong>log message</strong> that describes what happened.</p>
+<p>The <strong>log message</strong> that describes what happened</p>
</dd>
<dt class="hdlist1"><code>error.*</code></dt>
<dd>
-<p>An <em>optional</em>
-<a
href="https://docs.oracle.com/javase/{/docs/api/java/lang/Throwable.html"><code>Throwable</code></a>
explicitly passed as an argument to the logging call.</p>
+<p>An <em>optional</em> <code>Throwable</code> explicitly passed as an
argument to the logger call</p>
</dd>
<dt class="hdlist1"><code>marker</code></dt>
<dd>
-<p>An <em>optional</em> <a href="markers.html" class="xref page">marker</a>
explicitly passed as an argument to the logging call.</p>
+<p>An <em>optional</em> <a href="markers.html" class="xref page">marker</a>
explicitly passed as an argument to the logger call</p>
</dd>
<dt class="hdlist1"><code>log.logger</code></dt>
<dd>
-<p>The <a href="api.html#logger-names" class="xref page">logger name</a>
provided explicitly to <code>LogManager.getLogger()</code> or inferred by Log4j
API.</p>
+<p>The <a href="api.html#logger-names" class="xref page">logger name</a>
provided explicitly to <code>LogManager.getLogger()</code> or inferred by Log4j
API</p>
</dd>
</dl>
</div></td>
@@ -439,11 +439,11 @@ or is injected by Java instrumentation.</p>
<dl>
<dt class="hdlist1"><code>tags</code></dt>
<dd>
-<p>The stack of <a href="thread-context.html#usage" class="xref page">nested
diagnostic context</a> messages.</p>
+<p>The <a href="thread-context.html" class="xref page">Thread Context</a>
stack</p>
</dd>
<dt class="hdlist1"><code>labels</code></dt>
<dd>
-<p>The key/value pairs of the current <a href="thread-context.html#usage"
class="xref page">mapped diagnostic context</a>.</p>
+<p>The <a href="thread-context.html" class="xref page">Thread Context</a>
map</p>
</dd>
</dl>
</div></td>
@@ -456,15 +456,15 @@ In case you are using Log4j Core, the following fields
can be automatically gene
<dl>
<dt class="hdlist1"><code>@timestamp</code></dt>
<dd>
-<p>The timestamp, when the log event occurs.</p>
+<p>The instant of the logger call</p>
</dd>
<dt class="hdlist1"><code>log.origin.*</code></dt>
<dd>
-<p>The <a href="layouts.html#LocationInformation" class="xref
page">location</a> of the logging call in the source code.</p>
+<p>The <a href="layouts.html#LocationInformation" class="xref
page">location</a> of the logger call in the source code</p>
</dd>
<dt class="hdlist1"><code>process.thread.*</code></dt>
<dd>
-<p>The Java thread that generates the logging event.</p>
+<p>The name of the Java thread, where the logger is called</p>
</dd>
</dl>
</div></td>
@@ -472,9 +472,15 @@ In case you are using Log4j Core, the following fields can
be automatically gene
</table>
</div>
</div>
+</details>
+</td>
+</tr>
+</table>
+</div>
+</div>
</div>
<div class="sect1">
-<h2 id="_creating_log_messages"><a class="anchor"
href="#_creating_log_messages"></a>Creating log messages</h2>
+<h2 id="usage"><a class="anchor" href="#usage"></a>Usage</h2>
<div class="sectionbody">
<div class="paragraph">
<p>While internally Log4j uses <code>Message</code> objects, the
<code>Logger</code> interface provides various shortcut methods to create the
most commonly used messages:</p>
@@ -502,11 +508,12 @@ LOGGER.error(new ParameterizedMessage("Unable process
user with ID `{}`", userId
</ul>
</div>
<div class="paragraph">
-<p>In small and austere environments, this is sufficient. However, in more
complex scenarios,
-the string one wants to log may require more complex construction.</p>
+<p><strong>In most cases, this is sufficient.</strong></p>
</div>
<div class="paragraph">
-<p>Imagine a scenario that uses a domain event to signal authentication
failures:</p>
+<p>Nex to use cases sufficed with <code>String</code>-based messages, the <a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/Message.html"><code>Message</code></a>
interface abstraction also allows users to log custom objects.
+This effectively provides logging convenience in certain use cases.
+For instance, imagine a scenario that uses a domain event to signal
authentication failures:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -514,8 +521,7 @@ the string one wants to log may require more complex
construction.</p>
</div>
</div>
<div class="paragraph">
-<p>When the developer wants to log a message reporting the event,
-we can see that the string construction becomes more challenging to read:</p>
+<p>When the developer wants to log a message reporting the event, we can see
that the string construction becomes more challenging to read:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -545,16 +551,16 @@ we can see that the string construction becomes more
challenging to read:</p>
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
-<td>Developers need to implement the <code>Message</code> interface.</td>
+<td>Domain model needs to implement the <code>Message</code> interface</td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
-<td>The <code>getFormattedMessage()</code> provides the <code>String</code> to
be logged.</td>
+<td><code>getFormattedMessage()</code> provides the <code>String</code> to be
logged</td>
</tr>
</table>
</div>
<div class="paragraph">
-<p>The code is then reusable, by simply calling:</p>
+<p>As a result, logging of <code>LoginFailureEvent</code> instances can be
simplified as follows:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -564,105 +570,121 @@ we can see that the string construction becomes more
challenging to read:</p>
</div>
</div>
<div class="sect1">
-<h2 id="_message_types"><a class="anchor" href="#_message_types"></a>Message
types</h2>
+<h2 id="collection"><a class="anchor" href="#collection"></a>Collection</h2>
<div class="sectionbody">
<div class="paragraph">
-<p>Log4j provides several message types that developers can use to create log
messages.</p>
+<p>This section explains predefined Log4j <code>Message</code> implementations
addressing certain use cases.</p>
</div>
<div class="sect2">
-<h3 id="FormattedMessage"><a class="anchor"
href="#FormattedMessage"></a>FormattedMessage</h3>
+<h3 id="FormattedMessage"><a class="anchor"
href="#FormattedMessage"></a><code>FormattedMessage</code></h3>
<div class="paragraph">
-<p>The message pattern passed to a
-<a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/FormattedMessage.html"><code>FormattedMessage</code></a>
-undergoes a series of checks to determine the appropriate formatting
method.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/FormattedMessage.html"><code>FormattedMessage</code></a>
is intended as a generic entry point to actual message implementations that
use pattern-based formatting.
+It works as follows:</p>
</div>
-<div class="ulist">
-<ul>
-<li>
-<p>First, the pattern is checked for a valid
<code>java.text.MessageFormat</code> pattern.</p>
-</li>
+<div class="olist arabic">
+<ol class="arabic">
<li>
-<p>If it is, a <code>MessageFormatMessage</code> is used for formatting.</p>
+<p>If the input is a valid <a
href="https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html"><code>MessageFormat</code></a>
pattern, use <a
href="#MessageFormatMessage"><code>MessageFormatMessage</code></a></p>
</li>
<li>
-<p>If it is not, the pattern is then checked for any tokens that are valid
format specifiers for <code>String.format()</code>.
-A <code>StringFormattedMessage</code> is used to format the message when Log4j
finds such tokens.</p>
+<p>If the input is a valid <a
href="https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#syntax"><code>String.format()</code>
pattern</a>, use <a
href="#StringFormattedMessage"><code>StringFormattedMessage</code></a></p>
</li>
<li>
-<p>Finally, if the pattern does not match either of these formats, a
<code>ParameterizedMessage</code> is used for formatting.</p>
+<p>Otherwise, use <a
href="#ParameterizedMessage"><code>ParameterizedMessage</code></a></p>
</li>
-</ul>
-</div>
-</div>
-<div class="sect2">
-<h3 id="LocalizedMessage"><a class="anchor"
href="#LocalizedMessage"></a>LocalizedMessage</h3>
-<div class="paragraph">
-<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/LocalizedMessage.html"><code>LocalizedMessage</code></a>
-is provided primarily to provide compatibility with Log4j 1.x.</p>
-</div>
-<div class="paragraph">
-<p>Generally, the best approach to localization is to have the client’s
UI render the events in the client’s locale.</p>
+</ol>
</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><code>LocalizedMessage</code> incorporates a <code>ResourceBundle</code>
and allows the message pattern parameter
-to be the key to the message pattern in the bundle.</p>
+<p>Due to checks involved, <code>FormattedMessage</code> has an extra
performance overhead compared to directly using a concrete <code>Message</code>
implementation.</p>
</div>
-<div class="paragraph">
-<p>If no bundle is specified, <code>LocalizedMessage</code> will attempt to
locate a bundle
-with the name of the Logger used to log the event. The message retrieved
-from the bundle will be formatted using a FormattedMessage.</p>
+</td>
+</tr>
+</table>
</div>
</div>
<div class="sect2">
-<h3 id="LoggerNameAwareMessage"><a class="anchor"
href="#LoggerNameAwareMessage"></a>LoggerNameAwareMessage</h3>
+<h3 id="LocalizedMessage"><a class="anchor"
href="#LocalizedMessage"></a>LocalizedMessage</h3>
<div class="paragraph">
-<p><code>LoggerNameAwareMessage</code> is an interface with a
<code>setLoggerName()</code> method.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/LocalizedMessage.html"><code>LocalizedMessage</code></a>
incorporates a <code>ResourceBundle</code>, and allows the message pattern
parameter to be the key to the message pattern in the bundle.
+If no bundle is specified, <code>LocalizedMessage</code> will attempt to
locate a bundle with the name of the <code>Logger</code> used to log the event.
+The message retrieved from the bundle will be formatted using a <a
href="#FormattedMessage"><code>FormattedMessage</code></a>.</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>This method will be called during event construction so that the Message
-has the name of the Logger used to log the event when Log4j formats the
message.</p>
+<p><code>LocalizedMessage</code> is primarily provided for compatibility with
<a href="https://logging.apache.org/log4j/1.x">Log4j 1</a>.
+We advise you to perform log message localization at the representation layer
of your application, e.g., the client UI.</p>
+</div>
+</td>
+</tr>
+</table>
</div>
</div>
<div class="sect2">
<h3 id="MapMessage"><a class="anchor"
href="#MapMessage"></a><code>MapMessage</code></h3>
<div class="paragraph">
-<p>A <code>MapMessage</code> contains a <code>Map</code> of
<code>String</code>-typed keys and values.</p>
-</div>
-<div class="paragraph">
-<p><code>MapMessage</code> implements <code>FormattedMessage</code> and
accepts the following format specifiers:</p>
-</div>
-<div class="dlist">
-<dl>
-<dt class="hdlist1"><code>XML</code></dt>
-<dd>
-<p>format the map as XML</p>
-</dd>
-<dt class="hdlist1"><code>JSON</code></dt>
-<dd>
-<p>format the map as JSON</p>
-</dd>
-<dt class="hdlist1"><code>JAVA</code></dt>
-<dd>
-<p>format the map as a Java object</p>
-</dd>
-</dl>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/MapMessage.html"><code>MapMessage</code></a>
is a <code>Message</code> implementation that models a Java <code>Map</code>
with <code>String</code>-typed keys and values.
+<strong>It is an ideal generic message type for passing structured
data.</strong></p>
</div>
<div class="paragraph">
-<p>Otherwise, it will format the map as documented in <a
href="https://docs.oracle.com/javase/7/docs/api/java/util/AbstractMap.html#toString()"><code>java.util.AbstractMap.toString()</code></a>.</p>
+<p><code>MapMessage</code> implements <a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/MultiformatMessage.html"><code>MultiformatMessage</code></a>
to facilitate encoding of its content in multiple formats.
+It supports following formats:</p>
</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 83.3334%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Format</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>XML</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">format as
XML</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>JSON</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">format as
JSON</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>JAVA</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">format as
<code>Map#toString()</code> (the default)</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>JAVA_UNQUOTED</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">format as
<code>Map#toString()</code>, but without quotes</p></td>
+</tr>
+</tbody>
+</table>
<div class="paragraph">
-<p>Some appenders convert the <code>MapMessage</code> objects differently when
there is no layout:</p>
+<p>Some appenders handle <code>MapMessage</code>s differently when there is no
layout:</p>
</div>
<div class="ulist">
<ul>
<li>
-<p>JMS Appender converts to a JMS <code>javax.jms.MapMessage</code>.</p>
+<p>JMS Appender converts to a JMS <code>javax.jms.MapMessage</code></p>
</li>
<li>
<p><a href="appenders.html#JDBCAppender" class="xref page">JDBC Appender</a>
converts to values in an <code>SQL INSERT</code> statement</p>
</li>
<li>
-<p><a href="appenders.html#NoSQLAppenderMongoDB" class="xref page">MongoDB
NoSQL provider</a> converts to fields in MongoDB object</p>
+<p><a href="appenders.html#NoSQLAppenderMongoDB" class="xref page">MongoDB
NoSQL provider</a> converts to fields in a MongoDB object</p>
</li>
</ul>
</div>
@@ -670,137 +692,132 @@ has the name of the Logger used to log the event when
Log4j formats the message.
<div class="sect2">
<h3 id="MessageFormatMessage"><a class="anchor"
href="#MessageFormatMessage"></a><code>MessageFormatMessage</code></h3>
<div class="paragraph">
-<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/MessageFormatMessage.html"><code>MessageFormatMessage</code></a>
-handles messages that use a
-<a
href="https://docs.oracle.com/javase/7/docs/api/java/text/MessageFormat.html">conversion
format</a>.</p>
-</div>
-<div class="paragraph">
-<p>While this <code>Message</code> has more flexibility than
<code>ParameterizedMessage,</code> it is also about two times slower.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="MultiformatMessage"><a class="anchor"
href="#MultiformatMessage"></a><code>MultiformatMessage</code></h3>
-<div class="paragraph">
-<p>A <code>MultiformatMessage</code> has the <code>getFormats()</code> and
<code>getFormattedMessage()</code> methods that accept an array of format
<code>String</code>s.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/MessageFormatMessage.html"><code>MessageFormatMessage</code></a>
formats its input using <a
href="https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html">Java’s
<code>MessageFormat</code></a>.</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>Layouts may use the <code>getFormats()</code> method to provide information
on the formatting options the message supports.
-The layout may then call <code>getFormattedMessage()</code> with one or more
formats.
-The message will be shown in the default format when the format name is not
recognized.</p>
+<p>While <code>MessageFormatMessage</code> offers more flexibility compared to
<a href="#ParameterizedMessage"><code>ParameterizedMessage</code></a>,
+the latter is engineered for performance, e.g., it is <a
href="garbagefree.html" class="xref page">garbage-free</a>.
+You are recommended to use <code>ParameterizedMessage</code> for
performance-sensitive setups.</p>
</div>
-<div class="paragraph">
-<p>For example, the <code>StructuredDataMessage</code> accepts the
<code>XML</code> format name to format the message as XML instead of the
default RFC5424 format.</p>
+</td>
+</tr>
+</table>
</div>
</div>
<div class="sect2">
<h3 id="ObjectMessage"><a class="anchor"
href="#ObjectMessage"></a><code>ObjectMessage</code></h3>
<div class="paragraph">
-<p>Formats an <code>Object</code> by calling its <code>toString()</code>
method.</p>
-</div>
-<div class="paragraph">
-<p>Since Log4j 2.6, low-garbage or garbage-free layouts call the
<code>formatTo(StringBuilder)</code> method instead.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/ObjectMessage.html"><code>ObjectMessage</code></a>
is a wrapper <code>Message</code> implementation to log custom domain model
instances.
+It formats an input <code>Object</code> by calling its <code>toString()</code>
method.
+If the object is found to be extending from <a
href="#StringBuilderFormattable"><code>StringBuilderFormattable</code></a>, it
uses <code>formatTo(StringBuilder)</code> instead.</p>
</div>
</div>
<div class="sect2">
<h3 id="ParameterizedMessage"><a class="anchor"
href="#ParameterizedMessage"></a><code>ParameterizedMessage</code></h3>
<div class="paragraph">
-<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/ParameterizedMessage.html"><code>ParameterizedMessage</code></a>
handles messages that contain <code>{}</code> in the format to represent
replaceable tokens and the replacement parameters.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/ParameterizedMessage.html"><code>ParameterizedMessage</code></a>
accepts a formatting pattern containing <code>{}</code> placeholders and a
list of arguments.
+It formats the message such that each <code>{}</code> placeholder in the
pattern is replaced with the corresponding argument.</p>
</div>
</div>
<div class="sect2">
<h3 id="ReusableObjectMessage"><a class="anchor"
href="#ReusableObjectMessage"></a><code>ReusableObjectMessage</code></h3>
<div class="paragraph">
-<p><code>ReusableObjectMessage</code> provides functionally equivalent to <a
href="#ObjectMessage"><code>ObjectMessage</code></a>.</p>
-</div>
-<div class="paragraph">
-<p>Log4j uses this message in garbage-free mode to pass logged
<code>Object</code>s to layouts and appenders.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/ReusableObjectMessage.html"><code>ReusableObjectMessage</code></a>
provides functionally equivalent to <a
href="#ObjectMessage"><code>ObjectMessage</code></a>, plus methods to replace
its content to enable <a href="garbagefree.html" class="xref page">Garbage-free
logging</a>.
+When garbage-free logging is enabled, <a href="api.html#loggers" class="xref
page">loggers</a> will use this instead of <a
href="#ObjectMessage"><code>ObjectMessage</code></a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="ReusableParameterizedMessage"><a class="anchor"
href="#ReusableParameterizedMessage"></a><code>ReusableParameterizedMessage</code></h3>
<div class="paragraph">
-<p><code>ReusableParameterizedMessage</code> provides functionally equivalent
to <a href="#ParameterizedMessage"><code>ParameterizedMessage</code></a>.</p>
-</div>
-<div class="paragraph">
-<p>Log4j uses this message in garbage-free mode to handle messages containing
<code>{}</code> in the format representing replaceable tokens and the
replacement parameters.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/ReusableParameterizedMessage.html"><code>ReusableParameterizedMessage</code></a>
provides functionally equivalent to <a
href="#ParameterizedMessage"><code>ParameterizedMessage</code></a>, plus
methods to replace its content to enable <a href="garbagefree.html" class="xref
page">Garbage-free logging</a>.
+When garbage-free logging is enabled, <a href="api.html#loggers" class="xref
page">loggers</a> will use this instead of <a
href="#ParameterizedMessage"><code>ParameterizedMessage</code></a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="ReusableSimpleMessage"><a class="anchor"
href="#ReusableSimpleMessage"></a><code>ReusableSimpleMessage</code></h3>
<div class="paragraph">
-<p><code>ReusableSimpleMessage</code> provides functionally equivalent to <a
href="#SimpleMessage"><code>SimpleMessage</code></a>.</p>
-</div>
-<div class="paragraph">
-<p>Log4j uses this message in garbage-free mode to pass logged
<code>String</code> and <code>CharSequence</code> objects to the Layout and
Appenders.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/ReusableSimpleMessage.html"><code>ReusableSimpleMessage</code></a>
provides functionally equivalent to <a
href="#SimpleMessage"><code>SimpleMessage</code></a>, plus methods to replace
its content to enable <a href="garbagefree.html" class="xref page">Garbage-free
logging</a>.
+When garbage-free logging is enabled, <a href="api.html#loggers" class="xref
page">loggers</a> will use this instead of <a
href="#SimpleMessage"><code>SimpleMessage</code></a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="SimpleMessage"><a class="anchor"
href="#SimpleMessage"></a><code>SimpleMessage</code></h3>
<div class="paragraph">
-<p><code>SimpleMessage</code> contains a <code>String</code> or
<code>CharSequence</code> that requires no formatting.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/SimpleMessage.html"><code>SimpleMessage</code></a>
encapsulates a <code>String</code> or <code>CharSequence</code> that requires
no formatting.</p>
</div>
</div>
<div class="sect2">
<h3 id="StringFormattedMessage"><a class="anchor"
href="#StringFormattedMessage"></a><code>StringFormattedMessage</code></h3>
<div class="paragraph">
-<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/StringFormattedMessage.html"><code>StringFormattedMessage</code></a>
-handles messages that use a
-<a
href="https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax">conversion
format</a>
-that is compliant with
-<a
href="https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#format(java.lang.String,%20java.lang.Object…​)">java.lang.String#format()</a>.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/StringFormattedMessage.html"><code>StringFormattedMessage</code></a>
accepts a <a
href="https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#syntax">format
string</a> and a list of arguments.
+It formats the message using <a
href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#format(java.lang.String,%20java.lang.Object…​)">java.lang.String#format()</a>.</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>This message is more flexible than <code>ParameterizedMessage</code>, but
significantly slower.</p>
+<p>While <code>StringFormattedMessage</code> offers more flexibility compared
to <a href="#ParameterizedMessage"><code>ParameterizedMessage</code></a>,
+the latter is engineered for performance, e.g., it is <a
href="garbagefree.html" class="xref page">garbage-free</a>.
+You are recommended to use <code>ParameterizedMessage</code> for
performance-sensitive setups.</p>
+</div>
+</td>
+</tr>
+</table>
</div>
</div>
<div class="sect2">
<h3 id="StructuredDataMessage"><a class="anchor"
href="#StructuredDataMessage"></a><code>StructuredDataMessage</code></h3>
<div class="paragraph">
-<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/StructuredDataMessage.html"><code>StructuredDataMessage</code></a>
-allows applications to add items to a <code>Map</code> and set the ID to allow
Log4j to format the message as a "Structured Data Element."</p>
-</div>
-<div class="paragraph">
-<p>See: <a href="http://tools.ietf.org/html/rfc5424">RFC 5424</a> for
details.</p>
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/StructuredDataMessage.html"><code>StructuredDataMessage</code></a>
formats its content in a way compliant with <a
href="https://datatracker.ietf.org/doc/html/rfc5424#section-6">the Syslog
message format described in RFC 5424</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="ThreadDumpMessage"><a class="anchor"
href="#ThreadDumpMessage"></a><code>ThreadDumpMessage</code></h3>
<div class="paragraph">
-<p>If a <code>ThreadDumpMessage</code> is logged, Log4j generates stack traces
for all threads.
+<p>If a <a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/ThreadDumpMessage.html"><code>ThreadDumpMessage</code></a>
is logged, Log4j generates stack traces for all threads.
These stack traces will include any held locks.</p>
</div>
</div>
-<div class="sect2">
-<h3 id="TimestampMessage"><a class="anchor"
href="#TimestampMessage"></a><code>TimestampMessage</code></h3>
-<div class="paragraph">
-<p>A <code>TimestampMessage</code> provides a <code>getTimestamp()</code>
method that Log4j calls during event construction.
-The timestamp in the Message will be used instead of the current timestamp.</p>
-</div>
-</div>
</div>
</div>
<div class="sect1">
<h2 id="performance"><a class="anchor" href="#performance"></a>Performance</h2>
<div class="sectionbody">
<div class="paragraph">
-<p>Although it may initially seem counterintuitive, there is no performance
benefit to using strings instead of messages.
-Testing has shown that modern JVMs can create and destroy log events quickly,
-especially when encapsulating complex tasks in the <code>Message</code> object
instead of the application.</p>
+<p>As explained in <a href="#usage">Usage</a>, <code>SimpleMessage</code> and
<code>ParameterizedMessage</code> instances are created indirectly while
interacting with <code>Logger</code> methods; <code>info()</code>,
<code>error()</code>, etc.
+In a modern JVM, the allocation cost difference between these
<code>Message</code> instances and plain <code>String</code> objects is
marginal.
+If you observe this cost to be significant enough for your use case, you can
enable <a href="garbagefree.html" class="xref page">Garbage-free logging</a>.
+This will effectively cause <code>Message</code> instances to be recycled and
avoid creating pressure on the garbage collector.
+In such a scenario, if you also have custom message types, consider
implementing <a
href="#StringBuilderFormattable"><code>StringBuilderFormattable</code></a> and
introducing a message recycling mechanism.</p>
+</div>
</div>
-<div class="paragraph">
-<p>Applications that care about
-<a href="garbagefree.html" class="xref page">garbage-free logging</a>
-should consider implementing both the <code>Message</code> and
-<a
href="../javadoc/log4j-api/org/apache/logging/log4j/util/StringBuilderFormattable.html"><code>StringBuilderFormattable</code></a>,
-which allows to format a message without the creation of temporary
<code>String</code> objects.</p>
</div>
+<div class="sect1">
+<h2 id="extending"><a class="anchor" href="#extending"></a>Extending</h2>
+<div class="sectionbody">
<div class="paragraph">
-<p>Implementing <code>StringBuilderFormattable</code> is straightforward:</p>
+<p>If <a href="#collection">predefined message types</a> fall short of
addressing your needs, you can extend from the <a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/Message.html"><code>Message</code></a>
interface to either create your own message types or make your domain models
take control of the message formatting.</p>
</div>
+<details>
+<summary class="title">Example custom message class</summary>
+<div class="content">
<div class="listingblock">
+<div class="title">Snippet from <a
href="https://raw.githubusercontent.com/apache/logging-log4j2/2.x/src/site/antora/modules/ROOT/examples/manual/messages/CustomMessageExample.java"><code>CustomMessageExample.java</code></a></div>
<div class="content">
<pre class="highlightjs highlight"><code class="language-java hljs"
data-lang="java">record LoginFailureEvent(String userName, InetSocketAddress
remoteAddress)
implements Message, StringBuilderFormattable { <i class="conum"
data-value="1"></i><b>(1)</b>
+
@Override
public void formatTo(StringBuilder buffer) { <i class="conum"
data-value="2"></i><b>(2)</b>
buffer.append("Connection closed by authenticating user ")
@@ -818,7 +835,7 @@ which allows to format a message without the creation of
temporary <code>String<
formatTo(buffer);
return buffer.toString();
}
- // Other methods
+
}</code></pre>
</div>
</div>
@@ -826,19 +843,66 @@ which allows to format a message without the creation of
temporary <code>String<
<table>
<tr>
<td><i class="conum" data-value="1"></i><b>1</b></td>
-<td>Developers need to implement both the <code>Message</code> and
<code>StringBuilderformattable</code> interface.</td>
+<td>Extending from both <code>Message</code> and <a
href="#StringBuilderFormattable"><code>StringBuilderFormattable</code></a>
interfaces</td>
</tr>
<tr>
<td><i class="conum" data-value="2"></i><b>2</b></td>
-<td>The <code>formatTo()</code> method formats the message directly into a
buffer.</td>
+<td>Formats the message directly into a <code>StringBuilder</code></td>
</tr>
<tr>
<td><i class="conum" data-value="3"></i><b>3</b></td>
-<td>The <code>getFormattedMessage()</code> method can be easily implemented in
terms of <code>formatTo()</code>.</td>
+<td><code>getFormattedMessage()</code> reuses <code>formatTo()</code></td>
</tr>
</table>
</div>
</div>
+</details>
+<div class="sect2">
+<h3 id="format-type"><a class="anchor" href="#format-type"></a>Format type</h3>
+<div class="paragraph">
+<p>The <a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/Message.html"><code>Message</code></a>
interface supports the notion of <em>format</em> (e.g., JSON, XML) through its
<code>getFormat()</code> method of return type <code>String</code>.
+Layouts leverage this mechanism to encode a message in a particular format.
+For instance, when <a href="json-template-layout.html" class="xref page">JSON
Template Layout</a> figures out that <code>getFormat()</code> of a
<code>Message</code> returns <code>JSON</code>, it injects the
<code>Message#getFormattedMessage()</code> output as is without quoting it.
+This way a message implementation can communicate its support for a particular
encoding.
+If you want to support multiple formats, extend from <a
href="#MultiformatMessage"><code>MultiformatMessage</code></a> instead.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="marker-interfaces"><a class="anchor"
href="#marker-interfaces"></a>Marker interfaces</h3>
+<div class="paragraph">
+<p>There are certain Log4j API interfaces that you can <em>optionally</em>
extend from in your <code>Message</code> implementations to enable associated
features:</p>
+</div>
+<div class="sect3">
+<h4 id="LoggerNameAwareMessage"><a class="anchor"
href="#LoggerNameAwareMessage"></a><code>LoggerNameAwareMessage</code></h4>
+<div class="paragraph">
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/LoggerNameAwareMessage.html"><code>LoggerNameAwareMessage</code></a>
is a marker interface with a <code>setLoggerName(String)</code> method.
+This method will be called during event construction to pass the associated
<code>Logger</code> to the <code>Message</code>.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="MultiformatMessage"><a class="anchor"
href="#MultiformatMessage"></a><code>MultiformatMessage</code></h4>
+<div class="paragraph">
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/MultiformatMessage.html"><code>MultiformatMessage</code></a>
extends from <code>Message</code> to support multiple <a
href="#format-type">format types</a>.
+For example, see <a
href="https://github.com/apache/logging-log4j2/tree/2.x/log4j-api/src/main/java/org/apache/logging/log4j/message/MapMessage.java"><code>MapMessage.java</code></a>
extending from <code>MultiformatMessage</code> to support multiple formats;
XML, JSON, etc.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="StringBuilderFormattable"><a class="anchor"
href="#StringBuilderFormattable"></a><code>StringBuilderFormattable</code></h4>
+<div class="paragraph">
+<p>Many <a href="layouts.html" class="xref page">layouts</a> recycle
<code>StringBuilder</code>s to encode log events <a href="garbagefree.html"
class="xref page">without generating garbage</a>, and this effectively results
in significant <a href="performance.html" class="xref page">performance</a>
benefits.
+<a
href="../javadoc/log4j-api/org/apache/logging/log4j/util/StringBuilderFormattable.html"><code>StringBuilderFormattable</code></a>
is the primary interface facilitating the formatting of objects to a
<code>StringBuilder</code>.
+<strong>You are strongly advised to implement this interface in your custom
<code>Message</code> types.</strong></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="TimestampMessage"><a class="anchor"
href="#TimestampMessage"></a><code>TimestampMessage</code></h4>
+<div class="paragraph">
+<p><a
href="../javadoc/log4j-api/org/apache/logging/log4j/message/TimestampMessage.html"><code>TimestampMessage</code></a>
provides a <code>getTimestamp()</code> method that will be called during log
event construction to determine the instant instead of using the current
timestamp.
+<code>Message</code> implementations that want to control the timestamp of the
log event they are encapsulated in, they can extend from
<code>TimestampMessage</code>.</p>
+</div>
+</div>
+</div>
+</div>
</div>
</article>
</div>
diff --git a/plugin-reference.html b/plugin-reference.html
index 49ee5266d4..f8cb2f7965 100644
--- a/plugin-reference.html
+++ b/plugin-reference.html
@@ -1441,7 +1441,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>String?</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"></td>
<td class="tableblock halign-left valign-top"><div class="content"></div></td>
</tr>
diff --git a/release-notes.html b/release-notes.html
index 15d5b31c51..cf758ee117 100644
--- a/release-notes.html
+++ b/release-notes.html
@@ -431,7 +431,7 @@
<p>Update <code>apache/logging-parent</code> to version `` (<a
href="https://github.com/apache/logging-log4j2/pull/2597">2597</a>)</p>
</li>
<li>
-<p>Update <code>co.elastic.clients:elasticsearch-java</code> to version
<code>8.13.4</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2573">2573</a>)</p>
+<p>Update <code>co.elastic.clients:elasticsearch-java</code> to version
<code>8.14.0</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2644">2644</a>)</p>
</li>
<li>
<p>Update <code>com.fasterxml.jackson:jackson-bom</code> to version
<code>2.17.1</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2570">2570</a>)</p>
@@ -440,7 +440,10 @@
<p>Update <code>com.github.luben:zstd-jni</code> to version
<code>1.5.6-3</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2501">2501</a>)</p>
</li>
<li>
-<p>Update <code>com.google.guava:guava</code> to version
<code>33.2.0-jre</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2564">2564</a>)</p>
+<p>Update <code>com.google.guava:guava</code> to version
<code>33.2.1-jre</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2636">2636</a>)</p>
+</li>
+<li>
+<p>Update <code>com.gradle:develocity-maven-extension</code> to version
<code>1.21.4</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2642">2642</a>)</p>
</li>
<li>
<p>Update <code>commons-codec:commons-codec</code> to version
<code>1.17.0</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2543">2543</a>)</p>
@@ -491,6 +494,12 @@
<p>Update <code>org.hdrhistogram:HdrHistogram</code> to version
<code>2.2.2</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2627">2627</a>)</p>
</li>
<li>
+<p>Update <code>org.hsqldb:hsqldb</code> to version <code>2.7.3</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2631">2631</a>)</p>
+</li>
+<li>
+<p>Update <code>org.jctools:jctools-core</code> to version <code>4.0.5</code>
(<a href="https://github.com/apache/logging-log4j2/pull/2637">2637</a>)</p>
+</li>
+<li>
<p>Update log4j-mongodb3 <code>org.mongodb:*</code> to version
<code>3.12.14</code> (<a
href="https://github.com/apache/logging-log4j2/pull/2409">2409</a>)</p>
</li>
<li>
diff --git a/sitemap.xml b/sitemap.xml
index d9f929425e..81c7d92bf6 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -2,238 +2,238 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://logging.apache.org/log4j/2.x/development.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/download.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/faq.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/hibernate.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/index.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/javadoc.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-1.2-api.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-appserver.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-cassandra.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-couchdb.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-docker.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-flume-ng.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-iostreams.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-jakarta-web.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-spring-boot.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-spring-cloud-config-client.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-spring-cloud-config.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-taglib.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-web.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/api.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/appenders.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/architecture.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/async.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/cloud.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/compatibility.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/configuration.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/customconfig.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/customloglevels.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/eventlogging.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/extending.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/filters.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/flowtracing.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/garbagefree.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/getting-started.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/index.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/installation.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/jmx.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/json-template-layout.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/layouts.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/logbuilder.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/logsep.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/lookups.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/markers.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/messages.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/migration.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/performance.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/plugins.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/resource-logger.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/scoped-context.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/scripts.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/simple-logger.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/status-logger.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/systemproperties.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/thread-context.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/webapp.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/migrate-from-logback.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/migrate-from-slf4j.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/plugin-reference.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/release-notes.html</loc>
-<lastmod>2024-05-31T13:43:15.349Z</lastmod>
+<lastmod>2024-06-11T09:23:39.765Z</lastmod>
</url>
</urlset>