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&#8217;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&#8217;s sake let us look at a possible log event formatted as 
JSON:</p>
+<p>For clarity&#8217;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&#8217;s 
UI render the events in the client&#8217;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&#8217;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&#8230;&#8203;)">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&#8230;&#8203;)">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>

Reply via email to