You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gi...@apache.org on 2024/08/01 13:18:55 UTC

(logging-log4j2) branch 2.x-site-stg-out updated: Add website content generated from `eaae9e381181066856565706551f4746e8ab5102`

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 64d277638e Add website content generated from `eaae9e381181066856565706551f4746e8ab5102`
64d277638e is described below

commit 64d277638e26d6d776b9472d7fb0898e80a1c61f
Author: ASF Logging Services RM <pr...@logging.apache.org>
AuthorDate: Thu Aug 1 13:18:50 2024 +0000

    Add website content generated from `eaae9e381181066856565706551f4746e8ab5102`
---
 development.html                         |    8 +-
 download.html                            |    8 +-
 faq.html                                 |    8 +-
 hibernate.html                           |    8 +-
 index.html                               |    8 +-
 jakarta.html                             |    8 +-
 javadoc.html                             |    8 +-
 log4j-cassandra.html                     |    8 +-
 log4j-couchdb.html                       |    8 +-
 log4j-docker.html                        |    8 +-
 log4j-flume-ng.html                      |    8 +-
 log4j-iostreams.html                     |    8 +-
 log4j-jul.html                           |    8 +-
 log4j-spring-boot.html                   |    8 +-
 log4j-spring-cloud-config-client.html    |    8 +-
 log4j-spring-cloud-config.html           |    8 +-
 log4j-to-jul.html                        |    8 +-
 manual/api.html                          |    8 +-
 manual/appenders.html                    | 2051 +++++-------------------
 manual/appenders/delegating.html         | 2571 ++++++++++++++++++++++++++++++
 manual/appenders/file.html               |  737 +++++++++
 manual/{ => appenders}/rolling-file.html |  314 ++--
 manual/architecture.html                 |    8 +-
 manual/async.html                        |    8 +-
 manual/compatibility.html                |    8 +-
 manual/config-intro.html                 |    8 +-
 manual/configuration.html                |    8 +-
 manual/customconfig.html                 |    8 +-
 manual/customloglevels.html              |    8 +-
 manual/eventlogging.html                 |    8 +-
 manual/extending.html                    |    8 +-
 manual/filters.html                      |    8 +-
 manual/flowtracing.html                  |    8 +-
 manual/garbagefree.html                  |    8 +-
 manual/getting-started.html              |    8 +-
 manual/index.html                        |    8 +-
 manual/installation.html                 |    8 +-
 manual/jmx.html                          |    8 +-
 manual/json-template-layout.html         |    8 +-
 manual/layouts.html                      |    8 +-
 manual/logbuilder.html                   |    8 +-
 manual/lookups.html                      |    8 +-
 manual/markers.html                      |    8 +-
 manual/messages.html                     |    8 +-
 manual/pattern-layout.html               |    8 +-
 manual/performance.html                  |    8 +-
 manual/plugins.html                      |    8 +-
 manual/resource-logger.html              |    8 +-
 manual/scoped-context.html               |    8 +-
 manual/scripts.html                      |    8 +-
 manual/simple-logger.html                |    8 +-
 manual/status-logger.html                |    8 +-
 manual/systemproperties.html             |    8 +-
 manual/thread-context.html               |    8 +-
 migrate-from-log4j1.html                 |    8 +-
 migrate-from-logback.html                |    8 +-
 migrate-from-slf4j.html                  |    8 +-
 plugin-reference.html                    |   10 +-
 release-notes.html                       |   17 +-
 sitemap.xml                              |  130 +-
 soa.html                                 |    8 +-
 61 files changed, 4316 insertions(+), 1946 deletions(-)

diff --git a/development.html b/development.html
index b43084f895..f77f6a99c3 100644
--- a/development.html
+++ b/development.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/download.html b/download.html
index 14b7cece37..01974403eb 100644
--- a/download.html
+++ b/download.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/faq.html b/faq.html
index 1b0c865dca..31748ed3ff 100644
--- a/faq.html
+++ b/faq.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/hibernate.html b/hibernate.html
index aa1c975141..a4056f40b3 100644
--- a/hibernate.html
+++ b/hibernate.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/index.html b/index.html
index 8866ce573a..eac5cc3200 100644
--- a/index.html
+++ b/index.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/jakarta.html b/jakarta.html
index d4072e7dae..e3e6c5d8e0 100644
--- a/jakarta.html
+++ b/jakarta.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/javadoc.html b/javadoc.html
index f274ba50d9..5d299c8352 100644
--- a/javadoc.html
+++ b/javadoc.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/log4j-cassandra.html b/log4j-cassandra.html
index cfc618fbfa..764b7abe04 100644
--- a/log4j-cassandra.html
+++ b/log4j-cassandra.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/log4j-couchdb.html b/log4j-couchdb.html
index 60d60e52d0..99e4d38ef1 100644
--- a/log4j-couchdb.html
+++ b/log4j-couchdb.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/log4j-docker.html b/log4j-docker.html
index b4c4f1bd7f..2b10a1d157 100644
--- a/log4j-docker.html
+++ b/log4j-docker.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/log4j-flume-ng.html b/log4j-flume-ng.html
index 086331c0e8..81e5c70f05 100644
--- a/log4j-flume-ng.html
+++ b/log4j-flume-ng.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/log4j-iostreams.html b/log4j-iostreams.html
index 0318807fda..b913a765a5 100644
--- a/log4j-iostreams.html
+++ b/log4j-iostreams.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/log4j-jul.html b/log4j-jul.html
index e0d3788e1d..e894dc2758 100644
--- a/log4j-jul.html
+++ b/log4j-jul.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/log4j-spring-boot.html b/log4j-spring-boot.html
index a1e0c5d5b3..f861dad54a 100644
--- a/log4j-spring-boot.html
+++ b/log4j-spring-boot.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/log4j-spring-cloud-config-client.html b/log4j-spring-cloud-config-client.html
index 812fcefecd..3aceb70b91 100644
--- a/log4j-spring-cloud-config-client.html
+++ b/log4j-spring-cloud-config-client.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/log4j-spring-cloud-config.html b/log4j-spring-cloud-config.html
index 859dc0342f..1656ee229d 100644
--- a/log4j-spring-cloud-config.html
+++ b/log4j-spring-cloud-config.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/log4j-to-jul.html b/log4j-to-jul.html
index cf02effcc4..1d3d42b441 100644
--- a/log4j-to-jul.html
+++ b/log4j-to-jul.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/api.html b/manual/api.html
index 65051b94c1..3cd1c815fa 100644
--- a/manual/api.html
+++ b/manual/api.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/appenders.html b/manual/appenders.html
index 781710bfa7..e0ef219558 100644
--- a/manual/appenders.html
+++ b/manual/appenders.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
@@ -352,30 +358,36 @@
 <div id="preamble">
 <div class="sectionbody">
 <div class="paragraph">
-<p>Appenders are responsible for delivering LogEvents to their destination.
+<p>Appenders are responsible for delivering log events to their destination.
 Every Appender must implement the
 <a href="../javadoc/log4j-core/org/apache/logging/log4j/core/Appender.html"><code>Appender</code></a>
-interface.
-Most Appenders will extend
-<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/AbstractAppender.html"><code>AbstractAppender</code></a>
-which adds
-<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/LifeCycle.html"><code>Lifecycle</code></a>
-and
-<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/filter/Filterable.html"><code>Filterable</code></a>
-support. <code>Lifecycle</code> allows components to finish initialization after configuration has been completed and to perform cleanup during shutdown.
-<code>Filterable</code> allows the component to have <code>Filter</code> attached to it which are evaluated during event processing.</p>
+interface.</p>
 </div>
 <div class="paragraph">
-<p>Appenders usually are only responsible for writing the event data to the target destination.
-In most cases, they delegate responsibility for formatting the event to a <a href="layouts.html" class="xref page">layout</a>.
-Some appenders wrap other appenders so that they can modify the <code>LogEvent</code>, handle a failure in an <code>Appender</code>, route the event to a subordinate <code>Appender</code> based on advanced <code>Filter</code> criteria or provide similar functionality that does not directly format the event for viewing.</p>
+<p>While not strictly required by the Log4j Core architecture, most appenders inherit from
+<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/AbstractAppender.html"><code>AbstractAppender</code></a>
+and:</p>
 </div>
-<div class="paragraph">
-<p>Appenders always have a name so that they can be referenced from Loggers.</p>
+<div class="ulist">
+<ul>
+<li>
+<p>delegate the filtering of log events to an implementation of
+<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/Filter.html"><code>Filter</code></a>.
+See <a href="filters.html" class="xref page">Filters</a> for more information.</p>
+</li>
+<li>
+<p>delegate the formatting of log events to an implementation of
+<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/Layout.html"><code>Layout</code></a>.
+See <a href="layouts.html" class="xref page">Layouts</a> for more information.</p>
+</li>
+<li>
+<p>only directly handle the writing of log event data to the target destination.</p>
+</li>
+</ul>
 </div>
 <div class="paragraph">
-<p>In the tables below, the "Type" column corresponds to the Java type expected.
-For non-JDK classes, these should usually be in <a href="../javadoc/log4j-core/index.html">Log4j Core</a> unless otherwise noted.</p>
+<p>Appenders always have a name so that they can be referenced from a
+<a href="configuration.html#configuring-loggers" class="xref page">logger configuration</a>.</p>
 </div>
 </div>
 </div>
@@ -414,7 +426,7 @@ configuration property is enabled,</p>
 <p>at the end of each log event batch, if
 <a href="async.html" class="xref page">asynchronous loggers</a>
 or
-<a href="#AsyncAppender">appenders</a>
+<a href="appenders/delegating.html#AsyncAppender" class="xref page">appenders</a>
 are used.</p>
 </li>
 <li>
@@ -530,7 +542,10 @@ It does not ensure that the operating system writes the event to the underlying
 </td>
 <td class="content">
 <div class="paragraph">
-<p>If you are using <a href="async.html" class="xref page">asynchronous loggers</a> or <a href="#AsyncAppender">appenders</a>, you can set this attribute to <code>false</code>.
+<p>If you are using
+<a href="async.html" class="xref page">asynchronous loggers</a>
+or
+<a href="appenders/delegating.html#AsyncAppender" class="xref page">appenders</a>, you can set this attribute to <code>false</code>.
 Log4j Core will still flush the internal buffer, whenever the log event queue becomes empty.</p>
 </div>
 </td>
@@ -540,9 +555,55 @@ Log4j Core will still flush the internal buffer, whenever the log event queue be
 </div>
 </div>
 <div class="sect2">
+<h3 id="exception-handling"><a class="anchor" href="#exception-handling"></a>Exception handling</h3>
+<div class="paragraph">
+<p>By default, Log4j Core uses <a href="status-logger.html" class="xref page">Status Logger</a> to report exceptions that occur in appenders.
+This behavior can be changed using the following configuration property:</p>
+</div>
+<div class="sect3">
+<h4 id="ignoreExceptions"><a class="anchor" href="#ignoreExceptions"></a><code>ignoreExceptions</code></h4>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 83.3334%;">
+</colgroup>
+<tbody>
+<tr>
+<th class="tableblock halign-left valign-top"><p class="tableblock">Type</p></th>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+</tr>
+<tr>
+<th class="tableblock halign-left valign-top"><p class="tableblock">Default value</p></th>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>If <code>false</code> logging exceptions will be forwarded to the caller.
+Otherwise, they will be logged using <a href="status-logger.html" class="xref page">Status Logger</a>.</p>
+</div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>If logging is important for your business, consider using a
+<a href="appenders/delegating.html#FailoverAppender" class="xref page"><code>Failover</code> Appender</a>
+to redirect log events to a different appender in case of exceptions.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect2">
 <h3 id="runtime-evaluation"><a class="anchor" href="#runtime-evaluation"></a>Runtime evaluation of attributes</h3>
 <div class="paragraph">
-<p>The following configuration attributes are also evaluated at runtime, so can contain escaped <code>$${...}</code> expressions.</p>
+<p>The following configuration attributes are also evaluated at runtime, so can contain escaped <code>$${...}</code> property substitution expressions.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
 <caption class="title">Table 1. List of attributes evaluated at runtime</caption>
@@ -562,52 +623,56 @@ Log4j Core will still flush the internal buffer, whenever the log event queue be
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#HttpAppender"><code>HttpAppender</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#HttpAppender">HTTP Appender</a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#HttpAppender-element-headers"><code>Property/value</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Log event</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="lookups.html#global-context" class="xref page"><em>global</em></a></p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#KafkaAppender"><code>KafkaAppender</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#KafkaAppender">Kafka Appender</a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#KafkaAppender-attr-key"><code>key</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Log event</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="lookups.html#global-context" class="xref page"><em>global</em></a></p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#NoSQLAppender"><code>NoSQLAppender</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#NoSQLAppender">NoSQL Appender</a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#NoSqlAppender-element-keyValuePairs"><code>KeyValuePair/value</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Log event</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="lookups.html#global-context" class="xref page"><em>global</em></a></p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#PropertiesRewritePolicy"><code>PropertiesRewritePolicy</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#PropertiesRewritePolicy-element-properties"><code>Property/value</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="appenders/delegating.html#PropertiesRewritePolicy" class="xref page">PropertiesRewrite Policy</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="appenders/delegating.html#PropertiesRewritePolicy-element-Property" class="xref page"><code>Property/value</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Log event</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="lookups.html#global-context" class="xref page"><em>global</em></a></p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#Routes"><code>Routes</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>pattern</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="appenders/delegating.html#Routes" class="xref page">Routes Container</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="appenders/delegating.html#Routes-attr-pattern" class="xref page"><code>pattern</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Log event</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="lookups.html#event-context" class="xref page"><em>log event</em></a></p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="rolling-file.html" class="xref page"><code>RollingFileAppender</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="rolling-file.html#attr-filePattern" class="xref page"><code>filePattern</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="appenders/rolling-file.html" class="xref page">Rolling File Appenders</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="appenders/rolling-file.html#attr-filePattern" class="xref page"><code>filePattern</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Rollover</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="lookups.html#global-context" class="xref page"><em>global</em></a></p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="rolling-file.html#AbstractPathAction" class="xref page">Optional actions</a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code>basePath</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="appenders/rolling-file.html#AbstractPathAction" class="xref page">Optional Rollover Actions</a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="appenders/rolling-file.html#AbstractPathAction-attr-basePath" class="xref page"><code>basePath</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Rollover</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="lookups.html#global-context" class="xref page"><em>global</em></a></p></td>
 </tr>
 </tbody>
 </table>
 <div class="paragraph">
-<p>The <a href="#Routes"><code>Route</code></a> component of the <a href="#RoutingAppender"><code>RoutingAppender</code></a> is special: its children are evaluated at runtime, but they are <strong>not</strong> evaluated at configuration time.
-Inside the <code>Route</code> component you <strong>should not</strong> use escaped <code>$${...}</code> expressions, but only unescaped <code>${...}</code> expressions.</p>
+<p>The
+<a href="appenders/delegating.html#Route" class="xref page"><code>Route</code></a>
+component of the
+<a href="appenders/delegating.html#RoutingAppender" class="xref page">Routing Appender</a>
+is special: its children are evaluated at runtime, but they are <strong>not</strong> evaluated at configuration time.
+Inside the <code>Route</code> component you <strong>should not</strong> use escaped <code>$${...}</code> property substitution expressions, but only unescaped <code>${...}</code> property substitution expressions.</p>
 </div>
 <div class="paragraph">
 <p>See <a href="configuration.html#lazy-property-substitution" class="xref page">runtime property substitution</a> for more details.</p>
@@ -620,259 +685,55 @@ Inside the <code>Route</code> component you <strong>should not</strong> use esca
 <div class="sectionbody">
 <div class="paragraph">
 <p>Log4j bundles several predefined appenders to assist in several common deployment use cases.
-Following sections explain all these in detail.</p>
+They are documented in separate pages based on their target resource:</p>
 </div>
 <div class="sect2">
-<h3 id="AsyncAppender"><a class="anchor" href="#AsyncAppender"></a><a id="asyncappender"></a> AsyncAppender</h3>
-<div class="paragraph">
-<p>The AsyncAppender accepts references to other Appenders and causes LogEvents to be written to them on a separate Thread.
-Note that exceptions while writing to those Appenders will be hidden from the application.
-The AsyncAppender should be configured after the appenders it references to allow it to shut down properly.</p>
-</div>
-<div class="paragraph">
-<p>By default, AsyncAppender uses
-<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ArrayBlockingQueue.html"><code>java.util.concurrent.ArrayBlockingQueue</code></a>
-which does not require any external libraries.
-Note that multi-threaded applications should exercise care when using this appender as such: the blocking queue is susceptible to lock contention and our
-<a href="performance.html#async" class="xref page">tests showed</a> performance may become worse when more threads are logging concurrently.
-Consider using
-<a href="async.html" class="xref page">lock-free Async Loggers</a> for optimal performance.</p>
-</div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>Log4j 2 brought the following enhancements to the Log4j 1 async appender:</p>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p>all appenders referenced by <code>AsyncAppender</code> flush their buffers to the OS at the end of a batch, when the queue becomes empty.
-This guarantees that the batch of log events is passed to the OS and is a more performant version of the <a href="#immediateFlush"><code>immediateFlush</code></a> attribute.</p>
-<div class="admonitionblock warning">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-warning" title="Warning"></i>
-</td>
-<td class="content">
-Similarly to what happens with the <code>immediateFlush</code> attribute, this does not guarantee that the OS stores the data on the underlying device.
-</td>
-</tr>
-</table>
-</div>
-</li>
-<li>
-<p>the type of queue is configurable to allow users to use faster and more performant queues, such as those from the
-<a href="https://github.com/JCTools/JCTools?tab=readme-ov-file#jctools">JCTools</a>
-or
-<a href="https://github.com/conversant/disruptor">Conversant Disruptor</a> projects.</p>
-</li>
-</ul>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 2. AsyncAppender Parameters</caption>
-<colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">AppenderRef</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the Appenders to invoke
-asynchronously. Multiple AppenderRef elements can be configured.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">blocking</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">If true, the appender will wait until there are free
-slots in the queue. If false, the event will be written to the error
-appender if the queue is full. The default is true.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">shutdownTimeout</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">How many milliseconds the Appender should
-wait to flush outstanding log events in the queue on shutdown? The
-default is zero which means to wait forever.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">bufferSize</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>Specifies the maximum number of events that can be queued. The default
-is 1024. Note that when using a disruptor-style <code>BlockingQueue</code>, this
-buffer size must be a power of 2.</p>
-</div>
-<div class="paragraph">
-<p>When the application is logging faster than the underlying appender can
-keep up with for a long enough time to fill up the queue, the behavior
-is determined by the
-<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/async/AsyncQueueFullPolicy.html"><code>AsyncQueueFullPolicy</code></a>.</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">errorRef</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the Appender to invoke if none of the
-appenders can be called, either due to errors in the appenders or
-because the queue is full. If not specified then errors will be ignored.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">A Filter to determine if the event should be handled by
-this Appender. More than one Filter may be used by using a
-CompositeFilter.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the Appender.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">ignoreExceptions</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions
-encountered while appending events to be internally logged and then
-ignored. When set to <code>false</code> exceptions will be propagated to the
-caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a &lt;FailoverAppender&gt;&gt;.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">includeLocation</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Extracting location is an expensive operation
-(it can make logging 5 - 20 times slower). To improve performance,
-location is not included by default when adding a log event to the
-queue. You can change this by setting includeLocation="true".</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">BlockingQueueFactory</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">BlockingQueueFactory</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">This element overrides what type of <code>BlockingQueue</code> to use.
-See <a href="#BlockingQueueFactory">below documentation</a> for more details.</p></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>There are also a few system properties that can be used to maintain application throughput even when the underlying appender cannot keep up with the logging rate and the queue is filling up.
-See the details for system properties
-<a href="systemproperties.html#log4j2.asyncQueueFullPolicy" class="xref page"><code>log4j2.asyncQueueFullPolicy</code></a>
-and
-<a href="systemproperties.html#log4j2.discardThreshold" class="xref page"><code>log4j2.DiscardThreshold</code></a>.</p>
-</div>
+<h3 id="file-appenders"><a class="anchor" href="#file-appenders"></a>File appenders</h3>
 <div class="paragraph">
-<p>A typical AsyncAppender configuration might look like this:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="warn" name="MyApp"&gt;
-  &lt;Appenders&gt;
-    &lt;File name="MyFile" fileName="logs/app.log"&gt;
-      &lt;PatternLayout&gt;
-        &lt;Pattern&gt;%d %p %c{1.} [%t] %m%n&lt;/Pattern&gt;
-      &lt;/PatternLayout&gt;
-    &lt;/File&gt;
-    &lt;Async name="Async"&gt;
-      &lt;AppenderRef ref="MyFile"/&gt;
-    &lt;/Async&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="Async"/&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
+<p>File appenders write logs to the filesystem.
+They can be further split into:</p>
 </div>
-<div id="BlockingQueueFactory" class="paragraph">
-<p>Starting in Log4j 2.7, a custom implementation of <code>BlockingQueue</code> or <code>TransferQueue</code> can be specified using a
-<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/async/BlockingQueueFactory.html"><code>BlockingQueueFactory</code></a>
-plugin.
-To override the default <code>BlockingQueueFactory</code>, specify the plugin inside an <code>&lt;Async/&gt;</code> element like so:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;Configuration name="LinkedTransferQueueExample"&gt;
-  &lt;Appenders&gt;
-    &lt;List name="List"/&gt;
-    &lt;Async name="Async" bufferSize="262144"&gt;
-      &lt;AppenderRef ref="List"/&gt;
-      &lt;LinkedTransferQueue/&gt;
-    &lt;/Async&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root&gt;
-      &lt;AppenderRef ref="Async"/&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
+<div class="dlist">
+<dl>
+<dt class="hdlist1">Single file appenders</dt>
+<dd>
+<p>See <a href="appenders/file.html" class="xref page">File appenders</a> for details.</p>
+</dd>
+<dt class="hdlist1">Rolling file appenders</dt>
+<dd>
+<p>See <a href="appenders/rolling-file.html" class="xref page">Rolling file appenders</a> for details.</p>
+</dd>
+</dl>
 </div>
 </div>
-<div class="paragraph">
-<p>Log4j ships with the following implementations:</p>
+<div class="sect2">
+<h3 id="delegating-appenders"><a class="anchor" href="#delegating-appenders"></a>Delegating appenders</h3>
+<div class="paragraph">
+<p>Delegating appenders are intended to decorate other appenders:</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><a href="appenders/delegating.html#AsyncAppender" class="xref page">Asynchronous appender</a></dt>
+<dd>
+<p>Perform all I/O on a dedicated thread</p>
+</dd>
+<dt class="hdlist1"><a href="appenders/delegating.html#FailoverAppender" class="xref page">Failover appender</a></dt>
+<dd>
+<p>Provide a backup appender in case an appender fails</p>
+</dd>
+<dt class="hdlist1"><a href="appenders/delegating.html#RewriteAppender" class="xref page">Rewrite appender</a></dt>
+<dd>
+<p>Modify log events prior to delivering them to the target</p>
+</dd>
+<dt class="hdlist1"><a href="appenders/delegating.html#RoutingAppender" class="xref page">Routing appender</a></dt>
+<dd>
+<p>Dynamically choose a different appender for each log event</p>
+</dd>
+</dl>
+</div>
+<div class="paragraph">
+<p>See <a href="appenders/delegating.html" class="xref page">Delegating Appenders</a> for details.</p>
 </div>
-<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 3. BlockingQueueFactory Implementations</caption>
-<colgroup>
-<col style="width: 25%;">
-<col style="width: 75%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Plugin Name</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">ArrayBlockingQueue</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">This is the default implementation that uses
-<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ArrayBlockingQueue.html"><code>ArrayBlockingQueue</code></a>.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">DisruptorBlockingQueue</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">This uses the
-<a href="https://github.com/conversant/disruptor">Conversant Disruptor</a>
-implementation of <code>BlockingQueue</code>. This plugin takes a single optional
-attribute, <code>spinPolicy</code>, which corresponds to the <code>SpinPolicy</code> enum.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">JCToolsBlockingQueue</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">This uses
-<a href="https://jctools.github.io/JCTools/">JCTools</a>, specifically the MPSC
-bounded lock-free queue.
-This implementation is provided by the <code>log4j-jctools</code> artifact.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">LinkedTransferQueue</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">This uses the new Java 7 implementation
-<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedTransferQueue.html"><code>LinkedTransferQueue</code></a>.
-Note that this queue does not use the <code>bufferSize</code> configuration
-attribute from AsyncAppender as <code>LinkedTransferQueue</code> does not support a
-maximum capacity.</p></td>
-</tr>
-</tbody>
-</table>
 </div>
 <div class="sect2">
 <h3 id="CassandraAppender"><a class="anchor" href="#CassandraAppender"></a>CassandraAppender</h3>
@@ -887,7 +748,7 @@ A conversion type compatible with <code>java.util.Date</code> will use the log e
 <code>timestamp</code> column type in Cassandra).</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 4. CassandraAppender Parameters</caption>
+<caption class="title">Table 2. CassandraAppender Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -1051,7 +912,7 @@ TimestampGenerator. By default, this is <code>false</code>.</p></td>
 A Layout must be provided to format the LogEvent.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 5. ConsoleAppender Parameters</caption>
+<caption class="title">Table 3. ConsoleAppender Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -1110,7 +971,7 @@ been tested with Oracle JVM on Linux and Windows so far.</em></p></td>
 encountered while appending events to be internally logged and then
 ignored. When set to <code>false</code> exceptions will be propagated to the
 caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
+Appender in a <a href="#FailoverAppender">[FailoverAppender]</a>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">target</p></td>
@@ -1142,13 +1003,38 @@ Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
 </div>
 </div>
 <div class="sect2">
-<h3 id="FailoverAppender"><a class="anchor" href="#FailoverAppender"></a>FailoverAppender</h3>
+<h3 id="FlumeAppender"><a class="anchor" href="#FlumeAppender"></a>FlumeAppender</h3>
+<div class="paragraph">
+<p><em>This is an optional component supplied in a separate jar.</em></p>
+</div>
+<div class="paragraph">
+<p><a href="https://flume.apache.org/index.html">Apache Flume</a> is a distributed, reliable, and available system for efficiently collecting, aggregating, and moving large amounts of log data from many different sources to a centralized data store.
+The FlumeAppender takes LogEvents and sends them to a Flume agent as serialized Avro events for consumption.</p>
+</div>
+<div class="paragraph">
+<p>The Flume Appender supports three modes of operation.</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>It can act as a remote Flume client which sends Flume events via Avro to a Flume Agent configured with an Avro Source.</p>
+</li>
+<li>
+<p>It can act as an embedded Flume Agent where Flume events pass directly into Flume for processing.</p>
+</li>
+<li>
+<p>It can persist events to a local BerkeleyDB data store and then asynchronously send the events to Flume, similar to the embedded Flume Agent but without most of the Flume dependencies.</p>
+</li>
+</ol>
+</div>
 <div class="paragraph">
-<p>The FailoverAppender wraps a set of appenders.
-If the primary Appender fails the secondary appenders will be tried in order until one succeeds or there are no more secondaries to try.</p>
+<p>Usage as an embedded agent will cause the messages to be directly passed to the Flume Channel and then control will be immediately returned to the application.
+All interaction with remote agents will occur asynchronously.
+Setting the "type" attribute to "Embedded" will force the use of the embedded agent.
+In addition, configuring agent properties in the appender configuration will also cause the embedded agent to be used.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 6. FailoverAppender Parameters</caption>
+<caption class="title">Table 4. FlumeAppender Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -1163,367 +1049,30 @@ If the primary Appender fails the secondary appenders will be tried in order unt
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">A Filter to determine if the event should be handled by
-this Appender. More than one Filter may be used by using a
-CompositeFilter.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">agents</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Agent[]</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">An array of Agents to which the logging events should
+be sent. If more than one agent is specified the first Agent will be the
+primary and subsequent Agents will be used in the order specified as
+secondaries should the primary Agent fail. Each Agent definition
+supplies the Agent&#8217;s host and port. The specification of agents and
+properties are mutually exclusive. If both are configured an error will
+result.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">primary</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the primary Appender to use.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">agentRetries</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The number of times the agent should be retried
+before failing to a secondary. This parameter is ignored when
+<code>type="persistent"</code> is specified (agents are tried once before failing to
+the next).</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">failovers</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String[]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The names of the secondary Appenders to use.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the Appender.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">retryIntervalSeconds</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The number of seconds that should pass
-before retrying the primary Appender. The default is 60.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">ignoreExceptions</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions
-encountered while appending events to be internally logged and then
-ignored. When set to <code>false</code> exceptions will be propagated to the
-caller, instead.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">target</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Either "SYSTEM_OUT" or "SYSTEM_ERR". The default is
-"SYSTEM_ERR".</p></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>A Failover configuration might look like:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="warn" name="MyApp"&gt;
-  &lt;Appenders&gt;
-    &lt;RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz"
-                 ignoreExceptions="false"&gt;
-      &lt;PatternLayout&gt;
-        &lt;Pattern&gt;%d %p %c{1.} [%t] %m%n&lt;/Pattern&gt;
-      &lt;/PatternLayout&gt;
-      &lt;TimeBasedTriggeringPolicy /&gt;
-    &lt;/RollingFile&gt;
-    &lt;Console name="STDOUT" target="SYSTEM_OUT" ignoreExceptions="false"&gt;
-      &lt;PatternLayout pattern="%m%n"/&gt;
-    &lt;/Console&gt;
-    &lt;Failover name="Failover" primary="RollingFile"&gt;
-      &lt;Failovers&gt;
-        &lt;AppenderRef ref="Console"/&gt;
-      &lt;/Failovers&gt;
-    &lt;/Failover&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="Failover"/&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="fileappender"><a class="anchor" href="#fileappender"></a><a id="FileAppender"></a> FileAppender</h3>
-<div class="paragraph">
-<p>The FileAppender is an OutputStreamAppender that writes to the File defined in the <code>fileName</code> parameter.
-The FileAppender uses a FileManager (which extends OutputStreamManager) to perform the file I/O.
-While FileAppenders from different Configurations cannot be shared, the FileManagers can be if the Manager is accessible.
-For example, two web applications in a servlet container can have their configuration and safely write to the same file if Log4j is in a ClassLoader that is common to both of them.</p>
-</div>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-<div class="paragraph">
-<p>The <a href="#FileAppender">FileAppender</a> does not offer a mechanism for external applications to force it to reopen the log file.
-External tools such as
-<a href="https://github.com/logrotate/logrotate"><code>logrotate</code></a>
-cannot rotate log files without losing log events.</p>
-</div>
-<div class="paragraph">
-<p>If you want to rotate your log files, use <a href="rolling-file.html" class="xref page">a rolling file appender</a>.</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 7. FileAppender Parameters</caption>
-<colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">append</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">When true - the default, records will be appended to
-the end of the file. When set to false, the file will be cleared before
-new records are written.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">bufferedIO</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">When true - the default, records will be written
-to a buffer and the data will be written to disk when the buffer is full
-or, if immediateFlush is set, when the record is written. File locking
-cannot be used with <code>bufferedIO</code>. Performance tests have shown that using
-buffered I/O significantly improves performance, even if <code>immediateFlush</code>
-is enabled.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">bufferSize</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">int</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">When <code>bufferedIO</code> is true, this is the buffer size, the
-default is 8192 bytes.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">createOnDemand</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The appender creates the file on-demand. The
-appender only creates the file when a log event passes all filters and
-is routed to this appender. Defaults to false.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">A Filter to determine if the event should be handled by
-this Appender. More than one Filter may be used by using a
-CompositeFilter.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">fileName</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the file to write to. If the file, or any
-of its parent directories, do not exist, they will be created.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">immediateFlush</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>When set to true - the default, each write will be followed by a flush.
-This will guarantee that the data is passed to the operating system for writing;
-it does not guarantee that the data is written to a physical device
-such as a disk drive.</p>
-</div>
-<div class="paragraph">
-<p>Note that if this flag is set to false, and the logging activity is sparse,
-there may be an indefinite delay in the data eventually making it to the
-operating system, because it is held up in a buffer.
-This can cause surprising effects such as the logs not
-appearing in the tail output of a file immediately after writing to the log.</p>
-</div>
-<div class="paragraph">
-<p>Flushing after every write is only useful when using this appender with
-synchronous loggers. Asynchronous loggers and appenders will
-automatically flush at the end of a batch of events, even if
-immediateFlush is set to false. This also guarantees the data is passed
-to the operating system but is more efficient.</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">layout</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Layout</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The Layout to use to format the LogEvent. If no layout
-is supplied the default pattern layout of "%m%n" will be used.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">locking</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">When set to true, I/O operations will occur only
-while the file lock is held allowing FileAppenders in multiple JVMs and
-potentially multiple hosts to write to the same file simultaneously.
-This will significantly impact performance so should be used carefully.
-Furthermore, on many systems, the file lock is "advisory" meaning that
-other applications can perform operations on the file without acquiring
-a lock. The default value is false.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the Appender.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">ignoreExceptions</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions
-encountered while appending events to be internally logged and then
-ignored. When set to <code>false</code> exceptions will be propagated to the
-caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">filePermissions</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>File attribute permissions in POSIX format to apply whenever the file is
-created.</p>
-</div>
-<div class="paragraph">
-<p>The underlying files system shall support
-<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/PosixFileAttributeView.html">POSIX</a>
-file attribute view.</p>
-</div>
-<div class="paragraph">
-<p>Examples: <code>rw-------</code> or <code>rw-rw-rw-</code> etc&#8230;&#8203;</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">fileOwner</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>File owner to define whenever the file is created.</p>
-</div>
-<div class="paragraph">
-<p>Changing the file&#8217;s owner may be restricted for security reasons and
-Operation not permitted IOException thrown. Only processes with an
-effective user ID equal to the user ID of the file or with appropriate
-privileges may change the ownership of a file if
-<a href="http://www.gnu.org/software/libc/manual/html_node/Options-for-Files.html">_POSIX_CHOWN_RESTRICTED</a>
-is in effect for path.</p>
-</div>
-<div class="paragraph">
-<p>The underlying files system shall support file
-<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/FileOwnerAttributeView.html">owner</a>
-attribute view.</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">fileGroup</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>File group to define whenever the file is created.</p>
-</div>
-<div class="paragraph">
-<p>The underlying files system shall support
-<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/PosixFileAttributeView.html">POSIX</a>
-file attribute view.</p>
-</div></div></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>Here is a sample File configuration:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="warn" name="MyApp"&gt;
-  &lt;Appenders&gt;
-    &lt;File name="MyFile" fileName="logs/app.log"&gt;
-      &lt;PatternLayout&gt;
-        &lt;Pattern&gt;%d %p %c{1.} [%t] %m%n&lt;/Pattern&gt;
-      &lt;/PatternLayout&gt;
-    &lt;/File&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="MyFile"/&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="FlumeAppender"><a class="anchor" href="#FlumeAppender"></a>FlumeAppender</h3>
-<div class="paragraph">
-<p><em>This is an optional component supplied in a separate jar.</em></p>
-</div>
-<div class="paragraph">
-<p><a href="https://flume.apache.org/index.html">Apache Flume</a> is a distributed, reliable, and available system for efficiently collecting, aggregating, and moving large amounts of log data from many different sources to a centralized data store.
-The FlumeAppender takes LogEvents and sends them to a Flume agent as serialized Avro events for consumption.</p>
-</div>
-<div class="paragraph">
-<p>The Flume Appender supports three modes of operation.</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>It can act as a remote Flume client which sends Flume events via Avro to a Flume Agent configured with an Avro Source.</p>
-</li>
-<li>
-<p>It can act as an embedded Flume Agent where Flume events pass directly into Flume for processing.</p>
-</li>
-<li>
-<p>It can persist events to a local BerkeleyDB data store and then asynchronously send the events to Flume, similar to the embedded Flume Agent but without most of the Flume dependencies.</p>
-</li>
-</ol>
-</div>
-<div class="paragraph">
-<p>Usage as an embedded agent will cause the messages to be directly passed to the Flume Channel and then control will be immediately returned to the application.
-All interaction with remote agents will occur asynchronously.
-Setting the "type" attribute to "Embedded" will force the use of the embedded agent.
-In addition, configuring agent properties in the appender configuration will also cause the embedded agent to be used.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 8. FlumeAppender Parameters</caption>
-<colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">agents</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Agent[]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">An array of Agents to which the logging events should
-be sent. If more than one agent is specified the first Agent will be the
-primary and subsequent Agents will be used in the order specified as
-secondaries should the primary Agent fail. Each Agent definition
-supplies the Agent&#8217;s host and port. The specification of agents and
-properties are mutually exclusive. If both are configured an error will
-result.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">agentRetries</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The number of times the agent should be retried
-before failing to a secondary. This parameter is ignored when
-<code>type="persistent"</code> is specified (agents are tried once before failing to
-the next).</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">batchSize</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the number of events that should be sent
-as a batch. The default is 1. <em>This parameter only applies to the Flume
-Appender.</em></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">batchSize</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">integer</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the number of events that should be sent
+as a batch. The default is 1. <em>This parameter only applies to the Flume
+Appender.</em></p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">compress</p></td>
@@ -1654,7 +1203,7 @@ wait before timing out the request.</p></td>
 encountered while appending events to be internally logged and then
 ignored. When set to <code>false</code> exceptions will be propagated to the
 caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
+Appender in a <a href="#FailoverAppender">[FailoverAppender]</a>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">type</p></td>
@@ -1809,7 +1358,7 @@ This connection source uses a JDBC connection string, a username, and a password
 Optionally, you can also use properties.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 9. JDBCAppender Parameters</caption>
+<caption class="title">Table 5. JDBCAppender Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -1835,7 +1384,7 @@ Optionally, you can also use properties.</p>
 encountered while appending events to be internally logged and then
 ignored. When set to <code>false</code> exceptions will be propagated to the
 caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
+Appender in a <a href="#FailoverAppender">[FailoverAppender]</a>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">filter</p></td>
@@ -1931,7 +1480,7 @@ You must use exactly one of the following nested elements:</p>
 </ul>
 </div>
 <table id="JDBCDataSource" class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 10. DataSource Parameters</caption>
+<caption class="title">Table 6. DataSource Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -1956,7 +1505,7 @@ by a connection pool; otherwise, logging will be very slow.</p></td>
 </tbody>
 </table>
 <table id="JDBCConnectionFactory" class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 11. ConnectionFactory Parameters</caption>
+<caption class="title">Table 7. ConnectionFactory Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -1991,7 +1540,7 @@ be backed by a connection pool for the same reasons.</p></td>
 </tbody>
 </table>
 <table id="JDBCDriverManager" class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 12. DriverManager Parameters</caption>
+<caption class="title">Table 8. DriverManager Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -2038,7 +1587,7 @@ properties and a username or password.</p></td>
 </tbody>
 </table>
 <table id="JDBCPoolingDriver" class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 13. PoolingDriver Parameters (Apache Commons DBCP)</caption>
+<caption class="title">Table 9. PoolingDriver Parameters (Apache Commons DBCP)</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -2075,7 +1624,7 @@ a pooled connection elsewhere. For example:
 </tbody>
 </table>
 <table id="JDBCPoolableConnectionFactory" class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 14. PoolableConnectionFactory Parameters (Apache Commons DBCP)</caption>
+<caption class="title">Table 10. PoolableConnectionFactory Parameters (Apache Commons DBCP)</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -2177,7 +1726,7 @@ The JDBCAppender uses this information to formulate a
 <code>PreparedStatement</code> to insert records without SQL injection vulnerability.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 15. Column Parameters</caption>
+<caption class="title">Table 11. Column Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -2265,7 +1814,7 @@ the value will be inserted as a VARCHAR or NVARCHAR (<code>setString</code> or
 </tbody>
 </table>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 16. ColumnMapping Parameters</caption>
+<caption class="title">Table 12. ColumnMapping Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -2466,7 +2015,7 @@ Starting in Log4j 2.1, these appenders were combined into the JMS Appender, whic
 However, configurations written for 2.0 that use the <code>&lt;JMSQueue/&gt;</code> or <code>&lt;JMSTopic/&gt;</code> elements will continue to work with the new <code>&lt;JMS/&gt;</code> configuration element.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 17. JMS Appender Parameters</caption>
+<caption class="title">Table 13. JMS Appender Parameters</caption>
 <colgroup>
 <col style="width: 16.6666%;">
 <col style="width: 16.6666%;">
@@ -2760,7 +2309,7 @@ public class JpaLogEntity extends BasicLogEventEntity {
         return this.id;
     }
 
-    public void setId(long id) {
+    public void setId(final long id) {
         this.id = id;
     }
 
@@ -2782,7 +2331,7 @@ public class JpaLogEntity extends AbstractLogEventWrapperEntity {
     public TestEntity() {
         super(null);
     }
-    public TestEntity(LogEvent wrappedEvent) {
+    public TestEntity(final LogEvent wrappedEvent) {
         super(wrappedEvent);
     }
 
@@ -2839,7 +2388,7 @@ Additional headers can be specified with embedded Property elements.</p>
 <a href="https://docs.oracle.com/javase/8/docs/api/java/net/HttpURLConnection.html"><code>HttpURLConnection</code></a>.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 18. HttpAppender Parameters</caption>
+<caption class="title">Table 14. HttpAppender Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -2921,7 +2470,7 @@ and are evaluated in a
 encountered while appending events to be internally logged and then
 ignored. When set to <code>false</code> exceptions will be propagated to the
 caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
+Appender in a <a href="#FailoverAppender">[FailoverAppender]</a>.</p></td>
 </tr>
 </tbody>
 </table>
@@ -3000,7 +2549,7 @@ and is evaluated in the
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>ignoreExceptions</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions encountered while appending events to be internally logged and then ignored. When set to <code>false</code> exceptions will be propagated to the caller, instead. You must set this to <code>false</code> when wrapping this Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions encountered while appending events to be internally logged and then ignored. When set to <code>false</code> exceptions will be propagated to the caller, instead. You must set this to <code>false</code> when wrapping this Appender in a <a href="#FailoverAppender">[FailoverAppender]</a>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>syncSend</code></p></td>
@@ -3062,27 +2611,13 @@ Note that you need to use a version of the Kafka client library matching the Kaf
 </div>
 </div>
 <div class="sect2">
-<h3 id="MemoryMappedFileAppender"><a class="anchor" href="#MemoryMappedFileAppender"></a>MemoryMappedFileAppender</h3>
-<div class="paragraph">
-<p><em>New since 2.1. Be aware that this is a new addition, and although it has been tested on several platforms, it does not have as much track record as the other file appenders.</em></p>
-</div>
-<div class="paragraph">
-<p>The MemoryMappedFileAppender maps a part of the specified file into memory and writes log events to this memory, relying on the operating system&#8217;s virtual memory manager to synchronize the changes to the storage device.
-The main benefit of using memory-mapped files is I/O performance.
-Instead of making system calls to write to disk, this appender can simply change the program&#8217;s local memory, which is orders of magnitude faster.
-Also, in most operating systems the memory region mapped is the kernel&#8217;s
-<a href="https://en.wikipedia.org/wiki/Page_cache">page cache</a> (file cache), meaning that no copies need to be created in user space.</p>
-</div>
-<div class="paragraph">
-<p>There is some overhead with mapping a file region into memory, especially very large regions (half a gigabyte or more).
-The default region size is 32 MB, which should strike a reasonable balance between the frequency and the duration of remap operations.</p>
-</div>
+<h3 id="NoSQLAppender"><a class="anchor" href="#NoSQLAppender"></a>NoSQLAppender</h3>
 <div class="paragraph">
-<p>Similar to the FileAppender and the RandomAccessFileAppender, MemoryMappedFileAppender uses a MemoryMappedFileManager to actually perform the file I/O. While MemoryMappedFileAppender from different Configurations cannot be shared, the MemoryMappedFileManagers can be if the manager is accessible.
-For example, two web applications in a servlet container can have its own configuration and safely write to the same file if Log4j is in a ClassLoader that is common to both of them.</p>
+<p>The NoSQLAppender writes log events to a NoSQL database using an internal lightweight provider interface.
+Provider implementations currently exist for MongoDB, and writing a custom provider is quite simple.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 19. MemoryMappedFileAppender Parameters</caption>
+<caption class="title">Table 15. NoSQLAppender Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -3097,129 +2632,9 @@ For example, two web applications in a servlet container can have its own config
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">append</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">When true - the default, records will be appended to
-the end of the file. When set to false, the file will be cleared before
-new records are written.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">fileName</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the file to write to. If the file, or any
-of its parent directories, do not exist, they will be created.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">filters</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">A Filter to determine if the event should be handled
-by this Appender. More than one Filter may be used by using a
-CompositeFilter.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">immediateFlush</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>When set to true, each write will be followed by a call to
-<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/MappedByteBuffer.html#force()"><code>MappedByteBuffer#force()</code></a>.
-This will guarantee the data is written to the storage device.</p>
-</div>
-<div class="paragraph">
-<p>The default for this parameter is <code>false</code>. This means that the data is
-written to the storage device even if the Java process crashes, but
-there may be data loss if the operating system crashes.</p>
-</div>
-<div class="paragraph">
-<p>Note that manually forcing a sync on every log event loses most of the
-performance benefits of using a memory-mapped file.</p>
-</div>
-<div class="paragraph">
-<p>Flushing after every write is only useful when using this appender with
-synchronous loggers. Asynchronous loggers and appenders will
-automatically flush at the end of a batch of events, even if
-immediateFlush is set to false. This also guarantees the data is written
-to disk but is more efficient.</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">regionLength</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">int</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The length of the mapped region, defaults to 32 MB
-(32 * 1024 * 1024 bytes). This parameter must be a value between 256 and
-1,073,741,824 (1 GB or 2^30); values outside this range will be adjusted
-to the closest valid value. Log4j will round the specified value up to
-the nearest power of two.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">layout</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Layout</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The Layout to use to format the LogEvent. If no layout
-is supplied the default pattern layout of "%m%n" will be used.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the Appender.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">ignoreExceptions</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions
-encountered while appending events to be internally logged and then
-ignored. When set to <code>false</code> exceptions will be propagated to the
-caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>Here is a sample MemoryMappedFile configuration:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="warn" name="MyApp"&gt;
-  &lt;Appenders&gt;
-    &lt;MemoryMappedFile name="MyFile" fileName="logs/app.log"&gt;
-      &lt;PatternLayout&gt;
-        &lt;Pattern&gt;%d %p %c{1.} [%t] %m%n&lt;/Pattern&gt;
-      &lt;/PatternLayout&gt;
-    &lt;/MemoryMappedFile&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="MyFile"/&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="NoSQLAppender"><a class="anchor" href="#NoSQLAppender"></a>NoSQLAppender</h3>
-<div class="paragraph">
-<p>The NoSQLAppender writes log events to a NoSQL database using an internal lightweight provider interface.
-Provider implementations currently exist for MongoDB, and writing a custom provider is quite simple.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 20. NoSQLAppender Parameters</caption>
-<colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Required.</em> The name of the Appender.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Required.</em> The name of the Appender.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">ignoreExceptions</p></td>
@@ -3228,7 +2643,7 @@ Provider implementations currently exist for MongoDB, and writing a custom provi
 encountered while appending events to be internally logged and then
 ignored. When set to <code>false</code> exceptions will be propagated to the
 caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
+Appender in a <a href="#FailoverAppender">[FailoverAppender]</a>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">filter</p></td>
@@ -3253,7 +2668,7 @@ connections to the chosen NoSQL database.</p></td>
 </tbody>
 </table>
 <table id="NoSqlAppender-element-keyValuePairs" class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 21. <code>NoSqlAppender</code>&#8201;&#8212;&#8201;nested elements</caption>
+<caption class="title">Table 16. <code>NoSqlAppender</code>&#8201;&#8212;&#8201;nested elements</caption>
 <colgroup>
 <col style="width: 16.6666%;">
 <col style="width: 16.6666%;">
@@ -3417,7 +2832,7 @@ for more information.</p>
 <p>In order to use a Log4j MongoDB appender you need to add the following dependencies to your application:</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 22. MongoDB providers compatibility table</caption>
+<caption class="title">Table 17. MongoDB providers compatibility table</caption>
 <colgroup>
 <col style="width: 18.1818%;">
 <col style="width: 18.1818%;">
@@ -3484,7 +2899,7 @@ for more information.</p>
 The NoSQLAppender Appender writes log events to a NoSQL database using an internal lightweight provider interface.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 23. MongoDB Provider Parameters</caption>
+<caption class="title">Table 18. MongoDB Provider Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -3550,638 +2965,57 @@ collection documentation linked above for more information.</p></td>
 <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
 &lt;Configuration status="WARN"&gt;
   &lt;Appenders&gt;
-    &lt;NoSql name="MongoDbAppender"&gt;
-      &lt;MongoDb
-        connection="mongodb://localhost:${sys:MongoDBTestPort:-27017}/testDb.testCollection"
-        capped="true"
-        collectionSize="1073741824"/&gt;
-    &lt;/NoSql&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="ALL"&gt;
-      &lt;AppenderRef ref="MongoDbAppender" /&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>You can define additional fields to log using KeyValuePair elements, for example:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="WARN"&gt;
-    &lt;Appenders&gt;
-        &lt;NoSql name="MongoDbAppender"&gt;
-            &lt;MongoDb connection="mongodb://localhost:${sys:MongoDBTestPort:-27017}/testDb.testCollection" /&gt;
-            &lt;KeyValuePair key="A" value="1" /&gt;
-            &lt;KeyValuePair key="B" value="2" /&gt;
-            &lt;KeyValuePair key="env1" value="${env:PATH}" /&gt;
-            &lt;KeyValuePair key="env2" value="$${env:PATH}" /&gt;
-        &lt;/NoSql&gt;
-    &lt;/Appenders&gt;
-    &lt;Loggers&gt;
-        &lt;Root level="ALL"&gt;
-            &lt;AppenderRef ref="MongoDbAppender" /&gt;
-        &lt;/Root&gt;
-    &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="log4j-mongodb4"><a class="anchor" href="#log4j-mongodb4"></a><a id="NoSQLAppenderMongoDB4"></a> NoSQL provider  for MongoDB 4 (deprecated)</h5>
-<div class="paragraph">
-<p>The <code>log4j-mongodb4</code> module is deprecated in favor of <a href="#log4j-mongodb">NoSQL provider for MongoDB</a>.</p>
-</div>
-<div class="paragraph">
-<p>This section details specializations of the
-<a href="#NoSQLAppender">NoSQLAppender</a> provider for MongoDB using the MongoDB driver version 4. The NoSQLAppender Appender writes log events to a NoSQL database using an internal lightweight provider interface.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 24. MongoDB Provider Parameters</caption>
-<colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">connection</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Required.</em> The MongoDB
-<a href="http://mongodb.github.io/mongo-java-driver/4.0/apidocs/mongodb-driver-core/com/mongodb/ConnectionString.html?is-external=true"">connection string</a>
-in the format <code>mongodb://[username:password@]host1[:port1][,host2[:port2],&#8230;&#8203;[,hostN[:portN]]][/[database.collection][?options]]</code>.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">capped</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Enable support for
-<a href="https://www.mongodb.com/docs/manual/core/capped-collections/">capped
-collections</a></p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">collectionSize</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">long</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Specify the size in bytes of the capped collection
-to use if enabled. The minimum size is 4096 bytes, and larger sizes will
-be increased to the nearest integer multiple of 256. See the capped
-collection documentation linked above for more information.</p></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>This appender is <a href="messages.html#MapMessage" class="xref page">MapMessage</a>-aware.</p>
-</div>
-<div class="paragraph">
-<p>Here are a few sample configurations for the NoSQLAppender and MongoDB4 provider:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="WARN"&gt;
-  &lt;Appenders&gt;
-    &lt;NoSql name="MongoDbAppender"&gt;
-      &lt;MongoDb4 connection="mongodb://log4jUser:12345678@localhost:${sys:MongoDBTestPort:-27017}/testDb.testCollection" /&gt;
-    &lt;/NoSql&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="ALL"&gt;
-      &lt;AppenderRef ref="MongoDbAppender" /&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="WARN"&gt;
-  &lt;Appenders&gt;
-    &lt;NoSql name="MongoDbAppender"&gt;
-      &lt;MongoDb4
-        connection="mongodb://localhost:${sys:MongoDBTestPort:-27017}/testDb.testCollection"
-        capped="true"
-        collectionSize="1073741824"/&gt;
-    &lt;/NoSql&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="ALL"&gt;
-      &lt;AppenderRef ref="MongoDbAppender" /&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-<div class="paragraph">
-<p>You can define additional fields to log using KeyValuePair elements, for example:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="WARN"&gt;
-    &lt;Appenders&gt;
-        &lt;NoSql name="MongoDbAppender"&gt;
-            &lt;MongoDb4 connection="mongodb://localhost:${sys:MongoDBTestPort:-27017}/testDb.testCollection" /&gt;
-            &lt;KeyValuePair key="A" value="1" /&gt;
-            &lt;KeyValuePair key="B" value="2" /&gt;
-            &lt;KeyValuePair key="env1" value="${env:PATH}" /&gt;
-            &lt;KeyValuePair key="env2" value="$${env:PATH}" /&gt;
-        &lt;/NoSql&gt;
-    &lt;/Appenders&gt;
-    &lt;Loggers&gt;
-        &lt;Root level="ALL"&gt;
-            &lt;AppenderRef ref="MongoDbAppender" /&gt;
-        &lt;/Root&gt;
-    &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="NoSQLAppenderApacheCouchDB"><a class="anchor" href="#NoSQLAppenderApacheCouchDB"></a>NoSQLAppender for Apache CouchDB</h3>
-<div class="paragraph">
-<p>This section details specializations of the <a href="#NoSQLAppender">NoSQLAppender</a> provider for CouchDB.
-The NoSQLAppender writes log events to a NoSQL database using an internal lightweight provider interface.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">factoryClassName</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Class</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">To provide a connection to the CouchDB database, you can use this attribute and <code>factoryMethodName</code> to specify a class and static method to retrieve the connection. The method must return an <code>org.lightcouch.CouchDbClient</code> or a <code>org.lightcouch.CouchDbProperties</code>. If you use the factory method for providing a connection, you must not specify the <code>databaseName</code>, <code>protocol</co [...]
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">factoryMethodName</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Method</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">See the documentation for attribute <code>factoryClassName</code>.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">databaseName</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">If you do not specify a <code>factoryClassName</code> and <code>factoryMethodName</code> for providing a CouchDB connection, you must specify a CouchDB database name using this attribute. You must also specify a <code>username</code> and <code>password</code>. You can optionally also specify a <code>protocol</code> (defaults to <code>http</code>), <code>server</code> (defaults to localhost), and a <code>port</code> (defa [...]
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">protocol</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Must either be "http" or "https." See the documentation for attribute <code>databaseName</code>.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">server</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">See the documentation for attribute <code>databaseName</code>.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">port</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">int</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">See the documentation for attribute <code>databaseName</code>.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">username</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">See the documentation for attributes <code>databaseName</code>.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">password</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">See the documentation for attributes <code>databaseName</code>.</p></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>Here are a few sample configurations for the NoSQLAppender and CouchDB provider:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="error"&gt;
-  &lt;Appenders&gt;
-    &lt;NoSql name="databaseAppender"&gt;
-      &lt;CouchDb databaseName="applicationDb" protocol="https" server="couch.example.org"
-               username="loggingUser" password="abc123" /&gt;
-    &lt;/NoSql&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="warn"&gt;
-      &lt;AppenderRef ref="databaseAppender"/&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="OutputStreamAppender"><a class="anchor" href="#OutputStreamAppender"></a>OutputStreamAppender</h3>
-<div class="paragraph">
-<p>The OutputStreamAppender provides the base for many of the other Appenders such as the File and Socket appenders that write the event to an Output Stream.
-It cannot be directly configured.
-Support for immediateFlush and buffering is provided by the OutputStreamAppender.
-The OutputStreamAppender uses an OutputStreamManager to handle the actual I/O, allowing the stream to be shared by Appenders in multiple configurations.</p>
-</div>
-</div>
-<div class="sect2">
-<h3 id="RandomAccessFileAppender"><a class="anchor" href="#RandomAccessFileAppender"></a>RandomAccessFileAppender</h3>
-<div class="paragraph">
-<p>The RandomAccessFileAppender is similar to the standard
-<a href="#FileAppender">[FileAppender]</a> except it is always buffered (this cannot be switched off) and internally it uses a
-<code>ByteBuffer + RandomAccessFile</code> instead of a <code>BufferedOutputStream</code>.
-We saw a 20-200% performance improvement compared to FileAppender with "bufferedIO=true" in our measurements.
-Similar to the FileAppender, RandomAccessFileAppender uses a RandomAccessFileManager to perform the file I/O. While RandomAccessFileAppender from different Configurations cannot be shared, the RandomAccessFileManagers can be if the Manager is accessible.
-For example, two web applications in a servlet container can have their configuration and safely write to the same file if Log4j is in a ClassLoader that is common to both of them.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 25. RandomAccessFileAppender Parameters</caption>
-<colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">append</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">When true - the default, records will be appended to
-the end of the file. When set to false, the file will be cleared before
-new records are written.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">fileName</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the file to write to. If the file, or any
-of its parent directories, do not exist, they will be created.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">filters</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">A Filter to determine if the event should be handled
-by this Appender. More than one Filter may be used by using a
-CompositeFilter.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">immediateFlush</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>When set to true - the default, each write will be followed by a flush.
-This will guarantee that the data is passed to the operating system for writing;
-it does not guarantee that the data is written to a physical device
-such as a disk drive.</p>
-</div>
-<div class="paragraph">
-<p>Note that if this flag is set to false, and the logging activity is sparse,
-there may be an indefinite delay in the data eventually making it to the
-operating system, because it is held up in a buffer.
-This can cause surprising effects such as the logs not
-appearing in the tail output of a file immediately after writing to the log.</p>
-</div>
-<div class="paragraph">
-<p>Flushing after every write is only useful when using this appender with
-synchronous loggers. Asynchronous loggers and appenders will
-automatically flush at the end of a batch of events, even if
-immediateFlush is set to false. This also guarantees the data is passed
-to the operating system but is more efficient.</p>
-</div></div></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">bufferSize</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">int</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The buffer size, defaults to 262,144 bytes (256 *
-1024).</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">layout</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Layout</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The Layout to use to format the LogEvent. If no layout
-is supplied the default pattern layout of "%m%n" will be used.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the Appender.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">ignoreExceptions</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions
-encountered while appending events to be internally logged and then
-ignored. When set to <code>false</code> exceptions will be propagated to the
-caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>Here is a sample RandomAccessFile configuration:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="warn" name="MyApp"&gt;
-  &lt;Appenders&gt;
-    &lt;RandomAccessFile name="MyFile" fileName="logs/app.log"&gt;
-      &lt;PatternLayout&gt;
-        &lt;Pattern&gt;%d %p %c{1.} [%t] %m%n&lt;/Pattern&gt;
-      &lt;/PatternLayout&gt;
-    &lt;/RandomAccessFile&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="MyFile"/&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="RewriteAppender"><a class="anchor" href="#RewriteAppender"></a>RewriteAppender</h3>
-<div class="paragraph">
-<p>The RewriteAppender allows the LogEvent to be manipulated before it is processed by another Appender.
-This can be used to mask sensitive information such as passwords or to inject information into each event.
-The RewriteAppender must be configured with a RewritePolicy.
-The RewriteAppender should be configured after any Appenders it references to allow it to shut down properly.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 26. RewriteAppender Parameters</caption>
-<colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">AppenderRef</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the Appenders to call after the
-LogEvent has been manipulated. Multiple AppenderRef elements can be
-configured.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">A Filter to determine if the event should be handled by
-this Appender. More than one Filter may be used by using a
-CompositeFilter.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the Appender.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">rewritePolicy</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">RewritePolicy</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The RewritePolicy that will manipulate
-the LogEvent.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">ignoreExceptions</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions
-encountered while appending events to be internally logged and then
-ignored. When set to <code>false</code> exceptions will be propagated to the
-caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
-</tr>
-</tbody>
-</table>
-<div class="sect3">
-<h4 id="RewritePolicy"><a class="anchor" href="#RewritePolicy"></a>RewritePolicy</h4>
-<div class="paragraph">
-<p>RewritePolicy is an interface that allows implementations to inspect and possibly modify LogEvents before they are passed to Appender.
-RewritePolicy declares a single method named rewrite that must be implemented.
-The method is passed the LogEvent and can return the same event or create a new one.</p>
-</div>
-<div class="sect4">
-<h5 id="_maprewritepolicy"><a class="anchor" href="#_maprewritepolicy"></a>MapRewritePolicy</h5>
-<div class="paragraph">
-<p>MapRewritePolicy will evaluate LogEvents that contain a MapMessage and will add or update elements of the Map.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">mode</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">"Add" or "Update"</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">keyValuePair</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">KeyValuePair[]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">An array of keys and their values.</p></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>The following configuration shows a RewriteAppender configured to add a product key and its value to the MapMessage.:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="warn" name="MyApp"&gt;
-  &lt;Appenders&gt;
-    &lt;Console name="STDOUT" target="SYSTEM_OUT"&gt;
-      &lt;PatternLayout pattern="%m%n"/&gt;
-    &lt;/Console&gt;
-    &lt;Rewrite name="rewrite"&gt;
-      &lt;AppenderRef ref="STDOUT"/&gt;
-      &lt;MapRewritePolicy mode="Add"&gt;
-        &lt;KeyValuePair key="product" value="TestProduct"/&gt;
-      &lt;/MapRewritePolicy&gt;
-    &lt;/Rewrite&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="Rewrite"/&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="PropertiesRewritePolicy"><a class="anchor" href="#PropertiesRewritePolicy"></a>PropertiesRewritePolicy</h5>
-<div class="paragraph">
-<p>PropertiesRewritePolicy will add properties configured on the policy to the ThreadContext Map being logged.
-The properties will not be added to the actual ThreadContext Map.
-The property values may contain variables that will be evaluated when the configuration is processed as well as when the event is logged.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a id="PropertiesRewritePolicy-element-properties"></a>properties</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Property[]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">One of more Property elements to define the keys and values to be added to the ThreadContext Map.</p>
-<p class="tableblock">The <code>value</code> attribute of each <code>Property</code> element supports
-<a href="configuration.html#lazy-property-substitution" class="xref page">runtime property substitution</a>
-in the
-<a href="lookups.html#global-context" class="xref page"><em>global context</em></a>.</p></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>The following configuration shows a RewriteAppender configured to add a product key and its value to the MapMessage:</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="warn" name="MyApp"&gt;
-  &lt;Appenders&gt;
-    &lt;Console name="STDOUT" target="SYSTEM_OUT"&gt;
-      &lt;PatternLayout pattern="%m%n"/&gt;
-    &lt;/Console&gt;
-    &lt;Rewrite name="rewrite"&gt;
-      &lt;AppenderRef ref="STDOUT"/&gt;
-      &lt;PropertiesRewritePolicy&gt;
-        &lt;Property name="user"&gt;${sys:user.name}&lt;/Property&gt;
-        &lt;Property name="env"&gt;${sys:environment}&lt;/Property&gt;
-      &lt;/PropertiesRewritePolicy&gt;
-    &lt;/Rewrite&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="Rewrite"/&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-<div class="sect4">
-<h5 id="_loggernamelevelrewritepolicy"><a class="anchor" href="#_loggernamelevelrewritepolicy"></a>LoggerNameLevelRewritePolicy</h5>
-<div class="paragraph">
-<p>You can use this policy to make loggers in third-party code less chatty by changing event levels.
-The LoggerNameLevelRewritePolicy will rewrite log event levels for a given logger name prefix.
-You configure a LoggerNameLevelRewritePolicy with a logger name prefix and a pair of levels, where a pair defines a source level and a target level.</p>
-</div>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
-</colgroup>
-<thead>
-<tr>
-<th class="tableblock halign-left valign-top">Parameter Name</th>
-<th class="tableblock halign-left valign-top">Type</th>
-<th class="tableblock halign-left valign-top">Description</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">logger</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">A logger name used as a prefix to test each event&#8217;s
-logger name.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">LevelPair</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">KeyValuePair[]</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">An array of keys and their values, each key
-is a source level, each value a target level.</p></td>
-</tr>
-</tbody>
-</table>
-<div class="paragraph">
-<p>The following configuration shows a RewriteAppender configured to map level INFO to DEBUG and level WARN to INFO for all loggers that start with <code>com.foo.bar</code>.</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="warn" name="MyApp"&gt;
-  &lt;Appenders&gt;
-    &lt;Console name="STDOUT" target="SYSTEM_OUT"&gt;
-      &lt;PatternLayout pattern="%m%n"/&gt;
-    &lt;/Console&gt;
-    &lt;Rewrite name="rewrite"&gt;
-      &lt;AppenderRef ref="STDOUT"/&gt;
-      &lt;LoggerNameLevelRewritePolicy logger="com.foo.bar"&gt;
-        &lt;KeyValuePair key="INFO" value="DEBUG"/&gt;
-        &lt;KeyValuePair key="WARN" value="INFO"/&gt;
-      &lt;/LoggerNameLevelRewritePolicy&gt;
-    &lt;/Rewrite&gt;
+    &lt;NoSql name="MongoDbAppender"&gt;
+      &lt;MongoDb
+        connection="mongodb://localhost:${sys:MongoDBTestPort:-27017}/testDb.testCollection"
+        capped="true"
+        collectionSize="1073741824"/&gt;
+    &lt;/NoSql&gt;
   &lt;/Appenders&gt;
   &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="Rewrite"/&gt;
+    &lt;Root level="ALL"&gt;
+      &lt;AppenderRef ref="MongoDbAppender" /&gt;
     &lt;/Root&gt;
   &lt;/Loggers&gt;
 &lt;/Configuration&gt;</code></pre>
 </div>
 </div>
+<div class="paragraph">
+<p>You can define additional fields to log using KeyValuePair elements, for example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;Configuration status="WARN"&gt;
+    &lt;Appenders&gt;
+        &lt;NoSql name="MongoDbAppender"&gt;
+            &lt;MongoDb connection="mongodb://localhost:${sys:MongoDBTestPort:-27017}/testDb.testCollection" /&gt;
+            &lt;KeyValuePair key="A" value="1" /&gt;
+            &lt;KeyValuePair key="B" value="2" /&gt;
+            &lt;KeyValuePair key="env1" value="${env:PATH}" /&gt;
+            &lt;KeyValuePair key="env2" value="$${env:PATH}" /&gt;
+        &lt;/NoSql&gt;
+    &lt;/Appenders&gt;
+    &lt;Loggers&gt;
+        &lt;Root level="ALL"&gt;
+            &lt;AppenderRef ref="MongoDbAppender" /&gt;
+        &lt;/Root&gt;
+    &lt;/Loggers&gt;
+&lt;/Configuration&gt;</code></pre>
 </div>
 </div>
 </div>
-<div class="sect2">
-<h3 id="RoutingAppender"><a class="anchor" href="#RoutingAppender"></a>RoutingAppender</h3>
+<div class="sect4">
+<h5 id="log4j-mongodb4"><a class="anchor" href="#log4j-mongodb4"></a><a id="NoSQLAppenderMongoDB4"></a> NoSQL provider  for MongoDB 4 (deprecated)</h5>
 <div class="paragraph">
-<p>The <code>RoutingAppender</code> evaluates LogEvents and then routes them to a subordinate Appender.
-The target Appender may be an appender previously configured and may be referenced by its name or the Appender can be dynamically created as needed.
-The <code>RoutingAppender</code> should be configured after any Appenders it references to allow it to shut down properly.</p>
+<p>The <code>log4j-mongodb4</code> module is deprecated in favor of <a href="#log4j-mongodb">NoSQL provider for MongoDB</a>.</p>
 </div>
 <div class="paragraph">
-<p>You can also configure a <code>RoutingAppender</code> with scripts: you can run a script when the appender starts and when a route is chosen for an log event.</p>
+<p>This section details specializations of the
+<a href="#NoSQLAppender">NoSQLAppender</a> provider for MongoDB using the MongoDB driver version 4. The NoSQLAppender Appender writes log events to a NoSQL database using an internal lightweight provider interface.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 27. RoutingAppender Parameters</caption>
+<caption class="title">Table 19. MongoDB Provider Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -4196,151 +3030,110 @@ The <code>RoutingAppender</code> should be configured after any Appenders it ref
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Filter</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">A Filter to determine if the event should be handled by
-this Appender. More than one Filter may be used by using a
-CompositeFilter.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">connection</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the Appender.</p></td>
-</tr>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">RewritePolicy</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">RewritePolicy</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The RewritePolicy that will manipulate
-the LogEvent.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><em>Required.</em> The MongoDB
+<a href="http://mongodb.github.io/mongo-java-driver/4.0/apidocs/mongodb-driver-core/com/mongodb/ConnectionString.html?is-external=true"">connection string</a>
+in the format <code>mongodb://[username:password@]host1[:port1][,host2[:port2],&#8230;&#8203;[,hostN[:portN]]][/[database.collection][?options]]</code>.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Routes</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Routes</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Contains one or more Route declarations to identify the
-criteria for choosing Appenders.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">capped</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Enable support for
+<a href="https://www.mongodb.com/docs/manual/core/capped-collections/">capped
+collections</a></p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Script</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Script</p></td>
-<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
-<p>This Script runs when Log4j starts the RoutingAppender and returns a
-String Route key to determine the default Route.</p>
-</div>
-<div class="paragraph">
-<p>This script is passed the following variables:</p>
-</div></div></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">collectionSize</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">long</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Specify the size in bytes of the capped collection
+to use if enabled. The minimum size is 4096 bytes, and larger sizes will
+be increased to the nearest integer multiple of 256. See the capped
+collection documentation linked above for more information.</p></td>
 </tr>
 </tbody>
 </table>
 <div class="paragraph">
-<p>|Parameter Name |Type |Description |configuration |Configuration |The active Configuration.</p>
-</div>
-<div class="paragraph">
-<p>|staticVariables |Map |A Map shared between all script invocations for this appender instance.
-This is the same map passed to the Routes Script.</p>
+<p>This appender is <a href="messages.html#MapMessage" class="xref page">MapMessage</a>-aware.</p>
 </div>
-<table class="tableblock frame-all grid-all stretch">
-<colgroup>
-<col style="width: 33.3333%;">
-<col style="width: 33.3333%;">
-<col style="width: 33.3334%;">
-</colgroup>
-<tbody>
-<tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">ignoreExceptions</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions
-encountered while appending events to be internally logged and then
-ignored. When set to <code>false</code> exceptions will be propagated to the
-caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
-</tr>
-</tbody>
-</table>
 <div class="paragraph">
-<p>In this example, the script causes the "ServiceWindows" route to be the default route on Windows and "ServiceOther" on all other operating systems.
-Note that the List Appender is one of our test appenders, any appender can be used, it is only used as a shorthand.</p>
+<p>Here are a few sample configurations for the NoSQLAppender and MongoDB4 provider:</p>
 </div>
 <div class="listingblock">
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="WARN" name="RoutingTest"&gt;
+&lt;Configuration status="WARN"&gt;
   &lt;Appenders&gt;
-    &lt;Routing name="Routing"&gt;
-      &lt;Script name="RoutingInit" language="JavaScript"&gt;&lt;![CDATA[
-        java.lang.System.getProperty("os.name").search("Windows") &gt; -1 ? "ServiceWindows" : "ServiceOther";]]&gt;
-      &lt;/Script&gt;
-      &lt;Routes&gt;
-        &lt;Route key="ServiceOther"&gt;
-          &lt;List name="List1" /&gt;
-        &lt;/Route&gt;
-        &lt;Route key="ServiceWindows"&gt;
-          &lt;List name="List2" /&gt;
-        &lt;/Route&gt;
-      &lt;/Routes&gt;
-    &lt;/Routing&gt;
+    &lt;NoSql name="MongoDbAppender"&gt;
+      &lt;MongoDb4 connection="mongodb://log4jUser:12345678@localhost:${sys:MongoDBTestPort:-27017}/testDb.testCollection" /&gt;
+    &lt;/NoSql&gt;
   &lt;/Appenders&gt;
   &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="Routing" /&gt;
+    &lt;Root level="ALL"&gt;
+      &lt;AppenderRef ref="MongoDbAppender" /&gt;
     &lt;/Root&gt;
   &lt;/Loggers&gt;
 &lt;/Configuration&gt;</code></pre>
 </div>
 </div>
-<div class="sect3">
-<h4 id="Routes"><a class="anchor" href="#Routes"></a>Routes</h4>
-<div class="paragraph">
-<p>The <code>Routes</code> element accepts a single attribute named "pattern".
-The pattern is evaluated against all the registered Lookups and the result is used to select a <code>Route</code>.
-Each <code>Route</code> may be configured with a key.
-If the key matches the result of evaluating the pattern then that <code>Route</code>
-will be selected.
-If no key is specified on a <code>Route</code> then that <code>Route</code> is the default.
-Only one <code>Route</code> can be configured as the default.</p>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;Configuration status="WARN"&gt;
+  &lt;Appenders&gt;
+    &lt;NoSql name="MongoDbAppender"&gt;
+      &lt;MongoDb4
+        connection="mongodb://localhost:${sys:MongoDBTestPort:-27017}/testDb.testCollection"
+        capped="true"
+        collectionSize="1073741824"/&gt;
+    &lt;/NoSql&gt;
+  &lt;/Appenders&gt;
+  &lt;Loggers&gt;
+    &lt;Root level="ALL"&gt;
+      &lt;AppenderRef ref="MongoDbAppender" /&gt;
+    &lt;/Root&gt;
+  &lt;/Loggers&gt;
+&lt;/Configuration&gt;</code></pre>
 </div>
-<div class="paragraph">
-<p>The <code>Routes</code> element may contain a <code>Script</code> child element.
-If specified, the
-<code>Script</code> is run for each log event and returns the String Route key to use.</p>
 </div>
 <div class="paragraph">
-<p>You must specify either the pattern attribute or the <code>Script</code> element, but not both.</p>
+<p>You can define additional fields to log using KeyValuePair elements, for example:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;Configuration status="WARN"&gt;
+    &lt;Appenders&gt;
+        &lt;NoSql name="MongoDbAppender"&gt;
+            &lt;MongoDb4 connection="mongodb://localhost:${sys:MongoDBTestPort:-27017}/testDb.testCollection" /&gt;
+            &lt;KeyValuePair key="A" value="1" /&gt;
+            &lt;KeyValuePair key="B" value="2" /&gt;
+            &lt;KeyValuePair key="env1" value="${env:PATH}" /&gt;
+            &lt;KeyValuePair key="env2" value="$${env:PATH}" /&gt;
+        &lt;/NoSql&gt;
+    &lt;/Appenders&gt;
+    &lt;Loggers&gt;
+        &lt;Root level="ALL"&gt;
+            &lt;AppenderRef ref="MongoDbAppender" /&gt;
+        &lt;/Root&gt;
+    &lt;/Loggers&gt;
+&lt;/Configuration&gt;</code></pre>
 </div>
-<div class="paragraph">
-<p>Each <code>Route</code> must reference an <code>Appender</code>.
-If the <code>Route</code> contains a ref attribute then the <code>Route</code> will reference an <code>Appender</code> that was defined in the configuration.
-If the <code>Route</code> contains an <code>Appender</code> definition then an
-<code>Appender</code> will be created within the context of the <code>RoutingAppender</code> and will be reused each time a matching <code>Appender</code> name is referenced through a <code>Route</code>.</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>Lookups in the <strong>children</strong> of the <code>Route</code> component are <strong>not</strong> evaluated at configuration time.
-The substitution is delayed until the <code>Route</code> element is evaluated.
-This means that <code>${...}</code> expression <strong>should not</strong> be escaped as <code>$${...}</code>.</p>
 </div>
-<div class="paragraph">
-<p>See <a href="configuration.html#lazy-property-substitution" class="xref page">lazy property substitution</a> for more details.</p>
 </div>
-</td>
-</tr>
-</table>
 </div>
+<div class="sect2">
+<h3 id="NoSQLAppenderApacheCouchDB"><a class="anchor" href="#NoSQLAppenderApacheCouchDB"></a>NoSQLAppender for Apache CouchDB</h3>
 <div class="paragraph">
-<p>This script is passed the following variables:</p>
+<p>This section details specializations of the <a href="#NoSQLAppender">NoSQLAppender</a> provider for CouchDB.
+The NoSQLAppender writes log events to a NoSQL database using an internal lightweight provider interface.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 28. RoutingAppender Routes Script Parameters</caption>
 <colgroup>
-<col style="width: 20%;">
-<col style="width: 20%;">
-<col style="width: 60%;">
+<col style="width: 33.3333%;">
+<col style="width: 33.3333%;">
+<col style="width: 33.3334%;">
 </colgroup>
 <thead>
 <tr>
@@ -4351,121 +3144,69 @@ This means that <code>${...}</code> expression <strong>should not</strong> be es
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">configuration</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Configuration</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The active Configuration.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">factoryClassName</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Class</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">To provide a connection to the CouchDB database, you can use this attribute and <code>factoryMethodName</code> to specify a class and static method to retrieve the connection. The method must return an <code>org.lightcouch.CouchDbClient</code> or a <code>org.lightcouch.CouchDbProperties</code>. If you use the factory method for providing a connection, you must not specify the <code>databaseName</code>, <code>protocol</co [...]
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">factoryMethodName</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Method</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">See the documentation for attribute <code>factoryClassName</code>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">databaseName</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If you do not specify a <code>factoryClassName</code> and <code>factoryMethodName</code> for providing a CouchDB connection, you must specify a CouchDB database name using this attribute. You must also specify a <code>username</code> and <code>password</code>. You can optionally also specify a <code>protocol</code> (defaults to <code>http</code>), <code>server</code> (defaults to localhost), and a <code>port</code> (defa [...]
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">protocol</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Must either be "http" or "https." See the documentation for attribute <code>databaseName</code>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">server</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">See the documentation for attribute <code>databaseName</code>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">port</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">int</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">See the documentation for attribute <code>databaseName</code>.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">staticVariables</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Map</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">A Map shared between all script invocations for
-this appender instance. This is the same map passed to the Routes
-Script.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">username</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">See the documentation for attributes <code>databaseName</code>.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock">logEvent</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">LogEvent</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The log event.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">password</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">See the documentation for attributes <code>databaseName</code>.</p></td>
 </tr>
 </tbody>
 </table>
 <div class="paragraph">
-<p>In this example, the script runs for each log event and picks a route based on the presence of a Marker named "AUDIT".</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="WARN" name="RoutingTest"&gt;
-  &lt;Appenders&gt;
-    &lt;Console name="STDOUT" target="SYSTEM_OUT" /&gt;
-    &lt;Flume name="AuditLogger" compress="true"&gt;
-      &lt;Agent host="192.168.10.101" port="8800"/&gt;
-      &lt;Agent host="192.168.10.102" port="8800"/&gt;
-      &lt;RFC5424Layout enterpriseNumber="18060" includeMDC="true" appName="MyApp"/&gt;
-    &lt;/Flume&gt;
-    &lt;Routing name="Routing"&gt;
-      &lt;Routes&gt;
-        &lt;Script name="RoutingInit" language="JavaScript"&gt;&lt;![CDATA[
-          if (logEvent.getMarker() != null &amp;&amp; logEvent.getMarker().isInstanceOf("AUDIT")) {
-                return "AUDIT";
-            } else if (logEvent.getContextMap().containsKey("UserId")) {
-                return logEvent.getContextMap().get("UserId");
-            }
-            return "STDOUT";]]&gt;
-        &lt;/Script&gt;
-        &lt;Route&gt;
-          &lt;RollingFile
-              name="Rolling-${mdc:UserId}"
-              fileName="${mdc:UserId}.log"
-              filePattern="${mdc:UserId}.%i.log.gz"&gt;
-            &lt;PatternLayout&gt;
-              &lt;pattern&gt;%d %p %c{1.} [%t] %m%n&lt;/pattern&gt;
-            &lt;/PatternLayout&gt;
-            &lt;SizeBasedTriggeringPolicy size="500" /&gt;
-          &lt;/RollingFile&gt;
-        &lt;/Route&gt;
-        &lt;Route ref="AuditLogger" key="AUDIT"/&gt;
-        &lt;Route ref="STDOUT" key="STDOUT"/&gt;
-      &lt;/Routes&gt;
-      &lt;IdlePurgePolicy timeToLive="15" timeUnit="minutes"/&gt;
-    &lt;/Routing&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="Routing" /&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="Purge"><a class="anchor" href="#Purge"></a>Purge Policy</h4>
-<div class="paragraph">
-<p>The RoutingAppender can be configured with a PurgePolicy whose purpose is to stop and remove dormant Appenders that have been dynamically created by the RoutingAppender.
-Log4j currently provides the IdlePurgePolicy is the only PurgePolicy available for cleaning up the Appenders.
-The IdlePurgePolicy accepts 2 attributes; timeToLive, which is the number of timeUnits the Appender should survive without having any events sent to it, and timeUnit, the String representation of java.util.concurrent.TimeUnit which is used with the timeToLive attribute.</p>
-</div>
-<div class="paragraph">
-<p>Below is a sample configuration that uses a RoutingAppender to route all Audit events to a FlumeAppender and all other events will be routed to a RollingFileAppender captures only the specific event type.
-Note that the AuditAppender was predefined while the RollingFileAppenders are created as needed.</p>
+<p>Here are a few sample configurations for the NoSQLAppender and CouchDB provider:</p>
 </div>
 <div class="listingblock">
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
-&lt;Configuration status="warn" name="MyApp"&gt;
+&lt;Configuration status="error"&gt;
   &lt;Appenders&gt;
-    &lt;Flume name="AuditLogger" compress="true"&gt;
-      &lt;Agent host="192.168.10.101" port="8800"/&gt;
-      &lt;Agent host="192.168.10.102" port="8800"/&gt;
-      &lt;RFC5424Layout enterpriseNumber="18060" includeMDC="true" appName="MyApp"/&gt;
-    &lt;/Flume&gt;
-    &lt;Routing name="Routing"&gt;
-      &lt;Routes pattern="$${sd:type}"&gt;
-        &lt;Route&gt;
-          &lt;RollingFile name="Rolling-${sd:type}" fileName="${sd:type}.log"
-                       filePattern="${sd:type}.%i.log.gz"&gt;
-            &lt;PatternLayout&gt;
-              &lt;pattern&gt;%d %p %c{1.} [%t] %m%n&lt;/pattern&gt;
-            &lt;/PatternLayout&gt;
-            &lt;SizeBasedTriggeringPolicy size="500" /&gt;
-          &lt;/RollingFile&gt;
-        &lt;/Route&gt;
-        &lt;Route ref="AuditLogger" key="Audit"/&gt;
-      &lt;/Routes&gt;
-      &lt;IdlePurgePolicy timeToLive="15" timeUnit="minutes"/&gt;
-    &lt;/Routing&gt;
+    &lt;NoSql name="databaseAppender"&gt;
+      &lt;CouchDb databaseName="applicationDb" protocol="https" server="couch.example.org"
+               username="loggingUser" password="abc123" /&gt;
+    &lt;/NoSql&gt;
   &lt;/Appenders&gt;
   &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="Routing"/&gt;
+    &lt;Root level="warn"&gt;
+      &lt;AppenderRef ref="databaseAppender"/&gt;
     &lt;/Root&gt;
   &lt;/Loggers&gt;
 &lt;/Configuration&gt;</code></pre>
 </div>
 </div>
 </div>
-</div>
 <div class="sect2">
 <h3 id="servlet-appender"><a class="anchor" href="#servlet-appender"></a>Servlet appender</h3>
 <div class="paragraph">
@@ -4763,7 +3504,7 @@ As with other Appenders, the formatting can be controlled by specifying a Layout
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">ignoreExceptions</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions encountered while appending events to be internally logged and then ignored. When set to <code>false</code> exceptions will be propagated to the caller, instead. You must set this to <code>false</code> when wrapping this Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The default is <code>true</code>, causing exceptions encountered while appending events to be internally logged and then ignored. When set to <code>false</code> exceptions will be propagated to the caller, instead. You must set this to <code>false</code> when wrapping this Appender in a <a href="#FailoverAppender">[FailoverAppender]</a>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">SSL</p></td>
@@ -4791,44 +3532,6 @@ As with other Appenders, the formatting can be controlled by specifying a Layout
 </div>
 </div>
 <div class="sect2">
-<h3 id="ScriptAppenderSelector"><a class="anchor" href="#ScriptAppenderSelector"></a>ScriptAppenderSelector</h3>
-<div class="paragraph">
-<p>When the configuration is built, the <code>ScriptAppenderSelector</code> appender calls a <code>ScriptPlugin</code> to compute an appender name.
-Log4j then creates one of the appender named listed under <code>AppenderSet</code> using the name of the
-<code>ScriptAppenderSelector</code>.
-After configuration, Log4j ignores the
-<code>ScriptAppenderSelector</code>.
-Log4j only builds the one selected appender from the configuration tree and ignores other <code>AppenderSet</code> child nodes.</p>
-</div>
-<div class="paragraph">
-<p>In the following example, the script returns the name "List2".
-The appender name is recorded under the name of the
-<code>ScriptAppenderSelector</code>, not the name of the selected appender, in this example, "SelectIt".</p>
-</div>
-<div class="listingblock">
-<div class="content">
-<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;Configuration status="WARN" name="ScriptAppenderSelectorExample"&gt;
-  &lt;Appenders&gt;
-    &lt;ScriptAppenderSelector name="SelectIt"&gt;
-      &lt;Script language="JavaScript"&gt;&lt;![CDATA[
-        java.lang.System.getProperty("os.name").search("Windows") &gt; -1 ? "MyCustomWindowsAppender" : "MySyslogAppender";]]&gt;
-      &lt;/Script&gt;
-      &lt;AppenderSet&gt;
-        &lt;MyCustomWindowsAppender name="MyAppender" ... /&gt;
-        &lt;SyslogAppender name="MySyslog" ... /&gt;
-      &lt;/AppenderSet&gt;
-    &lt;/ScriptAppenderSelector&gt;
-  &lt;/Appenders&gt;
-  &lt;Loggers&gt;
-    &lt;Root level="error"&gt;
-      &lt;AppenderRef ref="SelectIt" /&gt;
-    &lt;/Root&gt;
-  &lt;/Loggers&gt;
-&lt;/Configuration&gt;</code></pre>
-</div>
-</div>
-</div>
-<div class="sect2">
 <h3 id="SocketAppender"><a class="anchor" href="#SocketAppender"></a>SocketAppender</h3>
 <div class="paragraph">
 <p>The <code>SocketAppender</code> is an OutputStreamAppender that writes its output to a remote destination specified by a host and port.
@@ -4839,7 +3542,7 @@ Due to limitations in the TCP protocol that means that when the target server cl
 If guaranteed delivery is required a protocol that requires acknowledgments must be used.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 29. <code>SocketAppender</code> Parameters</caption>
+<caption class="title">Table 20. <code>SocketAppender</code> Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -4946,7 +3649,7 @@ default is 0 (infinite timeout, like <code>Socket.connect()</code> methods).</p>
 encountered while appending events to be internally logged and then
 ignored. When set to <code>false</code> exceptions will be propagated to the
 caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
+Appender in a <a href="#FailoverAppender">[FailoverAppender]</a>.</p></td>
 </tr>
 </tbody>
 </table>
@@ -4994,15 +3697,14 @@ Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
 &lt;/Configuration&gt;</code></pre>
 </div>
 </div>
-</div>
-<div class="sect2">
-<h3 id="SSL"><a class="anchor" href="#SSL"></a>SSL</h3>
+<div class="sect3">
+<h4 id="SSL"><a class="anchor" href="#SSL"></a>SSL</h4>
 <div class="paragraph">
 <p>Several appenders can be configured to use either a plain network connection or a Secure Socket Layer (SSL) connection.
 This section documents the parameters available for SSL configuration.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 30. SSL Configuration Parameters</caption>
+<caption class="title">Table 21. SSL Configuration Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -5039,13 +3741,14 @@ counterparty. Determines whether the remote authentication credentials
 </tr>
 </tbody>
 </table>
+</div>
 <div class="sect3">
 <h4 id="KeyStore"><a class="anchor" href="#KeyStore"></a>KeyStore</h4>
 <div class="paragraph">
 <p>The Keystore is meant to contain your private keys and certificates, and determines which authentication credentials to send to the remote host.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 31. KeyStore Configuration Parameters</caption>
+<caption class="title">Table 22. KeyStore Configuration Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -5113,7 +3816,7 @@ Determines whether the remote authentication credentials (and thus the connectio
 <p>In some cases, they can be the same store, although it is often better practice to use distinct stores (especially when they are file-based).</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 32. TrustStore Configuration Parameters</caption>
+<caption class="title">Table 23. TrustStore Configuration Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -5190,7 +3893,7 @@ algorithms</a>.</p></td>
 The data can be sent over either TCP or UDP.</p>
 </div>
 <table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 33. <code>SyslogAppender</code> Parameters</caption>
+<caption class="title">Table 24. <code>SyslogAppender</code> Parameters</caption>
 <colgroup>
 <col style="width: 20%;">
 <col style="width: 20%;">
@@ -5283,7 +3986,7 @@ the id from the Message will be used instead of this value.</p></td>
 encountered while appending events to be internally logged and then
 ignored. When set to <code>false</code> exceptions will be propagated to the
 caller, instead. You must set this to <code>false</code> when wrapping this
-Appender in a <a href="#FailoverAppender">FailoverAppender</a>.</p></td>
+Appender in a <a href="#FailoverAppender">[FailoverAppender]</a>.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">immediateFail</p></td>
diff --git a/manual/appenders/delegating.html b/manual/appenders/delegating.html
new file mode 100644
index 0000000000..2d354b9ed9
--- /dev/null
+++ b/manual/appenders/delegating.html
@@ -0,0 +1,2571 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <title>Delegating Appenders :: Apache Log4j</title>
+    <link rel="canonical" href="https://logging.apache.org/log4j/2.x/manual/appenders/delegating.html">
+    <meta name="generator" content="Antora 3.2.0-alpha.4">
+<link rel="stylesheet" href="../../_/css/site.css">
+<link rel="icon" href="../../_/../_images/favicon.ico" type="image/x-icon">
+<!-- `@asciidoctor/tabs` extension styles -->
+<link rel="stylesheet" href="../../_/css/vendor/tabs.css">
+<style>
+  /* Swap colors of `IMPORTANT` and `WARNING` blocks */ 
+  .doc .admonitionblock.important .icon { background-color: #f70; }
+  .doc .admonitionblock.warning .icon { background-color: #e40046; }
+  /* Default `h4`, `h5`, and `h6` are smaller than the normal text, fix header font sizing: */
+  .doc h1 { font-size: 1.9rem; }
+  .doc h2 { font-size: 1.7rem; }
+  .doc h3 { font-size: 1.5rem; font-weight: 400; }
+  .doc h4 { font-size: 1.3rem; font-weight: 500; }
+  .doc h5 { font-size: 1.1rem; font-weight: 500; text-decoration: underline; }
+  .doc h6 { font-size: 0.9rem; font-weight: 500; text-decoration: underline; }
+  /* Default `code`, `pre`, and `.colist` (source code annotations) fonts are too big, adjust them: */
+  .doc .colist>table code, .doc p code, .doc thead code { font-size: 0.8em; }
+  .doc pre { font-size: 0.7rem; }
+  .doc .colist { font-size: 0.75rem; }
+  /* Make links more visible: */
+  .doc a { text-decoration: underline; }
+  .doc a code { text-decoration: underline; color: #1565c0; }
+  /* Tab header fonts aren't rendered good, adjusting the font weight: */
+  .tablist > ul li { font-weight: 500; }
+  /* `page-toclevels` greater than 4 are not supported by Antora UI, patching it: */
+  .toc .toc-menu li[data-level="4"] a {
+    padding-left: 2.75rem;
+  }
+  /* Replace the default highlight.js color for strings from red (unnecessarily signaling something negative) to green: */
+  .hljs-string {
+    color: #0f8532;
+  }
+</style>
+  </head>
+  <body class="article">
+<header class="header">
+  <nav class="navbar">
+    <div class="navbar-brand">
+      <div class="navbar-item">
+        <img src="../../_/../_images/logo-small-white.png" alt="Apache Log4j"/>
+      </div>
+    </div>
+    <div id="topbar-nav" class="navbar-menu">
+      <div class="navbar-end">
+        <a class="navbar-item" href="https://logging.apache.org">a subproject of&nbsp;<strong>Apache Logging Services</strong></a>
+      </div>
+    </div>
+  </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="ROOT" data-version="">
+  <aside class="nav">
+    <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+  <nav class="nav-menu">
+    <button class="nav-menu-toggle" aria-label="Toggle expand/collapse all" style="display: none"></button>
+    <h3 class="title"><a href="../../index.html">Home</a></h3>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../../download.html">Download</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../../release-notes.html">Release Notes</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="https://logging.apache.org/support.html">Support</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="https://logging.apache.org/security.html">Security</a>
+  </li>
+</ul>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="0">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../index.html">Manual</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../getting-started.html">Getting started</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../installation.html">Installation</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../architecture.html">Architecture</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../api.html">API</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../api.html#loggers">Loggers</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../eventlogging.html">Event Logger</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../resource-logger.html">Resource Logger</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../simple-logger.html">Simple Logger</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../status-logger.html">Status Logger</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../logbuilder.html">Fluent API</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../api.html#fish-tagging">Fish tagging</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../customloglevels.html">Levels</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../markers.html">Markers</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../scoped-context.html">Scoped Context</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../thread-context.html">Thread Context</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../messages.html">Messages</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../flowtracing.html">Flow Tracing</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../config-intro.html">Configuration</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../configuration.html">Configuration file</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../systemproperties.html">Configuration properties</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../customconfig.html">Programmatic configuration</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../appenders.html">Appenders</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item is-current-page" data-depth="3">
+    <a class="nav-link" href="delegating.html">Delegating Appenders</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../layouts.html">Layouts</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../json-template-layout.html">JSON Template Layout</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../pattern-layout.html">Pattern Layout</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../lookups.html">Lookups</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../filters.html">Filters</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../scripts.html">Scripts</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../jmx.html">JMX</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../extending.html">Extending</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../plugins.html">Plugins</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../performance.html">Performance</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../async.html">Asynchronous loggers</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../garbagefree.html">Garbage-free logging</a>
+  </li>
+</ul>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="0">
+    <button class="nav-item-toggle"></button>
+    <span class="nav-text">References</span>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../plugin-reference.html">Plugin reference</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../javadoc.html">Java API reference</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="0">
+    <button class="nav-item-toggle"></button>
+    <span class="nav-text">Resources</span>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../faq.html">F.A.Q.</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../migrate-from-log4j1.html">Migrating from Log4j 1</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../migrate-from-logback.html">Migrating from Logback</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../migrate-from-slf4j.html">Migrating from SLF4J</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../hibernate.html">Integrating with Hibernate</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../jakarta.html">Integrating with Jakarta EE</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../soa.html">Integrating with service-oriented architectures</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../development.html">Development</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="0">
+    <button class="nav-item-toggle"></button>
+    <span class="nav-text">Components</span>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-cassandra.html">Cassandra Appender</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-couchdb.html">CouchDB Appender</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-docker.html">Log4j Docker</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-flume-ng.html">Flume Appender</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-iostreams.html">Log4j IOStreams</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-spring-boot.html">Log4j Spring Boot Support</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-spring-cloud-config.html">Log4j Spring Cloud Config</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-spring-cloud-config-client.html">Log4j Spring Cloud Configuration</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-jul.html">JUL-to-Log4j bridge</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-to-jul.html">Log4j-to-JUL bridge</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="0">
+    <button class="nav-item-toggle"></button>
+    <span class="nav-text">Related projects</span>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/jakarta/index.html">Log4j Jakarta EE</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/jmx-gui/index.html">Log4j JMX GUI</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/kotlin/index.html">Log4j Kotlin</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/scala/index.html">Log4j Scala</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/tools/index.html">Log4j Tools</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/transform/index.html">Log4j Transformation Tools</a>
+  </li>
+</ul>
+  </li>
+</ul>
+  </nav>
+</div>
+    </div>
+  </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+  <a href="../../index.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+  <ul>
+    <li><a href="../../index.html">Home</a></li>
+    <li><a href="../index.html">Manual</a></li>
+    <li><a href="../config-intro.html">Configuration</a></li>
+    <li><a href="../appenders.html">Appenders</a></li>
+    <li><a href="delegating.html">Delegating Appenders</a></li>
+  </ul>
+</nav>
+<div class="edit-this-page"><a href="https://github.com/apache/logging-log4j2/edit/2.x/src/site/antora/modules/ROOT/pages/manual/appenders/delegating.adoc">Edit this Page</a></div>
+</div>
+  <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="4">
+  <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Delegating Appenders</h1>
+<div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>Log4j Core supplies multiple appenders that do not perform any work themselves, but modify the way other appenders work.
+The following behaviors can be modified:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>If you want to perform all I/O from a dedicated thread, see <a href="#AsyncAppender"><code>Async</code> Appender</a>.</p>
+</li>
+<li>
+<p>If you want to provide a backup appender in case an appender fails, see <a href="#FailoverAppender"><code>Failover</code> Appender</a>.</p>
+</li>
+<li>
+<p>If you want to modify the log event, before it is sent to the target destination, see <a href="#RewriteAppender"><code>Rewrite</code> Appender</a>.</p>
+</li>
+<li>
+<p>If you want to create appenders dynamically or choose a different appender for each log event, see <a href="#RoutingAppender"><code>Routing</code> Appender</a>.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="AsyncAppender"><a class="anchor" href="#AsyncAppender"></a><code>Async</code> Appender</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The <code>Async</code> Appender stores log events in a blocking queue and forwards them to other appenders on a separate thread.
+Due to the asynchronous barrier, exceptions occurring in those appenders will not be forwarded to the caller of the log statement.</p>
+</div>
+<div class="paragraph">
+<p>The <code>Async</code> should be configured after the appenders it references to allow it to shut down properly.</p>
+</div>
+<div class="admonitionblock tip">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-tip" title="Tip"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>The blocking queue is susceptible to lock contention, and performance may become worse when more threads are logging concurrently.
+Consider using
+<a href="../async.html" class="xref page">lock-free asynchronous loggers</a> instead, for optimal performance.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Log4j 2 brought the following enhancements to the Log4j 1 async appender:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>all appenders referenced by <code>AsyncAppender</code> flush their buffers to the OS at the end of a batch, when the queue becomes empty.
+This guarantees that the batch of log events is passed to the OS and is a more performant version of the <a href="../appenders.html#immediateFlush" class="xref page"><code>immediateFlush</code></a> attribute.</p>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+Similarly to what happens with the <code>immediateFlush</code> attribute, this does not guarantee that the OS stores the data on the underlying device.
+</td>
+</tr>
+</table>
+</div>
+</li>
+<li>
+<p>the type of queue is configurable to allow users to use faster and more performant queues, such as those from the
+<a href="https://github.com/JCTools/JCTools?tab=readme-ov-file#jctools">JCTools</a>
+or
+<a href="https://github.com/conversant/disruptor">Conversant Disruptor</a> projects.</p>
+</li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="AsyncAppender-configuration"><a class="anchor" href="#AsyncAppender-configuration"></a><code>Async</code> configuration</h3>
+<div class="paragraph">
+<p>The <code>Async</code> Appender supports the following configuration options:</p>
+</div>
+<table id="AsyncAppender-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. <code>Async</code> Appender configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<th class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">Required</p></th>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="AsyncAppender-attr-name"></a>name</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the appender.</p></td>
+</tr>
+<tr>
+<th class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">Optional</p></th>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="AsyncAppender-attr-blocking"></a>blocking</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>true</code>, the Appender will wait until there are free slots in the queue.</p>
+<p class="tableblock">If false, the event will be written to the error
+appender if the queue is full. The default is true.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="AsyncAppender-attr-bufferSize"></a>bufferSize</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>int</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">1024</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the maximum number of events that can be queued.</p>
+<p class="tableblock">When using a disruptor-style <code>BlockingQueue</code>, this
+buffer size must be a power of 2.</p>
+<p class="tableblock">When the application is logging faster than the underlying appender can
+keep up with for a long enough time to fill up the queue, the behavior
+is determined by the <a href="#AsyncQueueFullPolicy">Queue full policy</a>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="AsyncAppender-attr-errorRef"></a>errorRef</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the appender to invoke if none of the appenders can be called, either due to exceptions in the appenders or because the queue is full.</p>
+<p class="tableblock">If not specified then errors will be ignored.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="AsyncAppender-attr-includeLocation"></a>includeLocation</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If set to <code>false</code>, location information will not be available to layouts of the downstream appenders.</p>
+<p class="tableblock">See <a href="../layouts.html#LocationInformation" class="xref page">location information</a> for more information.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="AsyncAppender-attr-ignoreExceptions"></a>ignoreExceptions</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>If <code>false</code>, logging exceptions will be forwarded to the caller of the log statement.
+Otherwise, they will be ignored.</p>
+</div>
+<div class="paragraph">
+<p>Logging exceptions are always also logged to <a href="../status-logger.html" class="xref page">Status Logger</a></p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>This setting only applies to logging exceptions that occur on the caller thread.
+Exceptions that occur on the asynchronous thread will always be logged.</p>
+</div>
+</td>
+</tr>
+</table>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="AsyncAppender-attr-shutdownTimeout"></a>shutdownTimeout</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>int</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Timeout in milliseconds to wait before stopping the asynchronous thread.</p>
+<p class="tableblock">A value of <code>0</code> will wait until the queue is empty.</p></td>
+</tr>
+</tbody>
+</table>
+<table id="AsyncAppender-elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 2. <code>Async</code> Appender nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Multiplicity</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><a id="AsyncAppender-element-Filter"></a><a href="../filters.html" class="xref page"><code>Filter</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Allows filtering log events just before they are appended to the blocking queue.</p>
+<p class="tableblock">See also <a href="../filters.html#appender-stage" class="xref page">appender filtering stage</a>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="AsyncAppender-element-AppenderRef"></a><a href="../configuration.html#configuring-appenderrefs" class="xref page"><code>AppenderRef</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">one or more</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A list of appenders to invoke asynchronously.</p>
+<p class="tableblock">See <a href="../configuration.html#configuring-appenderrefs" class="xref page">appender references</a> for more information.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="AsyncAppender-element-BlockingQueueFactory"></a><a href="#BlockingQueueFactory"><code>BlockingQueueFactory</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The blocking queue factory implementation to use.</p>
+<p class="tableblock">If not provided, <a href="#ArrayBlockingQueueFactory"><code>ArrayBlockingQueueFactory</code></a> will be used.</p>
+<p class="tableblock">See <a href="#BlockingQueueFactory">Blocking Queue Factories</a> below.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-AsyncAppender" class="xref page">&#x1F4D6; Plugin reference for <code>Async</code></a></p>
+</div>
+<div class="paragraph">
+<p>As an example, you can instrument a <a href="file.html#FileAppender" class="xref page"><code>File</code> appender</a> to perform asynchronous I/O, by using the following appender configurations:</p>
+</div>
+<div id="_tabs_1" class="openblock tabs is-sync is-loading">
+<div class="content">
+<div class="ulist tablist">
+<ul>
+<li id="_tabs_1_xml" class="tab">
+<p>XML</p>
+</li>
+<li id="_tabs_1_json" class="tab">
+<p>JSON</p>
+</li>
+<li id="_tabs_1_yaml" class="tab">
+<p>YAML</p>
+</li>
+<li id="_tabs_1_properties" class="tab">
+<p>Properties</p>
+</li>
+</ul>
+</div>
+<div id="_tabs_1_xml--panel" class="tabpanel" aria-labelledby="_tabs_1_xml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/async.xml"><code>log4j2.xml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;File name="FILE"
+      fileName="app.log"&gt;
+  &lt;JsonTemplateLayout/&gt;
+&lt;/File&gt;
+&lt;Async name="ASYNC"&gt;
+  &lt;AppenderRef ref="FILE"/&gt;
+&lt;/Async&gt;</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_1_json--panel" class="tabpanel" aria-labelledby="_tabs_1_json">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/async.json"><code>log4j2.json</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"File": {
+  "name": "FILE",
+  "fileName": "app.log"
+},
+"Async": {
+  "name": "ASYNC"
+}</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_1_yaml--panel" class="tabpanel" aria-labelledby="_tabs_1_yaml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/async.yaml"><code>log4j2.yaml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">File:
+  name: "FILE"
+  fileName: "app.log"
+Async:
+  name: "ASYNC"
+  AppenderRef:
+    ref: "FILE"</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_1_properties--panel" class="tabpanel" aria-labelledby="_tabs_1_properties">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/async.properties"><code>log4j2.properties</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.0.type = File
+appender.0.name = FILE
+appender.0.fileName = app.log
+
+appender.1.type = Async
+appender.1.name = ASYNC
+appender.1.appenderRef.type = AppenderRef
+appender.1.appenderRef.ref = FILE</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="AsyncQueueFullPolicy"><a class="anchor" href="#AsyncQueueFullPolicy"></a>Queue full policy</h3>
+<div class="paragraph">
+<p>When the queue is full the <code>Async</code> Appender uses an
+<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/async/AsyncQueueFullPolicy.html"><code>AsyncQueueFullPolicy</code></a>
+to decide whether to:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>drop the log event.</p>
+</li>
+<li>
+<p>busy wait until the log event can be added to the queue.</p>
+</li>
+<li>
+<p>log the event on the current thread.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The queue full policy can only be configured through
+<a href="../systemproperties.html" class="xref page">configuration properties</a>.
+See <a href="../systemproperties.html#properties-async" class="xref page">Async components</a> for more details.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="BlockingQueueFactory"><a class="anchor" href="#BlockingQueueFactory"></a>Blocking Queue Factories</h3>
+<div class="paragraph">
+<p>The <code>Async</code> appender allows you to customize the blocking queue used by specifying a nested
+<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/async/BlockingQueueFactory.html"><code>BlockingQueueFactory</code></a>
+element.</p>
+</div>
+<div class="paragraph">
+<p>You can specify the size of the queue using the <a href="#AsyncAppender-attr-bufferSize"><code>bufferSize</code></a> configuration attribute.</p>
+</div>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-async-BlockingQueueFactory" class="xref page">&#x1F4D6; Plugin reference for <code>BlockingQueueFactory</code></a></p>
+</div>
+<div id="ArrayBlockingQueueFactory" class="dlist">
+<dl>
+<dt class="hdlist1"><code>ArrayBlockingQueue</code></dt>
+<dd>
+<div class="paragraph">
+<p>This is the default implementation that produces
+<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ArrayBlockingQueue.html"><code>ArrayBlockingQueue</code></a>s.</p>
+</div>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-async-ArrayBlockingQueueFactory" class="xref page">&#x1F4D6; Plugin reference for <code>ArrayBlockingQueue</code></a></p>
+</div>
+</dd>
+</dl>
+</div>
+<div id="DisruptorBlockingQueueFactory" class="dlist">
+<dl>
+<dt class="hdlist1"><code>DisruptorBlockingQueue</code></dt>
+<dd>
+<div class="paragraph">
+<p>This queue factory uses the
+<a href="https://github.com/conversant/disruptor">Conversant Disruptor</a>
+implementation of <code>BlockingQueue</code>.</p>
+</div>
+<table id="DisruptorBlockingQueueFactory-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 3. <code>DisruptorBlockingQueue</code> Factory configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</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>spinPolicy</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://javadoc.io/doc/com.conversantmedia/disruptor/latest/com.conversantmedia.disruptor/com/conversantmedia/util/concurrent/SpinPolicy.html"><code>SpinPolicy</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://javadoc.io/doc/com.conversantmedia/disruptor/latest/com.conversantmedia.disruptor/com/conversantmedia/util/concurrent/SpinPolicy.html#WAITING"><code>WAITING</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The <code>SpinPolicy</code> to apply, when adding elements to the queue.</p></td>
+</tr>
+</tbody>
+</table>
+<details>
+<summary class="title">Additional dependencies are required to use <code>DisruptorBlockingQueue</code></summary>
+<div class="content">
+<div id="_tabs_2" class="openblock tabs is-sync is-loading">
+<div class="content">
+<div class="ulist tablist">
+<ul>
+<li id="_tabs_2_maven" class="tab">
+<p>Maven</p>
+</li>
+<li id="_tabs_2_gradle" class="tab">
+<p>Gradle</p>
+</li>
+</ul>
+</div>
+<div id="_tabs_2_maven--panel" class="tabpanel" aria-labelledby="_tabs_2_maven">
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;dependency&gt;
+  &lt;groupId&gt;com.conversantmedia&lt;/groupId&gt;
+  &lt;artifactId&gt;disruptor&lt;/artifactId&gt;
+  &lt;version&gt;1.2.21&lt;/version&gt;
+  &lt;scope&gt;runtime&lt;/scope&gt;
+&lt;/dependency&gt;</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_2_gradle--panel" class="tabpanel" aria-labelledby="_tabs_2_gradle">
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-groovy hljs" data-lang="groovy">runtimeOnly 'com.conversantmedia:disruptor:1.2.21'</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</details>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-async-DisruptorBlockingQueueFactory" class="xref page">&#x1F4D6; Plugin reference for <code>DisruptorBlockingQueue</code></a></p>
+</div>
+</dd>
+</dl>
+</div>
+<div id="JCToolsBlockingQueueFactory" class="dlist">
+<dl>
+<dt class="hdlist1"><code>JCToolsBlockingQueue</code></dt>
+<dd>
+<div class="paragraph">
+<p>This queue factory uses
+<a href="https://jctools.github.io/JCTools/">JCTools</a>, specifically the MPSC bounded lock-free queue.</p>
+</div>
+<details>
+<summary class="title">Additional dependencies are required to use <code>JCToolsBlockingQueue</code></summary>
+<div class="content">
+<div id="_tabs_3" class="openblock tabs is-sync is-loading">
+<div class="content">
+<div class="ulist tablist">
+<ul>
+<li id="_tabs_3_maven" class="tab">
+<p>Maven</p>
+</li>
+<li id="_tabs_3_gradle" class="tab">
+<p>Gradle</p>
+</li>
+</ul>
+</div>
+<div id="_tabs_3_maven--panel" class="tabpanel" aria-labelledby="_tabs_3_maven">
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;dependency&gt;
+  &lt;groupId&gt;org.jctools&lt;/groupId&gt;
+  &lt;artifactId&gt;jctools-core&lt;/artifactId&gt;
+  &lt;version&gt;4.0.5&lt;/version&gt;
+  &lt;scope&gt;runtime&lt;/scope&gt;
+&lt;/dependency&gt;</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_3_gradle--panel" class="tabpanel" aria-labelledby="_tabs_3_gradle">
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-groovy hljs" data-lang="groovy">runtimeOnly 'org.jctools:jctools-core:4.0.5'</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</details>
+</dd>
+</dl>
+</div>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-async-JCToolsBlockingQueueFactory" class="xref page">&#x1F4D6; Plugin reference for <code>JCToolsBlockingQueue</code></a></p>
+</div>
+<div id="LinkedTransferQueueFactory" class="dlist">
+<dl>
+<dt class="hdlist1"><code>LinkedTransferQueue</code></dt>
+<dd>
+<div class="paragraph">
+<p>This queue factory produces
+<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedTransferQueue.html"><code>LinkedTransferQueue</code></a>s.
+Note that this queue does not have a maximum capacity and ignores the <a href="#AsyncAppender-attr-bufferSize"><code>bufferSize</code></a> attribute.</p>
+</div>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-async-LinkedTransferQueueFactory" class="xref page">&#x1F4D6; Plugin reference for <code>LinkedTransferQueue</code></a></p>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="FailoverAppender"><a class="anchor" href="#FailoverAppender"></a><code>Failover</code> Appender</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The <code>Failover</code> Appender can protect your logging pipeline against I/O exceptions in other appenders.</p>
+</div>
+<div class="paragraph">
+<p>During normal operations the <code>Failover</code> Appender forwards all log events to a primary appender.
+However, if the primary appender fails, a set of secondary appenders will be checked until one succeeds.</p>
+</div>
+<div class="sect2">
+<h3 id="FailoverAppender-configuration"><a class="anchor" href="#FailoverAppender-configuration"></a><code>Failover</code> configuration</h3>
+<div class="paragraph">
+<p>The <code>Failover</code> Appender supports the following configuration options:</p>
+</div>
+<table id="FailoverAppender-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 4. <code>Failover</code> Appender configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<th class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">Required</p></th>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FailoverAppender-attr-name"></a>name</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The name of this appender.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FailoverAppender-attr-primary"></a>primary</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the primary appender to use.</p></td>
+</tr>
+<tr>
+<th class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">Optional</p></th>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FailoverAppender-attr-retryIntervalSeconds"></a>retryIntervalSeconds</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>int</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>60</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">It specifies how many seconds to wait after a failure of the primary appender before the primary appender can be used again.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FailoverAppender-attr-ignoreExceptions"></a>ignoreExceptions</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>false</code> and <strong>all</strong> the fallback appenders fail to handle the log event, the logging exception will be forwarded to the caller.
+Otherwise, it will be ignored.</p>
+<p class="tableblock">Logging exceptions are always also logged to <a href="../status-logger.html" class="xref page">Status Logger</a></p></td>
+</tr>
+</tbody>
+</table>
+<table id="FailoverAppender-elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 5. <code>Failover</code> Appender nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Multiplicity</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><a id="FailoverAppender-element-Filter"></a><a href="../filters.html" class="xref page"><code>Filter</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Allows filtering log events just before they are appended to the blocking queue.</p>
+<p class="tableblock">See also <a href="../filters.html#appender-stage" class="xref page">appender filtering stage</a>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FailoverAppender-element-Failovers"></a><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-FailoversPlugin" class="xref page"><code>Failovers</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>one</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A container element for a list of
+<a href="../configuration.html#configuring-appenderrefs" class="xref page"><code>AppenderRef</code></a>s
+that specifies the names of the secondary appenders</p></td>
+</tr>
+</tbody>
+</table>
+<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>The primary appender must be configured to forward exceptions to the caller, by setting the
+<a href="../appenders.html#ignoreExceptions" class="xref page"><code>ignoreExceptions</code></a>
+configuration attribute to <code>false</code>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>The following example shows how to configure <code>Failover</code> to use an appender named <code>FILE</code> as primary and fall back to <code>CONSOLE</code> if an error occurs:</p>
+</div>
+<div id="_tabs_4" class="openblock tabs is-sync is-loading">
+<div class="content">
+<div class="ulist tablist">
+<ul>
+<li id="_tabs_4_xml" class="tab">
+<p>XML</p>
+</li>
+<li id="_tabs_4_json" class="tab">
+<p>JSON</p>
+</li>
+<li id="_tabs_4_yaml" class="tab">
+<p>YAML</p>
+</li>
+<li id="_tabs_4_properties" class="tab">
+<p>Properties</p>
+</li>
+</ul>
+</div>
+<div id="_tabs_4_xml--panel" class="tabpanel" aria-labelledby="_tabs_4_xml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/failover.xml"><code>log4j2.xml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;File name="FILE"
+      fileName="app.log"
+      ignoreExceptions="false"/&gt; <i class="conum" data-value="1"></i><b>(1)</b>
+&lt;Console name="CONSOLE"/&gt;
+&lt;Failover name="FAILOVER"
+          primary="FILE"&gt;
+  &lt;Failovers&gt;
+    &lt;AppenderRef ref="CONSOLE"/&gt;
+  &lt;/Failovers&gt;
+&lt;/Failover&gt;</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_4_json--panel" class="tabpanel" aria-labelledby="_tabs_4_json">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/failover.json"><code>log4j2.json</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"File": {
+  "name": "FILE",
+  "fileName": "app.log",
+  "ignoreExceptions": false <i class="conum" data-value="1"></i><b>(1)</b>
+},
+"Console": {
+  "name": "CONSOLE"
+},
+"Failover": {
+  "name": "FAILOVER",
+  "primary": "FILE",
+  "Failovers": {
+    "AppenderRef": {
+      "ref": "CONSOLE"
+    }
+  }
+}</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_4_yaml--panel" class="tabpanel" aria-labelledby="_tabs_4_yaml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/failover.yaml"><code>log4j2.yaml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">File:
+  name: "FILE"
+  fileName: "app.log"
+  ignoreExceptions: false
+Console:
+  name: "CONSOLE"
+Failover:
+  name: "FAILOVER"
+  primary: "FILE"
+  Failovers:
+    AppenderRef:
+      ref: "CONSOLE"</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_4_properties--panel" class="tabpanel" aria-labelledby="_tabs_4_properties">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/failover.properties"><code>log4j2.properties</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.0.type = File
+appender.0.name = FILE
+appender.0.fileName = app.log
+appender.0.ignoreExceptions = false
+
+appender.1.type = Console
+appender.1.name = CONSOLE
+
+appender.2.type = Failover
+appender.2.name = FAILOVER
+appender.2.primary = FILE
+appender.2.fail.type = Failovers
+appender.2.fail.0.type = AppenderRef
+appender.2.fail.0.ref = CONSOLE</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>The primary appender must set <code>ignoreExceptions</code> to <code>false</code>.</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-FailoverAppender" class="xref page">&#x1F4D6; Plugin reference for <code>Failover</code></a></p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="RewriteAppender"><a class="anchor" href="#RewriteAppender"></a><code>Rewrite</code> Appender</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The <code>Rewrite</code> allows the log events to be manipulated before they are processed by another Appender.
+This can be used to inject additional information into each event.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Although this appender can be used to mask sensitive information contained in log events, we strongly discourage such practice.
+Sensitive data like passwords and credit card numbers can appear in log files in many formats, and it is challenging to detect them all.</p>
+</div>
+<div class="paragraph">
+<p>A better approach to sensitive data is not to log them at all.
+Third-party frameworks like
+<a href="https://github.com/palantir/safe-logging">Palantir <code>safe-logging</code></a>
+can ensure that objects marked as sensitive are not passed as parameters to log statements.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="RewriteAppender-configuration"><a class="anchor" href="#RewriteAppender-configuration"></a><code>Rewrite</code> Configuration</h3>
+<table id="RewriteAppender-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 6. <code>Rewrite</code> Appender configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<th class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">Required</p></th>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RewriteAppender-attr-name"></a>name</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The name of this appender.</p></td>
+</tr>
+<tr>
+<th class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">Optional</p></th>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RewriteAppender-attr-ignoreExceptions"></a>ignoreExceptions</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>false</code> and the downstream appender fails with an exception, the exception will be propagated to the caller.
+Otherwise, it will be ignored.</p>
+<p class="tableblock">Logging exceptions are always also logged to <a href="../status-logger.html" class="xref page">Status Logger</a></p></td>
+</tr>
+</tbody>
+</table>
+<table id="RewriteAppender-elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 7. <code>Rewrite</code> Appender nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Multiplicity</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><a id="RewriteAppender-element-AppenderRef"></a><a href="../configuration.html#configuring-appenderrefs" class="xref page"><code>AppenderRef</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>one</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The
+<a href="../configuration.html#configuring-appenderrefs" class="xref page">reference to an appender</a>
+that will perform the actual logging.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RewriteAppender-element-Filter"></a><a href="../filters.html" class="xref page"><code>Filter</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Allows filtering log events just before they are appended to the blocking queue.</p>
+<p class="tableblock">See also <a href="../filters.html#appender-stage" class="xref page">appender filtering stage</a>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RewriteAppender-element-RewritePolicy"></a><a href="#RewritePolicy"><code>RewritePolicy</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>one</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The <a href="#RewritePolicy">rewrite policy</a> to apply to all logged events.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rewrite-RewriteAppender" class="xref page">&#x1F4D6; Plugin reference for <code>Rewrite</code></a></p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="RewritePolicy"><a class="anchor" href="#RewritePolicy"></a>Rewrite Policies</h3>
+<div class="paragraph">
+<p>A rewrite policy is a Log4j plugin that implements the
+<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rewrite/RewritePolicy.html"><code>RewritePolicy</code></a>
+interface.
+Rewrite policies allow to apply arbitrary modifications to log events.</p>
+</div>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rewrite-RewritePolicy" class="xref page">&#x1F4D6; Plugin reference for <code>RewritePolicy</code></a></p>
+</div>
+<div class="paragraph">
+<p>Log4j Core provides three rewrite policies out-of-the-box:</p>
+</div>
+<div id="MapRewritePolicy" class="dlist">
+<dl>
+<dt class="hdlist1"><code>MapRewritePolicy</code></dt>
+<dd>
+<div class="paragraph">
+<p>The <code>MapRewritePolicy</code> only modifies events that contain a
+<a href="../messages.html#MapMessage" class="xref page"><code>MapMessage</code></a>.
+It allows adding or updating the keys of the <code>MapMessage</code>.</p>
+</div>
+<table id="MapRewritePolicy-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 8. <code>MapRewritePolicy</code> configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</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><a id="MapRewritePolicy-attr-mode"></a>mode</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.Mode.html"><code>MapRewritePolicy.Mode</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../https://logging.apache.org/log4j/2.x/javadoc/log4j-core/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.Mode.html#Add"><code>Add</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>It determines which map entries to modify:</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1">Add</dt>
+<dd>
+<p>All the configured map entries will be added to the <code>MapMessage</code>, modifying the existing ones.</p>
+</dd>
+<dt class="hdlist1">Update</dt>
+<dd>
+<p>The rewrite policy will add to the <code>MapMessage</code> only entries corresponding to existing keys.</p>
+</dd>
+</dl>
+</div></div></td>
+</tr>
+</tbody>
+</table>
+<table id="MapRewritePolicy-elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 9. <code>MapRewritePolicy</code> nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Type</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Multiplicity</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="MapRewritePolicy-element-KeyValuePair"></a>
+<a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-util-KeyValuePair" class="xref page"><code>KeyValuePair</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">one or more</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A list of map entries to add to the <code>MapMessage</code>.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rewrite-MapRewritePolicy" class="xref page">&#x1F4D6; Plugin reference for <code>MapRewritePolicy</code></a></p>
+</div>
+</dd>
+</dl>
+</div>
+<div id="PropertiesRewritePolicy" class="dlist">
+<dl>
+<dt class="hdlist1"><code>PropertiesRewritePolicy</code></dt>
+<dd>
+<div class="paragraph">
+<p>The <code>PropertiesRewritePolicy</code> will add properties to the context data of the log event.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Only the context data of the log event will be modified.
+The contents of the <a href="../thread-context.html" class="xref page">Thread Context</a> will remain unchanged.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<table id="PropertiesRewritePolicy-elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 10. <code>PropertiesRewritePolicy</code> nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Multiplicity</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><a id="PropertiesRewritePolicy-element-Property"></a><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-config-Property" class="xref page"><code>Property</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">one or more</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A list of map entries to add to the context data of the log event.</p>
+<p class="tableblock">The <code>value</code> attribute of each <code>Property</code> element supports
+<a href="../configuration.html#lazy-property-substitution" class="xref page">runtime property substitution</a>
+in the
+<a href="../lookups.html#global-context" class="xref page"><em>global context</em></a>.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rewrite-PropertiesRewritePolicy" class="xref page">&#x1F4D6; Plugin reference for <code>PropertiesRewritePolicy</code></a></p>
+</div>
+</dd>
+</dl>
+</div>
+<div id="LoggerNameLevelRewritePolicy" class="dlist">
+<dl>
+<dt class="hdlist1">LoggerNameLevelRewritePolicy</dt>
+<dd>
+<div class="paragraph">
+<p>You can use this policy to change the log level of loggers from third-party libraries.
+The <code>LoggerNameLevelRewritePolicy</code> will rewrite the level of log event for a given logger name prefix.</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>The new log levels will only be used by the filter attached to the <code>Rewrite</code> appender and those downstream of the appender.
+Filters configured on loggers will use the previous levels.
+See <a href="../filters.html" class="xref page">Filters</a> for more details on filtering</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<table id="LoggerNameLevelRewritePolicy-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 11. <code>LoggerNameLevelRewritePolicy</code> configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</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><a id="LoggerNameLevelRewritePolicy-attr-mode"></a>logger</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The rewrite policy will only be applied to loggers with this logger name and their children.</p></td>
+</tr>
+</tbody>
+</table>
+<table id="LoggerNameLevelRewritePolicy-elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 12. <code>LoggerNameLevelRewritePolicy</code> nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Multiplicity</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><a id="LoggerNameLevelRewritePolicy-element-KeyValuePair"></a><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-util-KeyValuePair" class="xref page"><code>KeyValuePair</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">one or more</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Provides a mapping between old level names and new level names.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rewrite-LoggerNameLevelRewritePolicy" class="xref page">&#x1F4D6; Plugin reference for <code>LoggerNameLevelRewritePolicy</code></a></p>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect2">
+<h3 id="RewriteAppender-examples"><a class="anchor" href="#RewriteAppender-examples"></a>Configuration example</h3>
+<div class="paragraph">
+<p>If a library <code>org.example</code> over-evaluates the severity of its log events, you decrease their severity with the following configuration:</p>
+</div>
+<div id="_tabs_5" class="openblock tabs is-sync is-loading">
+<div class="content">
+<div class="ulist tablist">
+<ul>
+<li id="_tabs_5_xml" class="tab">
+<p>XML</p>
+</li>
+<li id="_tabs_5_json" class="tab">
+<p>JSON</p>
+</li>
+<li id="_tabs_5_yaml" class="tab">
+<p>YAML</p>
+</li>
+<li id="_tabs_5_properties" class="tab">
+<p>Properties</p>
+</li>
+</ul>
+</div>
+<div id="_tabs_5_xml--panel" class="tabpanel" aria-labelledby="_tabs_5_xml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/rewrite.xml"><code>log4j2.xml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;Rewrite name="REWRITE"&gt;
+  &lt;LoggerNameLevelRewritePolicy logger="org.example"&gt; <i class="conum" data-value="1"></i><b>(1)</b>
+    &lt;KeyValuePair key="WARN" value="INFO"/&gt;
+    &lt;KeyValuePair key="INFO" value="DEBUG"/&gt;
+  &lt;/LoggerNameLevelRewritePolicy&gt;
+  &lt;AppenderRef level="INFO" ref="CONSOLE"/&gt; <i class="conum" data-value="2"></i><b>(2)</b>
+&lt;/Rewrite&gt;</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_5_json--panel" class="tabpanel" aria-labelledby="_tabs_5_json">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/rewrite.json"><code>log4j2.json</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"Rewrite": {
+  "name": "REWRITE",
+  "LoggerNameLevelRewritePolicy": { <i class="conum" data-value="1"></i><b>(1)</b>
+    "logger": "org.example",
+    "KeyValuePair": [
+      {
+        "key": "WARN",
+        "value": "INFO"
+      },
+      {
+        "key": "INFO",
+        "value": "DEBUG"
+      }
+    ]
+  },
+  "AppenderRef": {
+    "level": "INFO", <i class="conum" data-value="2"></i><b>(2)</b>
+    "ref": "CONSOLE"
+  }
+}</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_5_yaml--panel" class="tabpanel" aria-labelledby="_tabs_5_yaml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/rewrite.yaml"><code>log4j2.yaml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">Rewrite:
+  name: "REWRITE"
+  LoggerNameLevelRewritePolicy: <i class="conum" data-value="1"></i><b>(1)</b>
+    logger: "org.example"
+    KeyValuePair:
+      - key: "WARN"
+        value: "INFO"
+      - key: "INFO"
+        value: "DEBUG"
+  AppenderRef:
+    level: "INFO" <i class="conum" data-value="2"></i><b>(2)</b>
+    ref: "CONSOLE"</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_5_properties--panel" class="tabpanel" aria-labelledby="_tabs_5_properties">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/rewrite.properties"><code>log4j2.properties</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.1.type = Rewrite
+appender.1.name = REWRITE
+
+<i class="conum" data-value="1"></i><b>(1)</b>
+appender.1.policy.type = LoggerNameLevelRewritePolicy
+appender.1.policy.logger = org.example
+appender.1.policy.kv0.type = KeyValuePair
+appender.1.policy.kv0.key = WARN
+appender.1.policy.kv0.value = INFO
+appender.1.policy.kv1.type = KeyValuePair
+appender.1.policy.kv1.key = INFO
+appender.1.policy.kv1.value = DEBUG
+
+appender.1.appenderRef.type = AppenderRef
+<i class="conum" data-value="2"></i><b>(2)</b>
+appender.1.appenderRef.level = INFO
+appender.1.appenderRef.ref = CONSOLE</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>Decreases the severity of <code>WARN</code> and <code>INFO</code> messages, so they appear with the new severity in your log viewer.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>If additionally you don&#8217;t want to log <code>DEBUG</code> log events, you must apply a filter.</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="RoutingAppender"><a class="anchor" href="#RoutingAppender"></a><code>Routing</code> Appender</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The <code>Routing</code> Appender evaluates log events and then routes them to one of its subordinate appenders.
+The target appender may be:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>an existing appender referenced by its name.</p>
+</li>
+<li>
+<p>a new appender obtained by evaluating a configuration snippet.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The <code>Routing</code> Appender should be configured after any appenders it references to allow it to shut down properly.</p>
+</div>
+<div class="sect2">
+<h3 id="RoutingAppender-configuration"><a class="anchor" href="#RoutingAppender-configuration"></a><code>Routing</code> Configuration</h3>
+<table id="RoutingAppender-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 13. <code>Routing</code> Appender configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<th class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">Required</p></th>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RoutingAppender-attr-name"></a>name</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The name of this appender.</p></td>
+</tr>
+<tr>
+<th class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">Optional</p></th>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RoutingAppender-attr-ignoreExceptions"></a>ignoreExceptions</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>false</code> and the downstream appender fails with an exception, the exception will be propagated to the caller.
+Otherwise, it will be ignored.</p>
+<p class="tableblock">Logging exceptions are always also logged to <a href="../status-logger.html" class="xref page">Status Logger</a></p></td>
+</tr>
+</tbody>
+</table>
+<table id="RoutingAppender-elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 14. <code>Routing</code> Appender nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Multiplicity</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><a id="RoutingAppender-element-AbstractScript"></a><a href="../scripts.html" class="xref page"><code>AbstractScript</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>This script has two purposes:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>It initializes a shared <code>Map&lt;String, Object&gt;</code> bound to the <code>staticVariables</code> identifier.
+The values of this map can be used later by the <a href="#Routes-element-AbstractScript"><code>Routes</code> script</a>.</p>
+</li>
+<li>
+<p>It returns the name of the default route.</p>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>The script has the following bindings:</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>staticVariables</code></dt>
+<dd>
+<p>A <code>Map&lt;String, Object&gt;</code> that is reused between script calls.
+This is the same map, which is passed to the <a href="#RoutingAppender-element-AbstractScript"><code>AbstractScript</code> of <code>Routing</code></a>.</p>
+</dd>
+<dt class="hdlist1"><code>configuration</code></dt>
+<dd>
+<p>The current <a href="../configuration.html" class="xref page"><code>Configuration</code> object</a>.</p>
+</dd>
+<dt class="hdlist1"><code>statusLogger</code></dt>
+<dd>
+<p>The <a href="../status-logger.html" class="xref page">Status Logger</a> to use to print diagnostic messages in the script.</p>
+</dd>
+</dl>
+</div>
+<div class="paragraph">
+<p>See also <a href="../scripts.html" class="xref page">Scripts</a> for more details on scripting in Log4j Core.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RoutingAppender-element-Filter"></a><a href="../filters.html" class="xref page"><code>Filter</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Allows filtering log events before routing them to a subordinate appender.</p>
+<p class="tableblock">See also <a href="../filters.html#appender-stage" class="xref page">appender filtering stage</a>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RoutingAppender-element-PurgePolicy"></a><a href="#PurgePolicy"><code>PurgePolicy</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The <a href="#PurgePolicy">purge policy</a> to apply to handle the lifecycle of automatically instantiated appenders.</p>
+<p class="tableblock">See <a href="#PurgePolicy">Purge Policy</a> for more details.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RoutingAppender-element-RewritePolicy"></a><a href="#RewritePolicy"><code>RewritePolicy</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The <a href="#RewritePolicy">rewrite policy</a> to apply to all logged events.</p>
+<p class="tableblock">If set, the <code>Routing</code> appender will rewrite a log event before routing it.
+See also <a href="#RewriteAppender"><code>Rewrite</code> Appender</a>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RoutingApender-element-Routes"></a><a href="#Routes"><code>Routes</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>one</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Determines the routing configuration of the appender.</p>
+<p class="tableblock">See <a href="#Routes"><code>Routes</code></a> for more details.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-routing-RoutingAppender" class="xref page">&#x1F4D6; Plugin reference for <code>Routing</code></a></p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="route-selection"><a class="anchor" href="#route-selection"></a>Route selection</h3>
+<div class="paragraph">
+<p>At the base of route selection there are two configuration elements:</p>
+</div>
+<div id="Routes" class="dlist">
+<dl>
+<dt class="hdlist1"><code>Routes</code></dt>
+<dd>
+<div class="paragraph">
+<p>The <code>Routes</code> element is a container for <a href="#Route"><code>Route</code></a> definitions.
+It provides two additional properties, which are used to determine the appropriate route for each log event:</p>
+</div>
+<table id="Routes-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 15. <code>Routes</code> configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</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><a id="Routes-attr-pattern"></a>pattern</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If present, this pattern is evaluated at each log event to determine the key of the route to use.</p>
+<p class="tableblock">This attribute supports
+<a href="../configuration.html#lazy-property-substitution" class="xref page">runtime property substitution</a>
+using the
+<a href="../lookups.html#event-context" class="xref page">current event as context</a>.</p>
+<p class="tableblock"><strong>Required</strong>, unless a nested <a href="#Routes-element-AbstractScript"><code>AbstractScript</code></a> is provided.</p></td>
+</tr>
+</tbody>
+</table>
+<table id="Routes-elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 16. <code>Routes</code> nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Multiplicity</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><a id="Routes-element-AbstractScript"></a><a href="../scripts.html" class="xref page"><code>AbstractScript</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>If present, this script is evaluated at each log event to determine the key of the route to use.
+The script has the following bindings:</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>staticVariables</code></dt>
+<dd>
+<p>A <code>Map&lt;String, Object&gt;</code> that is reused between script calls.
+This is the same map, which is passed to the <a href="#RoutingAppender-element-AbstractScript"><code>AbstractScript</code> of <code>Routing</code></a>.</p>
+</dd>
+<dt class="hdlist1"><code>logEvent</code></dt>
+<dd>
+<p>The
+<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/LogEvent.html"><code>LogEvent</code></a>
+being processed.</p>
+</dd>
+<dt class="hdlist1"><code>configuration</code></dt>
+<dd>
+<p>The current <a href="../configuration.html" class="xref page"><code>Configuration</code> object</a>.</p>
+</dd>
+<dt class="hdlist1"><code>statusLogger</code></dt>
+<dd>
+<p>The <a href="../status-logger.html" class="xref page">Status Logger</a> to use to print diagnostic messages in the script.</p>
+</dd>
+</dl>
+</div>
+<div class="paragraph">
+<p>See also <a href="../scripts.html" class="xref page">Scripts</a> for more details on scripting in Log4j Core.</p>
+</div>
+<div class="paragraph">
+<p><strong>Required</strong>, unless the <a href="#Routes-attr-pattern"><code>pattern</code></a> attribute is provided.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a href="#Route"><code>Route</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">one or more</p></td>
+<td class="tableblock halign-left valign-top"></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-routing-Routes" class="xref page">&#x1F4D6; Plugin reference for <code>Routes</code></a></p>
+</div>
+</dd>
+</dl>
+</div>
+<div id="Route" class="dlist">
+<dl>
+<dt class="hdlist1"><code>Route</code></dt>
+<dd>
+<p>The <code>Route</code> element determines the appender to use if the route is selected.
+The appender can be:</p>
+<div class="openblock">
+<div class="content">
+<div class="ulist">
+<ul>
+<li>
+<p>A previously declared appender, from the <a href="../configuration.html#main-configuration-elements" class="xref page"><code>Appenders</code> section</a> of the configuration file.</p>
+</li>
+<li>
+<p>A new appender that is instantiated based on a nested appender definition, when the route becomes active.
+See also <a href="#PurgePolicy">Purge Policy</a> to learn more about the lifecycle of such an appender.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<table id="Route-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 17. <code>Route</code> configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Attribute</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Default value</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="Route-attr-key"></a>
+key</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>null</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A key that is compared with the evaluation of either the <a href="#Routes-attr-pattern"><code>pattern</code></a> attribute or <a href="#Routes-element-AbstractScript">nested script</a> of the `Routes element.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="Route-attr-ref"></a>
+ref</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The reference to an existing appender to use.</p>
+<p class="tableblock">You cannot specify both this attribute and a <a href="#Route-element-Appender">nested `Appender definition</a>.</p></td>
+</tr>
+</tbody>
+</table>
+<table id="Route-elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 18. <code>Route</code> nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Type</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Multiplicity</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="Route-element-Appender"></a>
+<a href="../appenders.html" class="xref page"><code>Appender</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The definition of an <code>Appender</code> to create, when this route is used for the first time.</p>
+<p class="tableblock">You cannot specify both this nested element and the <a href="#Route-attr-ref"><code>ref</code> configuration attribute</a>.</p></td>
+</tr>
+</tbody>
+</table>
+<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>Lookups in the <strong>children</strong> of the <code>Route</code> component are <strong>not</strong> evaluated at configuration time.
+The substitution is delayed until the <code>Route</code> element is evaluated.
+This means that <code>${...}</code> expression <strong>should not</strong> be escaped as <code>$${...}</code>.</p>
+</div>
+<div class="paragraph">
+<p>The appender definition is evaluated in the <a href="../lookups.html#event-context" class="xref page">context of the current event</a>, instead of the global context.</p>
+</div>
+<div class="paragraph">
+<p>See <a href="../configuration.html#lazy-property-substitution" class="xref page">lazy property substitution</a> for more details.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-routing-Route" class="xref page">&#x1F4D6; Plugin reference for <code>Route</code></a></p>
+</div>
+</dd>
+</dl>
+</div>
+<div class="paragraph">
+<p>For each log event, the appropriate route is selected as follows:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>First the <a href="#Routes-attr-pattern"><code>pattern</code> attribute</a> or <a href="#Routes-element-AbstractScript"><code>Routes</code> script</a> are evaluated to obtain a <strong>key</strong>.</p>
+</li>
+<li>
+<p>The key is compared with the <a href="#Route-attr-key"><code>key</code> attribute</a> of each <code>Route</code> element.</p>
+</li>
+<li>
+<p>If there is a <code>Route</code> for that key, it is selected.</p>
+</li>
+<li>
+<p>Otherwise, the <strong>default</strong> <code>Route</code> is selected. The key of the default <code>Route</code> is determined by the <a href="#RoutingAppender-element-AbstractScript"><code>Routing</code> script</a> or is <code>null</code> (lack of <a href="#Route-attr-key"><code>key</code> attribute</a>) if the script is absent.</p>
+</li>
+</ol>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>If the <code>Route</code> element contains an appender definition, the appender will be instantiated:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>once if the <code>Route</code> has a non-default key.</p>
+</li>
+<li>
+<p>once for each value of the key, if the <code>Route</code> has the default key.</p>
+</li>
+</ul>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="PurgePolicy"><a class="anchor" href="#PurgePolicy"></a>Purge Policy</h3>
+<div class="paragraph">
+<p>If your default <a href="#Route"><code>Route</code> element</a> contains an <a href="#Route-element-Appender">appender definition</a>, the <code>Routing</code> Appender can instantiate a large number of appenders, one for each value of the routing key.
+These appenders might be useful only for a short period of time, but will consume system resources unless they are stopped.</p>
+</div>
+<div class="paragraph">
+<p>The purge policy is a Log4j plugin that implements the
+<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/routing/PurgePolicy.html"><code>PurgePolicy</code></a>
+interface and handles the lifecycle of automatically instantiated appenders.</p>
+</div>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-routing-PurgePolicy" class="xref page">&#x1F4D6; Plugin reference for <code>PurgePolicy</code></a></p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>If an appender has been destroyed, it can be created again when the <code>Route</code> is selected again.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Log4j Core provides one implementation of <code>PurgePolicy</code>:</p>
+</div>
+<div id="IdlePurgePolicy" class="dlist">
+<dl>
+<dt class="hdlist1"><code>IdlePurgePolicy</code></dt>
+<dd>
+<div class="paragraph">
+<p>This policy destroys appenders if they have not been used for a certain amount of time.
+It supports the following configuration attributes:</p>
+</div>
+<table id="IdlePurgePolicy-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 19. <code>IdlePurgePolicy</code> configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</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><a id="IdlePurgePolicy-attr-timeToLive"></a>timeToLive</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>long</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">It specifies the number of <a href="#IdlePurgePolicy-attr-timeUnit">time units</a> that an appender can be idle, before it is destroyed.</p>
+<p class="tableblock"><strong>Required</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="IdlePurgePolicy-attr-checkInterval"></a>checkInterval</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>long</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#IdlePurgePolicy-attr-timeToLive"><code>timeToLive</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">It specifies the number of <a href="#IdlePurgePolicy-attr-timeUnit">time units</a> between two runs of this purge policy.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="IdlePurgePolicy-attr-timeUnit"></a>timeUnit</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html"><code>TimeUnit</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html#MINUTES"><code>MINUTES</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">It specifies the time unit to use for the other attributes.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-routing-IdlePurgePolicy" class="xref page">&#x1F4D6; Plugin reference for <code>IdlePurgePolicy</code></a></p>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="sect2">
+<h3 id="RoutingAppender-examples"><a class="anchor" href="#RoutingAppender-examples"></a>Configuration examples</h3>
+<div class="sect3">
+<h4 id="RoutingAppender-example-ref"><a class="anchor" href="#RoutingAppender-example-ref"></a>Using appender references</h4>
+<div class="paragraph">
+<p>You can deliver log events for different <a href="../markers.html" class="xref page">Markers</a> into separate log files, using the following configuration:</p>
+</div>
+<div id="_tabs_6" class="openblock tabs is-sync is-loading">
+<div class="content">
+<div class="ulist tablist">
+<ul>
+<li id="_tabs_6_xml" class="tab">
+<p>XML</p>
+</li>
+<li id="_tabs_6_json" class="tab">
+<p>JSON</p>
+</li>
+<li id="_tabs_6_yaml" class="tab">
+<p>YAML</p>
+</li>
+<li id="_tabs_6_properties" class="tab">
+<p>Properties</p>
+</li>
+</ul>
+</div>
+<div id="_tabs_6_xml--panel" class="tabpanel" aria-labelledby="_tabs_6_xml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-ref.xml"><code>log4j2.xml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;Routing name="ROUTING"&gt;
+  &lt;Routes pattern="$${event:Marker}"&gt;
+    &lt;Route key="AUDIT" ref="AUDIT_LOG"/&gt; <i class="conum" data-value="1"></i><b>(1)</b>
+    &lt;Route key="$${event:Marker}" ref="MAIN_LOG"/&gt; <i class="conum" data-value="2"></i><b>(2)</b>
+    &lt;Route ref="MARKED_LOG"/&gt; <i class="conum" data-value="3"></i><b>(3)</b>
+  &lt;/Routes&gt;
+&lt;/Routing&gt;</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_6_json--panel" class="tabpanel" aria-labelledby="_tabs_6_json">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-ref.json"><code>log4j2.json</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"Routing": {
+  "name": "ROUTING",
+  "Routes": {
+    "pattern": "$${event:Marker}}",
+    "Route": [
+      { <i class="conum" data-value="1"></i><b>(1)</b>
+        "key": "AUDIT",
+        "ref": "AUDIT_LOG"
+      },
+      { <i class="conum" data-value="2"></i><b>(2)</b>
+        "key": "$${event:Marker}",
+        "ref": "MAIN_LOG"
+      },
+      { <i class="conum" data-value="3"></i><b>(3)</b>
+        "ref": "MARKED_LOG"
+      }
+    ]
+  }
+}</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_6_yaml--panel" class="tabpanel" aria-labelledby="_tabs_6_yaml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-ref.yaml"><code>log4j2.yaml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">Routing:
+  Routes:
+    pattern: "$${event:Marker}"
+    Route:
+      - key: "AUDIT" <i class="conum" data-value="1"></i><b>(1)</b>
+        ref: "AUDIT_LOG"
+      - key: "$${event:Marker}" <i class="conum" data-value="2"></i><b>(2)</b>
+        ref: "MAIN_LOG"
+      - ref: "MARKED_LOG" <i class="conum" data-value="3"></i><b>(3)</b></code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_6_properties--panel" class="tabpanel" aria-labelledby="_tabs_6_properties">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-ref.properties"><code>log4j2.properties</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.3.type = Routing
+appender.3.name = ROUTING
+appender.3.route.type = Routes
+appender.3.route.pattern = $${event:Marker}
+<i class="conum" data-value="1"></i><b>(1)</b>
+appender.3.route.0.type = Route
+appender.3.route.0.key = AUDIT
+appender.3.route.0.ref = AUDIT_LOG
+<i class="conum" data-value="2"></i><b>(2)</b>
+appender.3.route.1.type = Route
+appender.3.route.1.key = $${event:Marker}
+appender.3.route.1.ref = MAIN_LOG
+<i class="conum" data-value="3"></i><b>(3)</b>
+appender.3.route.2.type = Route
+appender.3.route.2.ref = MARKED_LOG</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>This route is selected if the log event is marked with an <code>AUDIT</code> marker.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>This route is selected if the log event has no marker.
+In this case the expression <code>${event:Marker}</code> evaluates to itself.
+See <a href="../configuration.html#property-substitution" class="xref page">Property evaluation</a> for more details.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>This is the <strong>default</strong> route.
+It is selected if the log event has a marker, but it is not the <code>AUDIT</code> marker.</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="RoutingAppender-example-definition"><a class="anchor" href="#RoutingAppender-example-definition"></a>Using appender definitions</h4>
+<div class="paragraph">
+<p>If the number of appenders is high or unknown, you might want to use appender definitions instead of appender references.
+In the example below, a different log file is created for each <a href="../markers.html" class="xref page">marker</a>.</p>
+</div>
+<div id="_tabs_7" class="openblock tabs is-sync is-loading">
+<div class="content">
+<div class="ulist tablist">
+<ul>
+<li id="_tabs_7_xml" class="tab">
+<p>XML</p>
+</li>
+<li id="_tabs_7_json" class="tab">
+<p>JSON</p>
+</li>
+<li id="_tabs_7_yaml" class="tab">
+<p>YAML</p>
+</li>
+<li id="_tabs_7_properties" class="tab">
+<p>Properties</p>
+</li>
+</ul>
+</div>
+<div id="_tabs_7_xml--panel" class="tabpanel" aria-labelledby="_tabs_7_xml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-definition.xml"><code>log4j2.xml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;Routing name="ROUTING"&gt;
+  &lt;Routes pattern="$${event:Marker}"&gt; <i class="conum" data-value="1"></i><b>(1)</b>
+    &lt;Route&gt;
+      &lt;File name="${event:Marker}"
+            fileName="${event:Marker:-main}.log"&gt; <i class="conum" data-value="2"></i><b>(2)</b>
+        &lt;JsonTemplateLayout/&gt;
+      &lt;/File&gt;
+    &lt;/Route&gt;
+  &lt;/Routes&gt;
+  &lt;IdlePurgePolicy timeToLive="15"/&gt; <i class="conum" data-value="3"></i><b>(3)</b>
+&lt;/Routing&gt;</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_7_json--panel" class="tabpanel" aria-labelledby="_tabs_7_json">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-definition.json"><code>log4j2.json</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"Routing": {
+  "name": "ROUTING",
+  "Routes": {
+    "pattern": "$${event:Marker}}", <i class="conum" data-value="1"></i><b>(1)</b>
+    "Route": {
+      "File": { <i class="conum" data-value="2"></i><b>(2)</b>
+        "name": "${event:Marker}",
+        "fileName": "${event:Marker:-main}.log",
+        "JsonTemplateLayout": {}
+      }
+    }
+  },
+  "IdlePurgePolicy": { <i class="conum" data-value="3"></i><b>(3)</b>
+    "timeToLive": 15
+  }
+}</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_7_yaml--panel" class="tabpanel" aria-labelledby="_tabs_7_yaml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-definition.yaml"><code>log4j2.yaml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">Routing:
+  Routes:
+    pattern: "$${event:Marker}" <i class="conum" data-value="1"></i><b>(1)</b>
+    Route:
+      File: <i class="conum" data-value="2"></i><b>(2)</b>
+        name: "${event:Marker}"
+        fileName: "${event:Marker:-main}.log"
+IdlePurgePolicy: <i class="conum" data-value="3"></i><b>(3)</b>
+  timeToLive: 15</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_7_properties--panel" class="tabpanel" aria-labelledby="_tabs_7_properties">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-definition.properties"><code>log4j2.properties</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.0.type = Routing
+appender.0.name = ROUTING
+appender.0.route.type = Routes
+<i class="conum" data-value="1"></i><b>(1)</b>
+appender.0.route.pattern = $${event:Marker}
+
+appender.0.route.0.type = Route
+<i class="conum" data-value="2"></i><b>(2)</b>
+appender.0.route.0.appender.type = File
+appender.0.route.0.appender.name = ${event:Marker}
+appender.0.route.0.appender.fileName = ${event:Marker:-main}.log
+appender.0.route.0.appender.layout.type = JsonTemplateLayout
+
+<i class="conum" data-value="3"></i><b>(3)</b>
+appender.0.purge.type = IdlePurgePolicy
+appender.0.purge.timeToLive = 15</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>The <code>pattern</code> attribute is evaluated at configuration time, so the <code>${event:Marker}</code> lookup needs to be escaped.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>The appender definition is <strong>not</strong> evaluated at configuration time, so no escaping is necessary.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>To prevent resource leaks, consider using a <a href="#PurgePolicy">Purge Policy</a>.</td>
+</tr>
+</table>
+</div>
+</div>
+<div class="sect3">
+<h4 id="RoutingAppender-example-script"><a class="anchor" href="#RoutingAppender-example-script"></a>Using scripts</h4>
+<div class="paragraph">
+<p>If the flexibility of <a href="../lookups.html" class="xref page">Lookups</a> is not enough to express your routing logic, you can also resort to scripts.
+In the example below, we route messages in a round-robin fashion to three different Syslog servers:</p>
+</div>
+<div id="_tabs_8" class="openblock tabs is-sync is-loading">
+<div class="content">
+<div class="ulist tablist">
+<ul>
+<li id="_tabs_8_xml" class="tab">
+<p>XML</p>
+</li>
+<li id="_tabs_8_json" class="tab">
+<p>JSON</p>
+</li>
+<li id="_tabs_8_yaml" class="tab">
+<p>YAML</p>
+</li>
+<li id="_tabs_8_properties" class="tab">
+<p>Properties</p>
+</li>
+</ul>
+</div>
+<div id="_tabs_8_xml--panel" class="tabpanel" aria-labelledby="_tabs_8_xml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-script.xml"><code>log4j2.xml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;Routing name="ROUTING"&gt;
+  &lt;Script language="groovy"&gt; <i class="conum" data-value="1"></i><b>(1)</b>
+    staticVariables.servers = ['server1', 'server2', 'server3'];
+    staticVariables.count = 0;
+  &lt;/Script&gt;
+  &lt;Routes&gt;
+    &lt;Script language="groovy"&gt; <i class="conum" data-value="2"></i><b>(2)</b>
+      int count = staticVariables.count++;
+      String server = staticVariables.servers[count % 3];
+      return configuration.properties['server'] = server;
+    &lt;/Script&gt;
+    &lt;Route&gt;
+      &lt;Socket name="${server}"
+              protocol="TCP"
+              host="${server}"
+              port="500"&gt; <i class="conum" data-value="3"></i><b>(3)</b>
+        &lt;Rfc5424Layout/&gt;
+      &lt;/Socket&gt;
+    &lt;/Route&gt;
+  &lt;/Routes&gt;
+&lt;/Routing&gt;</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_8_json--panel" class="tabpanel" aria-labelledby="_tabs_8_json">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-script.json"><code>log4j2.json</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"Routing": {
+  "name": "ROUTING",
+  "Script": {
+    "language": "groovy",
+    <i class="conum" data-value="1"></i><b>(1)</b>
+    "scriptText": "staticVariables.servers = ['server1', 'server2', 'server3']; staticVariables.count = 0;"
+  },
+  "Routes": {
+    "Script": {
+      "language": "groovy",
+      <i class="conum" data-value="2"></i><b>(2)</b>
+      "scriptText": "int count = staticVariables.count++; String server = staticVariables.servers[count % 3]; return configuration.properties['server'] = server;"
+    },
+    "Route": {
+      "Socket": { <i class="conum" data-value="3"></i><b>(3)</b>
+        "name": "${server}",
+        "protocol": "TCP",
+        "host": "${server}",
+        "port": "500",
+        "Rfc5425Layout": {}
+      }
+    }
+  }
+}</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_8_yaml--panel" class="tabpanel" aria-labelledby="_tabs_8_yaml">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-script.yaml"><code>log4j2.yaml</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">Routing:
+  Script:
+    language: "groovy"
+    <i class="conum" data-value="1"></i><b>(1)</b>
+    scriptText: |
+      staticVariables.servers = ['server1', 'server2', 'server3'];
+      staticVariables.count = 0;
+  Routes:
+    Script:
+      language: "groovy"
+      <i class="conum" data-value="2"></i><b>(2)</b>
+      scriptText: |
+        int count = staticVariables.count++;
+        String server = staticVariables.servers[count % 3];
+        return configuration.properties['server'] = server;
+    Route:
+      <i class="conum" data-value="3"></i><b>(3)</b>
+      Socket:
+        name: "${server}"
+        protocol: "TCP"
+        host: "${server}"
+        port: 500
+        Rfc5424Layout: {}</code></pre>
+</div>
+</div>
+</div>
+<div id="_tabs_8_properties--panel" class="tabpanel" aria-labelledby="_tabs_8_properties">
+<div class="listingblock">
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/delegating/routing-script.properties"><code>log4j2.properties</code></a></div>
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.0.type = Routing
+appender.0.name = ROUTING
+
+appender.0.script.type = Script
+appender.0.script.language = groovy
+<i class="conum" data-value="1"></i><b>(1)</b>
+appender.0.script.scriptText = \
+  staticVariables.servers = ['server1', 'server2', 'server3']; \
+  staticVariables.count = 0;
+
+appender.0.route.type = Routes
+appender.0.route.script.type = Script
+appender.0.route.script.language = groovy
+<i class="conum" data-value="2"></i><b>(2)</b>
+appender.0.route.script.scriptText = \
+  int count = staticVariables.count++; \
+  String server = staticVariables.servers[count % 3]; \
+  return configuration.properties['server'] = server;
+
+appender.0.route.0.type = Route
+<i class="conum" data-value="3"></i><b>(3)</b>
+appender.0.route.0.appender.type = Socket
+appender.0.route.0.appender.name = ${server}
+appender.0.route.0.appender.protocol = TCP
+appender.0.route.0.appender.host = ${server}
+appender.0.route.0.appender.port = 500
+appender.0.route.0.appender.layout = Rfc5424Layout</code></pre>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="colist arabic">
+<table>
+<tr>
+<td><i class="conum" data-value="1"></i><b>1</b></td>
+<td>The <a href="#RoutingAppender-element-AbstractScript"><code>Routing</code> script</a> performs the initialization of state variables.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="2"></i><b>2</b></td>
+<td>The <a href="#Routes-element-AbstractScript"><code>Routes</code> script</a> returns the name of the server to use.
+It also exports the value as <code>server</code> entry in
+<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/config/Configuration.html#getProperties()"><code>Configuration.getProperties()</code></a>.</td>
+</tr>
+<tr>
+<td><i class="conum" data-value="3"></i><b>3</b></td>
+<td>The exported value can be used as <code>${server}</code> in the appender definition.</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="ScriptAppenderSelector"><a class="anchor" href="#ScriptAppenderSelector"></a><code>ScriptAppenderSelector</code></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The <code>ScriptAppenderSelector</code> plugin allows using different appender definitions based on the output of a script.
+At <strong>configuration time</strong>:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>The nested script element is evaluated to obtain the name of an appender.</p>
+</li>
+<li>
+<p>The plugin looks for the appropriate appender definition inside the <code>&lt;AppenderSet&gt;</code> container.</p>
+</li>
+</ol>
+</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>The functionality of <code>ScriptAppenderSelector</code> has been replaced by the more general
+<a href="../configuration.html#arbiters" class="xref page"><code>Arbiter</code> mechanism</a>.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<table id="ScriptAppenderSelector-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 20. <code>ScriptAppenderSelector</code> Appender configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Attribute</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Type</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Default value</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="ScriptAppenderSelector-attr-name"></a>name</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The name of this appender.</p>
+<p class="tableblock"><strong>Required</strong></p></td>
+</tr>
+</tbody>
+</table>
+<table id="ScriptAppenderSelector-elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 21. <code>ScriptAppenderSelector</code> Appender nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Multiplicity</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><a id="ScriptAppenderSelector-element-AbstractScript"></a><a href="../scripts.html" class="xref page"><code>AbstractScript</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>one</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The script to determine the appender name.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="RoutingAppender-element-AppenderSet"></a><code>AppenderSet</code></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>one</strong></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">A lazy container for appender definitions.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-ScriptAppenderSelector" class="xref page">&#x1F4D6; Plugin reference for <code>ScriptAppenderSelector</code></a></p>
+</div>
+</div>
+</div>
+</article>
+  </div>
+</main>
+</div>
+<footer class="footer">
+  <p>
+    Copyright © 1999-2024 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
+    Licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache Software License, Version 2.0</a>.
+    Please read our <a href="https://privacy.apache.org/policies/privacy-policy-public.html">privacy policy</a>.
+  </p>
+  <p>
+    Apache, Log4j, and the Apache feather logo are trademarks or registered trademarks of The Apache Software Foundation.
+    Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+    Other names may be trademarks of their respective owners.
+  </p>
+</footer>
+<script id="site-script" src="../../_/js/site.js" data-ui-root-path="../../_"></script>
+<script async src="../../_/js/vendor/highlight.js"></script>
+<!-- `@asciidoctor/tabs` extension scripts -->
+<script async src="../../_/js/vendor/tabs.js"></script>
+  </body>
+</html>
diff --git a/manual/appenders/file.html b/manual/appenders/file.html
new file mode 100644
index 0000000000..728df6521c
--- /dev/null
+++ b/manual/appenders/file.html
@@ -0,0 +1,737 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width,initial-scale=1">
+    <title>File appenders :: Apache Log4j</title>
+    <link rel="canonical" href="https://logging.apache.org/log4j/2.x/manual/appenders/file.html">
+    <meta name="generator" content="Antora 3.2.0-alpha.4">
+<link rel="stylesheet" href="../../_/css/site.css">
+<link rel="icon" href="../../_/../_images/favicon.ico" type="image/x-icon">
+<!-- `@asciidoctor/tabs` extension styles -->
+<link rel="stylesheet" href="../../_/css/vendor/tabs.css">
+<style>
+  /* Swap colors of `IMPORTANT` and `WARNING` blocks */ 
+  .doc .admonitionblock.important .icon { background-color: #f70; }
+  .doc .admonitionblock.warning .icon { background-color: #e40046; }
+  /* Default `h4`, `h5`, and `h6` are smaller than the normal text, fix header font sizing: */
+  .doc h1 { font-size: 1.9rem; }
+  .doc h2 { font-size: 1.7rem; }
+  .doc h3 { font-size: 1.5rem; font-weight: 400; }
+  .doc h4 { font-size: 1.3rem; font-weight: 500; }
+  .doc h5 { font-size: 1.1rem; font-weight: 500; text-decoration: underline; }
+  .doc h6 { font-size: 0.9rem; font-weight: 500; text-decoration: underline; }
+  /* Default `code`, `pre`, and `.colist` (source code annotations) fonts are too big, adjust them: */
+  .doc .colist>table code, .doc p code, .doc thead code { font-size: 0.8em; }
+  .doc pre { font-size: 0.7rem; }
+  .doc .colist { font-size: 0.75rem; }
+  /* Make links more visible: */
+  .doc a { text-decoration: underline; }
+  .doc a code { text-decoration: underline; color: #1565c0; }
+  /* Tab header fonts aren't rendered good, adjusting the font weight: */
+  .tablist > ul li { font-weight: 500; }
+  /* `page-toclevels` greater than 4 are not supported by Antora UI, patching it: */
+  .toc .toc-menu li[data-level="4"] a {
+    padding-left: 2.75rem;
+  }
+  /* Replace the default highlight.js color for strings from red (unnecessarily signaling something negative) to green: */
+  .hljs-string {
+    color: #0f8532;
+  }
+</style>
+  </head>
+  <body class="article">
+<header class="header">
+  <nav class="navbar">
+    <div class="navbar-brand">
+      <div class="navbar-item">
+        <img src="../../_/../_images/logo-small-white.png" alt="Apache Log4j"/>
+      </div>
+    </div>
+    <div id="topbar-nav" class="navbar-menu">
+      <div class="navbar-end">
+        <a class="navbar-item" href="https://logging.apache.org">a subproject of&nbsp;<strong>Apache Logging Services</strong></a>
+      </div>
+    </div>
+  </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="ROOT" data-version="">
+  <aside class="nav">
+    <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+  <nav class="nav-menu">
+    <button class="nav-menu-toggle" aria-label="Toggle expand/collapse all" style="display: none"></button>
+    <h3 class="title"><a href="../../index.html">Home</a></h3>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../../download.html">Download</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../../release-notes.html">Release Notes</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="https://logging.apache.org/support.html">Support</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="https://logging.apache.org/security.html">Security</a>
+  </li>
+</ul>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="0">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../index.html">Manual</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../getting-started.html">Getting started</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../installation.html">Installation</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../architecture.html">Architecture</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../api.html">API</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../api.html#loggers">Loggers</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../eventlogging.html">Event Logger</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../resource-logger.html">Resource Logger</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../simple-logger.html">Simple Logger</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../status-logger.html">Status Logger</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../logbuilder.html">Fluent API</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../api.html#fish-tagging">Fish tagging</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../customloglevels.html">Levels</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../markers.html">Markers</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../scoped-context.html">Scoped Context</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../thread-context.html">Thread Context</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../messages.html">Messages</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../flowtracing.html">Flow Tracing</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../config-intro.html">Configuration</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../configuration.html">Configuration file</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../systemproperties.html">Configuration properties</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../customconfig.html">Programmatic configuration</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../appenders.html">Appenders</a>
+<ul class="nav-list">
+  <li class="nav-item is-current-page" data-depth="3">
+    <a class="nav-link" href="file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="delegating.html">Delegating Appenders</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../layouts.html">Layouts</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../json-template-layout.html">JSON Template Layout</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="../pattern-layout.html">Pattern Layout</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../lookups.html">Lookups</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../filters.html">Filters</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../scripts.html">Scripts</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../jmx.html">JMX</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../extending.html">Extending</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../plugins.html">Plugins</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <button class="nav-item-toggle"></button>
+    <a class="nav-link" href="../performance.html">Performance</a>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../async.html">Asynchronous loggers</a>
+  </li>
+  <li class="nav-item" data-depth="2">
+    <a class="nav-link" href="../garbagefree.html">Garbage-free logging</a>
+  </li>
+</ul>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="0">
+    <button class="nav-item-toggle"></button>
+    <span class="nav-text">References</span>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../plugin-reference.html">Plugin reference</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../javadoc.html">Java API reference</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="0">
+    <button class="nav-item-toggle"></button>
+    <span class="nav-text">Resources</span>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../faq.html">F.A.Q.</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../migrate-from-log4j1.html">Migrating from Log4j 1</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../migrate-from-logback.html">Migrating from Logback</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../migrate-from-slf4j.html">Migrating from SLF4J</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../hibernate.html">Integrating with Hibernate</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../jakarta.html">Integrating with Jakarta EE</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../soa.html">Integrating with service-oriented architectures</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../development.html">Development</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="0">
+    <button class="nav-item-toggle"></button>
+    <span class="nav-text">Components</span>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-cassandra.html">Cassandra Appender</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-couchdb.html">CouchDB Appender</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-docker.html">Log4j Docker</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-flume-ng.html">Flume Appender</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-iostreams.html">Log4j IOStreams</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-spring-boot.html">Log4j Spring Boot Support</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-spring-cloud-config.html">Log4j Spring Cloud Config</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-spring-cloud-config-client.html">Log4j Spring Cloud Configuration</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-jul.html">JUL-to-Log4j bridge</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="../../log4j-to-jul.html">Log4j-to-JUL bridge</a>
+  </li>
+</ul>
+  </li>
+  <li class="nav-item" data-depth="0">
+    <button class="nav-item-toggle"></button>
+    <span class="nav-text">Related projects</span>
+<ul class="nav-list">
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/jakarta/index.html">Log4j Jakarta EE</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/jmx-gui/index.html">Log4j JMX GUI</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/kotlin/index.html">Log4j Kotlin</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/scala/index.html">Log4j Scala</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/tools/index.html">Log4j Tools</a>
+  </li>
+  <li class="nav-item" data-depth="1">
+    <a class="nav-link" href="https://logging.apache.org/log4j/transform/index.html">Log4j Transformation Tools</a>
+  </li>
+</ul>
+  </li>
+</ul>
+  </nav>
+</div>
+    </div>
+  </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+  <a href="../../index.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+  <ul>
+    <li><a href="../../index.html">Home</a></li>
+    <li><a href="../index.html">Manual</a></li>
+    <li><a href="../config-intro.html">Configuration</a></li>
+    <li><a href="../appenders.html">Appenders</a></li>
+    <li><a href="file.html">File appenders</a></li>
+  </ul>
+</nav>
+<div class="edit-this-page"><a href="https://github.com/apache/logging-log4j2/edit/2.x/src/site/antora/modules/ROOT/pages/manual/appenders/file.adoc">Edit this Page</a></div>
+</div>
+  <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="4">
+  <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">File appenders</h1>
+<div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>Log4j Core provides multiple appenders that store log messages in a file.
+These appenders differ in the way they access the file system and might provide different performance characteristics.</p>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>File appenders do not offer a mechanism for external applications to force it to reopen the log file.
+External log archiving tools such as
+<a href="https://github.com/logrotate/logrotate"><code>logrotate</code></a>
+will therefore need to copy the current log file and <strong>then</strong> truncate it.
+Log events emitted during this operation will be lost.</p>
+</div>
+<div class="paragraph">
+<p>If you want to rotate your log files, use <a href="rolling-file.html" class="xref page">a rolling file appender</a> instead.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="appenders"><a class="anchor" href="#appenders"></a>Appenders</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Log4j Core provides three file appender implementations:</p>
+</div>
+<div class="dlist">
+<dl>
+<dt class="hdlist1"><code>File</code></dt>
+<dd>
+<p>The <code>File</code> Appender uses
+<a href="https://docs.oracle.com/javase/8/docs/api/java/io/FileOutputStream.html"><code>FileOutputStream</code></a>
+to access log files.</p>
+</dd>
+<dt class="hdlist1"><code>RandomAccessFile</code></dt>
+<dd>
+<p>The <code>RandomAccessFile</code> Appender uses
+<a href="https://docs.oracle.com/javase/8/docs/api/java/io/RandomAccessFile.html"><code>RandomAccessFile</code></a>
+to access log files.</p>
+</dd>
+<dt class="hdlist1"><code>MemoryMappedFile</code></dt>
+<dd>
+<p>The <code>MemoryMappedFile</code> Appender maps log files into a
+<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/MappedByteBuffer.html"><code>MappedByteBuffer</code></a>.</p>
+<div class="paragraph">
+<p>Instead of making system calls to write to disk, this appender can simply change the program&#8217;s local memory, which is orders of magnitude faster.</p>
+</div>
+</dd>
+</dl>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+<div class="paragraph">
+<p>Two appenders, even from different logger contexts, share a common
+<a href="../architecture.html#AbstractManager" class="xref page"><code>FileManager</code></a>
+if they use the same value <a href="#attr-fileName"><code>fileName</code> attribute</a>.</p>
+</div>
+<div class="paragraph">
+<p>Sharing a <code>FileManager</code> guarantees that multiple appenders will access the log file sequentially, but requires most of the remaining configuration parameters to be the same.</p>
+</div>
+</td>
+</tr>
+</table>
+</div>
+<div class="sect2">
+<h3 id="common-configuration"><a class="anchor" href="#common-configuration"></a>Common configuration</h3>
+<table id="attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. Common configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</th>
+<th class="tableblock halign-left valign-top">Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<th class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">Required</p></th>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="attr-fileName"></a>fileName</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html"><code>Path</code></a></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The path to the current log file
+If the folder containing the file does not exist, it will be created.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="attr-name"></a>name</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td>
+<td class="tableblock halign-left valign-top"></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The name of the appender.</p></td>
+</tr>
+<tr>
+<th class="tableblock halign-left valign-top" colspan="4"><p class="tableblock">Optional</p></th>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="attr-bufferSize"></a>bufferSize</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>int</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../systemproperties.html#log4j2.encoderByteBufferSize" class="xref page"><code>8192</code></a></p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>The size of the
+<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html"><code>ByteBuffer</code></a>
+internally used by the appender.</p>
+</div>
+<div class="paragraph">
+<p>See <a href="../appenders.html#buffering" class="xref page">Buffering</a> for more details.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="attr-ignoreExceptions"></a>ignoreExceptions</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>false</code>, logging exception will be forwarded to the caller of the logging statement.
+Otherwise, they will be ignored.</p>
+<p class="tableblock">Logging exceptions are always also logged to <a href="../status-logger.html" class="xref page">Status Logger</a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="attr-immediateFlush"></a>immediateFlush</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If set to <code>true</code>, the appender will flush its internal buffer after each event.</p>
+<p class="tableblock">See <a href="../appenders.html#buffering" class="xref page">Buffering</a> for more details.</p></td>
+</tr>
+</tbody>
+</table>
+<table id="elements" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 2. Common nested elements</caption>
+<colgroup>
+<col style="width: 16.6666%;">
+<col style="width: 16.6666%;">
+<col style="width: 66.6668%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Multiplicity</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><a id="element-Filter"></a><a href="../filters.html" class="xref page"><code>Filter</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Allows filtering log events just before they are formatted and sent.</p>
+<p class="tableblock">See also <a href="../filters.html#appender-stage" class="xref page">appender filtering stage</a>.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="element-Layout"></a><a href="../layouts.html" class="xref page"><code>Layout</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Formats log events.</p>
+<p class="tableblock">See <a href="../layouts.html" class="xref page">Layouts</a> for more information.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect2">
+<h3 id="FileAppender"><a class="anchor" href="#FileAppender"></a><code>File</code> configuration</h3>
+<div class="paragraph">
+<p>The <code>File</code> Appender provides the following configuration options, beyond the <a href="#common-configuration">common ones</a>:</p>
+</div>
+<table id="FileAppender-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 3. <code>File</code> configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</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><a id="FileAppender-attr-append"></a>append</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>true</code>, the log file will be opened in
+<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/StandardOpenOption.html#APPEND"><code>APPEND</code> mode</a>.</p>
+<p class="tableblock">On most systems this guarantees atomic writes to the end of the file, even if the file is opened by multiple applications.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FileAppender-attr-bufferedIo"></a>bufferedIo</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If set to <code>true</code>, Log4j Core will format each log event in an internal buffer, before sending it to the underlying resource.</p>
+<p class="tableblock">See <a href="../appenders.html#buffering" class="xref page">Buffering</a> for more details.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FileAppender-attr-createOnDemand"></a>createOnDemand</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The appender creates the file on-demand. The
+appender only creates the file when a log event passes all filters and
+is routed to this appender. Defaults to false.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FileAppender-attr-filePermissions"></a>filePermissions</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/PosixFilePermissions.html"><code>PosixFilePermissions</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>null</code></p></td>
+<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
+<p>If not <code>null</code>, it specifies the POSIX file permissions to apply to each created file.
+The permissions must be provided in the format used by
+<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/PosixFilePermissions.html#fromString-java.lang.String-"><code>PosixFilePermissions.fromString()</code></a>,
+e.g. <code>rw-rw----</code>.</p>
+</div>
+<div class="paragraph">
+<p>The underlying files system shall support
+<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/PosixFileAttributeView.html">POSIX</a>
+file attribute view.</p>
+</div></div></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FileAppender-attr-fileOwner"></a>fileOwner</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>null</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If not <code>null</code>, it specifies the file owner to apply to each created file.</p>
+<p class="tableblock">The underlying files system shall support file
+<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/FileOwnerAttributeView.html">owner</a>
+attribute view.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FileAppender-attr-fileGroup"></a>fileGroup</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>null</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If not <code>null</code>, it specifies the file group owner to apply to each created file.</p>
+<p class="tableblock">The underlying files system shall support
+<a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/attribute/PosixFileAttributeView.html">POSIX</a>
+file attribute view.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="FileAppender-attr-locking"></a>locking</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>true</code>, Log4j will lock the log file at <strong>each</strong> log event.</p>
+<p class="tableblock">Note that the effects of this setting depend on the Operating System: some systems like most POSIX OSes do not offer mandatory locking, but only advisory file locking.</p>
+<p class="tableblock">This setting can also reduce the performance of the appender.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-FileAppender" class="xref page">&#x1F4D6; Plugin reference for <code>File</code></a></p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="RandomAccessFileAppender"><a class="anchor" href="#RandomAccessFileAppender"></a><code>RandomAccessFile</code> configuration</h3>
+<div class="paragraph">
+<p>The <code>RandomAccessFile</code> Appender provides the following configuration options, beyond the <a href="#common-configuration">common ones</a>:</p>
+</div>
+<table id="RandomAccessFileAppender-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 4. <code>RollingRandomAccessFile</code> configuration attributes</caption>
+<colgroup>
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 12.5%;">
+<col style="width: 62.5%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</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><a id="RandomAccessFileAppender-attr-append"></a>append</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>true</code>, the appender starts writing at the end of the file.</p>
+<p class="tableblock">This setting does not give the same atomicity guarantees as for the
+<a href="#FileAppender-attr-append"><code>RollingFile</code> Appender</a>.
+The log file cannot be opened by multiple applications at the same time.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>Unlike the <a href="#FileAppender"><code>File</code> appender</a>, this appender always uses an internal buffer of size <a href="#attr-bufferSize"><code>bufferSize</code></a>.</p>
+</div>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-RandomAccessFileAppender" class="xref page">&#x1F4D6; Plugin reference for <code>RandomAccessFile</code></a></p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="MemoryMappedFileAppender"><a class="anchor" href="#MemoryMappedFileAppender"></a><code>MemoryMappedFile</code> configuration</h3>
+<div class="paragraph">
+<p>The <code>MemoryMappedFile</code> Appender provides the following configuration options, beyond the <a href="#common-configuration">common ones</a>:</p>
+</div>
+<table id="MemoryMappedFileAppender-attributes" class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 5. <code>RollingRandomAccessFile</code> configuration attributes</caption>
+<colgroup>
+<col style="width: 11.1111%;">
+<col style="width: 11.1111%;">
+<col style="width: 22.2222%;">
+<col style="width: 55.5556%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Attribute</th>
+<th class="tableblock halign-left valign-top">Type</th>
+<th class="tableblock halign-left valign-top">Default value</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><a id="MemoryMappedFileAppender-attr-append"></a>append</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>true</code>, the appender starts writing at the end of the file.</p>
+<p class="tableblock">This setting does not give the same atomicity guarantees as for the
+<a href="#FileAppender-attr-append"><code>RollingFile</code> Appender</a>.
+The log file cannot be opened by multiple applications at the same time.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="MemoryMappedFileAppender-attr-regionLength"></a>regionLength</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>int</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code>32 &times; 1024 &times; 1024</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">It specifies the size measured in bytes of the memory mapped log file buffer.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>Unlike other file appenders, this appender always uses a memory mapped buffer of size <a href="#MemoryMappedFileAppender-attr-regionLength"><code>regionLength</code></a> as its internal buffer.</p>
+</div>
+<div class="paragraph">
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-MemoryMappedFileAppender" class="xref page">&#x1F4D6; Plugin reference for <code>MemoryMappedFile</code></a></p>
+</div>
+</div>
+</div>
+</div>
+</article>
+  </div>
+</main>
+</div>
+<footer class="footer">
+  <p>
+    Copyright © 1999-2024 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
+    Licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache Software License, Version 2.0</a>.
+    Please read our <a href="https://privacy.apache.org/policies/privacy-policy-public.html">privacy policy</a>.
+  </p>
+  <p>
+    Apache, Log4j, and the Apache feather logo are trademarks or registered trademarks of The Apache Software Foundation.
+    Oracle and Java are registered trademarks of Oracle and/or its affiliates.
+    Other names may be trademarks of their respective owners.
+  </p>
+</footer>
+<script id="site-script" src="../../_/js/site.js" data-ui-root-path="../../_"></script>
+<script async src="../../_/js/vendor/highlight.js"></script>
+<!-- `@asciidoctor/tabs` extension scripts -->
+<script async src="../../_/js/vendor/tabs.js"></script>
+  </body>
+</html>
diff --git a/manual/rolling-file.html b/manual/appenders/rolling-file.html
similarity index 88%
rename from manual/rolling-file.html
rename to manual/appenders/rolling-file.html
index 05a13a5be6..0ad9f97ddc 100644
--- a/manual/rolling-file.html
+++ b/manual/appenders/rolling-file.html
@@ -4,12 +4,12 @@
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width,initial-scale=1">
     <title>Rolling file appenders :: Apache Log4j</title>
-    <link rel="canonical" href="https://logging.apache.org/log4j/2.x/manual/rolling-file.html">
+    <link rel="canonical" href="https://logging.apache.org/log4j/2.x/manual/appenders/rolling-file.html">
     <meta name="generator" content="Antora 3.2.0-alpha.4">
-<link rel="stylesheet" href="../_/css/site.css">
-<link rel="icon" href="../_/../_images/favicon.ico" type="image/x-icon">
+<link rel="stylesheet" href="../../_/css/site.css">
+<link rel="icon" href="../../_/../_images/favicon.ico" type="image/x-icon">
 <!-- `@asciidoctor/tabs` extension styles -->
-<link rel="stylesheet" href="../_/css/vendor/tabs.css">
+<link rel="stylesheet" href="../../_/css/vendor/tabs.css">
 <style>
   /* Swap colors of `IMPORTANT` and `WARNING` blocks */ 
   .doc .admonitionblock.important .icon { background-color: #f70; }
@@ -45,7 +45,7 @@
   <nav class="navbar">
     <div class="navbar-brand">
       <div class="navbar-item">
-        <img src="../_/../_images/logo-small-white.png" alt="Apache Log4j"/>
+        <img src="../../_/../_images/logo-small-white.png" alt="Apache Log4j"/>
       </div>
     </div>
     <div id="topbar-nav" class="navbar-menu">
@@ -62,16 +62,16 @@
 <div class="nav-panel-menu is-active" data-panel="menu">
   <nav class="nav-menu">
     <button class="nav-menu-toggle" aria-label="Toggle expand/collapse all" style="display: none"></button>
-    <h3 class="title"><a href="../index.html">Home</a></h3>
+    <h3 class="title"><a href="../../index.html">Home</a></h3>
 <ul class="nav-list">
   <li class="nav-item" data-depth="0">
 <ul class="nav-list">
   <li class="nav-item" data-depth="1">
     <button class="nav-item-toggle"></button>
-    <a class="nav-link" href="../download.html">Download</a>
+    <a class="nav-link" href="../../download.html">Download</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="../release-notes.html">Release Notes</a>
+    <a class="nav-link" href="../../release-notes.html">Release Notes</a>
   </li>
 </ul>
   </li>
@@ -88,134 +88,140 @@
   </li>
   <li class="nav-item" data-depth="0">
     <button class="nav-item-toggle"></button>
-    <a class="nav-link" href="index.html">Manual</a>
+    <a class="nav-link" href="../index.html">Manual</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="getting-started.html">Getting started</a>
+    <a class="nav-link" href="../getting-started.html">Getting started</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="installation.html">Installation</a>
+    <a class="nav-link" href="../installation.html">Installation</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="architecture.html">Architecture</a>
+    <a class="nav-link" href="../architecture.html">Architecture</a>
   </li>
   <li class="nav-item" data-depth="1">
     <button class="nav-item-toggle"></button>
-    <a class="nav-link" href="api.html">API</a>
+    <a class="nav-link" href="../api.html">API</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="2">
     <button class="nav-item-toggle"></button>
-    <a class="nav-link" href="api.html#loggers">Loggers</a>
+    <a class="nav-link" href="../api.html#loggers">Loggers</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="eventlogging.html">Event Logger</a>
+    <a class="nav-link" href="../eventlogging.html">Event Logger</a>
   </li>
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="resource-logger.html">Resource Logger</a>
+    <a class="nav-link" href="../resource-logger.html">Resource Logger</a>
   </li>
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="simple-logger.html">Simple Logger</a>
+    <a class="nav-link" href="../simple-logger.html">Simple Logger</a>
   </li>
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="status-logger.html">Status Logger</a>
+    <a class="nav-link" href="../status-logger.html">Status Logger</a>
   </li>
 </ul>
   </li>
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="logbuilder.html">Fluent API</a>
+    <a class="nav-link" href="../logbuilder.html">Fluent API</a>
   </li>
   <li class="nav-item" data-depth="2">
     <button class="nav-item-toggle"></button>
-    <a class="nav-link" href="api.html#fish-tagging">Fish tagging</a>
+    <a class="nav-link" href="../api.html#fish-tagging">Fish tagging</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="customloglevels.html">Levels</a>
+    <a class="nav-link" href="../customloglevels.html">Levels</a>
   </li>
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="markers.html">Markers</a>
+    <a class="nav-link" href="../markers.html">Markers</a>
   </li>
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="scoped-context.html">Scoped Context</a>
+    <a class="nav-link" href="../scoped-context.html">Scoped Context</a>
   </li>
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="thread-context.html">Thread Context</a>
+    <a class="nav-link" href="../thread-context.html">Thread Context</a>
   </li>
 </ul>
   </li>
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="messages.html">Messages</a>
+    <a class="nav-link" href="../messages.html">Messages</a>
   </li>
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="flowtracing.html">Flow Tracing</a>
+    <a class="nav-link" href="../flowtracing.html">Flow Tracing</a>
   </li>
 </ul>
   </li>
   <li class="nav-item" data-depth="1">
     <button class="nav-item-toggle"></button>
-    <a class="nav-link" href="config-intro.html">Configuration</a>
+    <a class="nav-link" href="../config-intro.html">Configuration</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="configuration.html">Configuration file</a>
+    <a class="nav-link" href="../configuration.html">Configuration file</a>
   </li>
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="systemproperties.html">Configuration properties</a>
+    <a class="nav-link" href="../systemproperties.html">Configuration properties</a>
   </li>
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="customconfig.html">Programmatic configuration</a>
+    <a class="nav-link" href="../customconfig.html">Programmatic configuration</a>
   </li>
   <li class="nav-item" data-depth="2">
     <button class="nav-item-toggle"></button>
-    <a class="nav-link" href="appenders.html">Appenders</a>
+    <a class="nav-link" href="../appenders.html">Appenders</a>
 <ul class="nav-list">
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="file.html">File appenders</a>
+  </li>
   <li class="nav-item is-current-page" data-depth="3">
     <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
   </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="delegating.html">Delegating Appenders</a>
+  </li>
 </ul>
   </li>
   <li class="nav-item" data-depth="2">
     <button class="nav-item-toggle"></button>
-    <a class="nav-link" href="layouts.html">Layouts</a>
+    <a class="nav-link" href="../layouts.html">Layouts</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="json-template-layout.html">JSON Template Layout</a>
+    <a class="nav-link" href="../json-template-layout.html">JSON Template Layout</a>
   </li>
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="pattern-layout.html">Pattern Layout</a>
+    <a class="nav-link" href="../pattern-layout.html">Pattern Layout</a>
   </li>
 </ul>
   </li>
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="lookups.html">Lookups</a>
+    <a class="nav-link" href="../lookups.html">Lookups</a>
   </li>
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="filters.html">Filters</a>
+    <a class="nav-link" href="../filters.html">Filters</a>
   </li>
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="scripts.html">Scripts</a>
+    <a class="nav-link" href="../scripts.html">Scripts</a>
   </li>
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="jmx.html">JMX</a>
+    <a class="nav-link" href="../jmx.html">JMX</a>
   </li>
 </ul>
   </li>
   <li class="nav-item" data-depth="1">
     <button class="nav-item-toggle"></button>
-    <a class="nav-link" href="extending.html">Extending</a>
+    <a class="nav-link" href="../extending.html">Extending</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="plugins.html">Plugins</a>
+    <a class="nav-link" href="../plugins.html">Plugins</a>
   </li>
 </ul>
   </li>
   <li class="nav-item" data-depth="1">
     <button class="nav-item-toggle"></button>
-    <a class="nav-link" href="performance.html">Performance</a>
+    <a class="nav-link" href="../performance.html">Performance</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="async.html">Asynchronous loggers</a>
+    <a class="nav-link" href="../async.html">Asynchronous loggers</a>
   </li>
   <li class="nav-item" data-depth="2">
-    <a class="nav-link" href="garbagefree.html">Garbage-free logging</a>
+    <a class="nav-link" href="../garbagefree.html">Garbage-free logging</a>
   </li>
 </ul>
   </li>
@@ -226,10 +232,10 @@
     <span class="nav-text">References</span>
 <ul class="nav-list">
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../plugin-reference.html">Plugin reference</a>
+    <a class="nav-link" href="../../plugin-reference.html">Plugin reference</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../javadoc.html">Java API reference</a>
+    <a class="nav-link" href="../../javadoc.html">Java API reference</a>
   </li>
 </ul>
   </li>
@@ -238,28 +244,28 @@
     <span class="nav-text">Resources</span>
 <ul class="nav-list">
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../faq.html">F.A.Q.</a>
+    <a class="nav-link" href="../../faq.html">F.A.Q.</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../migrate-from-log4j1.html">Migrating from Log4j 1</a>
+    <a class="nav-link" href="../../migrate-from-log4j1.html">Migrating from Log4j 1</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../migrate-from-logback.html">Migrating from Logback</a>
+    <a class="nav-link" href="../../migrate-from-logback.html">Migrating from Logback</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../migrate-from-slf4j.html">Migrating from SLF4J</a>
+    <a class="nav-link" href="../../migrate-from-slf4j.html">Migrating from SLF4J</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../hibernate.html">Integrating with Hibernate</a>
+    <a class="nav-link" href="../../hibernate.html">Integrating with Hibernate</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../jakarta.html">Integrating with Jakarta EE</a>
+    <a class="nav-link" href="../../jakarta.html">Integrating with Jakarta EE</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../soa.html">Integrating with service-oriented architectures</a>
+    <a class="nav-link" href="../../soa.html">Integrating with service-oriented architectures</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../development.html">Development</a>
+    <a class="nav-link" href="../../development.html">Development</a>
   </li>
 </ul>
   </li>
@@ -268,34 +274,34 @@
     <span class="nav-text">Components</span>
 <ul class="nav-list">
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../log4j-cassandra.html">Cassandra Appender</a>
+    <a class="nav-link" href="../../log4j-cassandra.html">Cassandra Appender</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../log4j-couchdb.html">CouchDB Appender</a>
+    <a class="nav-link" href="../../log4j-couchdb.html">CouchDB Appender</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../log4j-docker.html">Log4j Docker</a>
+    <a class="nav-link" href="../../log4j-docker.html">Log4j Docker</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../log4j-flume-ng.html">Flume Appender</a>
+    <a class="nav-link" href="../../log4j-flume-ng.html">Flume Appender</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../log4j-iostreams.html">Log4j IOStreams</a>
+    <a class="nav-link" href="../../log4j-iostreams.html">Log4j IOStreams</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../log4j-spring-boot.html">Log4j Spring Boot Support</a>
+    <a class="nav-link" href="../../log4j-spring-boot.html">Log4j Spring Boot Support</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../log4j-spring-cloud-config.html">Log4j Spring Cloud Config</a>
+    <a class="nav-link" href="../../log4j-spring-cloud-config.html">Log4j Spring Cloud Config</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../log4j-spring-cloud-config-client.html">Log4j Spring Cloud Configuration</a>
+    <a class="nav-link" href="../../log4j-spring-cloud-config-client.html">Log4j Spring Cloud Configuration</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../log4j-jul.html">JUL-to-Log4j bridge</a>
+    <a class="nav-link" href="../../log4j-jul.html">JUL-to-Log4j bridge</a>
   </li>
   <li class="nav-item" data-depth="1">
-    <a class="nav-link" href="../log4j-to-jul.html">Log4j-to-JUL bridge</a>
+    <a class="nav-link" href="../../log4j-to-jul.html">Log4j-to-JUL bridge</a>
   </li>
 </ul>
   </li>
@@ -332,17 +338,17 @@
 <main class="article">
 <div class="toolbar" role="navigation">
 <button class="nav-toggle"></button>
-  <a href="../index.html" class="home-link"></a>
+  <a href="../../index.html" class="home-link"></a>
 <nav class="breadcrumbs" aria-label="breadcrumbs">
   <ul>
-    <li><a href="../index.html">Home</a></li>
-    <li><a href="index.html">Manual</a></li>
-    <li><a href="config-intro.html">Configuration</a></li>
-    <li><a href="appenders.html">Appenders</a></li>
+    <li><a href="../../index.html">Home</a></li>
+    <li><a href="../index.html">Manual</a></li>
+    <li><a href="../config-intro.html">Configuration</a></li>
+    <li><a href="../appenders.html">Appenders</a></li>
     <li><a href="rolling-file.html">Rolling file appenders</a></li>
   </ul>
 </nav>
-<div class="edit-this-page"><a href="https://github.com/apache/logging-log4j2/edit/2.x/src/site/antora/modules/ROOT/pages/manual/rolling-file.adoc">Edit this Page</a></div>
+<div class="edit-this-page"><a href="https://github.com/apache/logging-log4j2/edit/2.x/src/site/antora/modules/ROOT/pages/manual/appenders/rolling-file.adoc">Edit this Page</a></div>
 </div>
   <div class="content">
 <aside class="toc sidebar" data-title="Contents" data-levels="4">
@@ -405,7 +411,7 @@ to access log files.</p>
 <td class="content">
 <div class="paragraph">
 <p>Two appenders, even from different logger contexts, share a common
-<a href="architecture.html#AbstractManager" class="xref page"><code>RollingFileManager</code></a> if:</p>
+<a href="../architecture.html#AbstractManager" class="xref page"><code>RollingFileManager</code></a> if:</p>
 </div>
 <div class="ulist">
 <ul>
@@ -466,14 +472,14 @@ See <a href="#conversion-patterns">Conversion patterns</a> for details</p>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="attr-bufferSize"></a>bufferSize</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>int</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="systemproperties.html#log4j2.encoderByteBufferSize" class="xref page"><code>8192</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../systemproperties.html#log4j2.encoderByteBufferSize" class="xref page"><code>8192</code></a></p></td>
 <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>The size of the
 <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html"><code>ByteBuffer</code></a>
 internally used by the appender.</p>
 </div>
 <div class="paragraph">
-<p>See <a href="appenders.html#buffering" class="xref page">Buffering</a> for more details.</p>
+<p>See <a href="../appenders.html#buffering" class="xref page">Buffering</a> for more details.</p>
 </div></div></td>
 </tr>
 <tr>
@@ -482,7 +488,7 @@ internally used by the appender.</p>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">If set to <code>true</code>, Log4j Core will format each log event in an internal buffer, before sending it to the underlying resource.</p>
 <p class="tableblock">The <code>RandomAccessRollingFile</code> Appender always enables the internal buffer.</p>
-<p class="tableblock">See <a href="appenders.html#buffering" class="xref page">Buffering</a> for more details.</p></td>
+<p class="tableblock">See <a href="../appenders.html#buffering" class="xref page">Buffering</a> for more details.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="attr-createOnDemand"></a>createOnDemand</code></p></td>
@@ -509,7 +515,7 @@ If the folder containing the file does not exist, it will be created.</p>
 <td class="content">
 <div class="paragraph">
 <p>This attribute should not contain any
-<a href="configuration.html#lazy-property-substitution" class="xref page">runtime lookups</a>
+<a href="../configuration.html#lazy-property-substitution" class="xref page">runtime lookups</a>
 nor pattern converters.</p>
 </div>
 <div class="paragraph">
@@ -560,14 +566,14 @@ file attribute view.</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">If <code>false</code>, logging exception will be forwarded to the caller of the logging statement.
 Otherwise, they will be ignored.</p>
-<p class="tableblock">Logging exceptions are always also logged to <a href="status-logger.html" class="xref page">Status Logger</a></p></td>
+<p class="tableblock">Logging exceptions are always also logged to <a href="../status-logger.html" class="xref page">Status Logger</a></p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="attr-immediateFlush"></a>immediateFlush</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">If set to <code>true</code>, the appender will flush its internal buffer after each event.</p>
-<p class="tableblock">See <a href="appenders.html#buffering" class="xref page">Buffering</a> for more details.</p></td>
+<p class="tableblock">See <a href="../appenders.html#buffering" class="xref page">Buffering</a> for more details.</p></td>
 </tr>
 </tbody>
 </table>
@@ -587,16 +593,16 @@ Otherwise, they will be ignored.</p>
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="element-Filter"></a><a href="filters.html" class="xref page"><code>Filter</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="element-Filter"></a><a href="../filters.html" class="xref page"><code>Filter</code></a></code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Allows filtering log events just before they are formatted and sent.</p>
-<p class="tableblock">See also <a href="filters.html#appender-stage" class="xref page">appender filtering stage</a>.</p></td>
+<p class="tableblock">See also <a href="../filters.html#appender-stage" class="xref page">appender filtering stage</a>.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="element-Layout"></a><a href="layouts.html" class="xref page"><code>Layout</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="element-Layout"></a><a href="../layouts.html" class="xref page"><code>Layout</code></a></code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Formats log events.</p>
-<p class="tableblock">See <a href="layouts.html" class="xref page">Layouts</a> for more information.</p></td>
+<p class="tableblock">See <a href="../layouts.html" class="xref page">Layouts</a> for more information.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="element-TriggeringPolicy"></a><a href="#TriggeringPolicy"><code>TriggeringPolicy</code></a></code></p></td>
@@ -621,12 +627,12 @@ Otherwise, they will be ignored.</p>
 <div class="ulist">
 <ul>
 <li>
-<p><a href="configuration.html#lazy-property-substitution" class="xref page">runtime lookups</a>, which are evaluated in
-<a href="lookups.html#global-context" class="xref page">a global context</a>.</p>
+<p><a href="../configuration.html#lazy-property-substitution" class="xref page">runtime lookups</a>, which are evaluated in
+<a href="../lookups.html#global-context" class="xref page">a global context</a>.</p>
 </li>
 <li>
 <p>a <code>%d{...}</code> pattern, functionally identical to the
-<a href="pattern-layout.html#converter-date" class="xref page">homonymous <code>PatternLayout</code> pattern</a>
+<a href="../pattern-layout.html#converter-date" class="xref page">homonymous <code>PatternLayout</code> pattern</a>
 except it uses the actual or inferred timestamp of the <strong>previous</strong> rollover.</p>
 </li>
 <li>
@@ -723,7 +729,7 @@ Consider using</p>
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-RollingFileAppender" class="xref page">&#x1F4D6; Plugin reference for <code>RollingFile</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-RollingFileAppender" class="xref page">&#x1F4D6; Plugin reference for <code>RollingFile</code></a></p>
 </div>
 </div>
 <div class="sect2">
@@ -760,7 +766,7 @@ The log file cannot be opened by multiple applications at the same time.</p></td
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-RollingRandomAccessFileAppender" class="xref page">&#x1F4D6; Plugin reference for <code>RollingRandomAccessFile</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-RollingRandomAccessFileAppender" class="xref page">&#x1F4D6; Plugin reference for <code>RollingRandomAccessFile</code></a></p>
 </div>
 </div>
 </div>
@@ -774,7 +780,7 @@ The log file cannot be opened by multiple applications at the same time.</p></td
 interface and are used to decide when is it time to rollover the current log file.</p>
 </div>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-TriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>TriggeringPolicy</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-TriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>TriggeringPolicy</code></a></p>
 </div>
 <div class="sect2">
 <h3 id="TriggeringPolicy-common"><a class="anchor" href="#TriggeringPolicy-common"></a>Common concerns</h3>
@@ -881,7 +887,7 @@ A rollover will occur if the log file was created before the start time of the c
 </table>
 </div>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-OnStartupTriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>OnStartupTriggeringPolicy</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-OnStartupTriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>OnStartupTriggeringPolicy</code></a></p>
 </div>
 </div>
 <div class="sect2">
@@ -946,7 +952,7 @@ If a rollover should have occurred between that time and the current time the fi
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="CronTriggeringPolicy-attr-schedule"></a>schedule</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="..//javadoc/log4j-core/org/apache/logging/log4j/core/util/CronExpression.html"><code>CronExpression</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/util/CronExpression.html"><code>CronExpression</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>0 0 0 * * ?</code></p></td>
 <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>The cron expression, using the same syntax as the
@@ -979,14 +985,14 @@ If a rollover should have occurred between that time and the current time the fi
 </div>
 <div class="paragraph">
 <p>See
-<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/util/CronExpression.html"><code>CronExpression</code></a>
+<a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/util/CronExpression.html"><code>CronExpression</code></a>
 for a full specification of the format.</p>
 </div></div></td>
 </tr>
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-CronTriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>CronTriggeringPolicy</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-CronTriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>CronTriggeringPolicy</code></a></p>
 </div>
 </div>
 <div class="sect2">
@@ -1037,7 +1043,7 @@ Otherwise, the target file will be overwritten on each rollover.</p>
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="SizeBasedTriggeringPolicy-attr-size"></a>size</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/FileSize.html"><code>FileSize</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/FileSize.html"><code>FileSize</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>10 MB</code></p></td>
 <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
 <p>The maximum file size of the current log file.
@@ -1072,7 +1078,7 @@ Once this size is reached, a rollover will occur.</p>
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-SizeBasedTriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>SizeBasedTriggeringPolicy</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-SizeBasedTriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>SizeBasedTriggeringPolicy</code></a></p>
 </div>
 </div>
 <div class="sect2">
@@ -1173,14 +1179,14 @@ specific time unit in the last <code>%d{...}</code> pattern.</p></td>
 </div>
 <div class="paragraph">
 <p>You can modify the time of the rollover by specifying a different timezone in the <code>%d</code> pattern.
-See <a href="pattern-layout.html#converter-date" class="xref page"><code>date</code> converter syntax</a> for more details.</p>
+See <a href="../pattern-layout.html#converter-date" class="xref page"><code>date</code> converter syntax</a> for more details.</p>
 </div>
 </td>
 </tr>
 </table>
 </div>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-TimeBasedTriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>TimeBasedTriggeringPolicy</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-TimeBasedTriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>TimeBasedTriggeringPolicy</code></a></p>
 </div>
 </div>
 <div class="sect2">
@@ -1240,7 +1246,7 @@ The element itself has no configuration attributes.</p>
 </div>
 <div id="_tabs_1_xml--panel" class="tabpanel" aria-labelledby="_tabs_1_xml">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/policies.xml"><code>log4j2.xml</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/policies.xml"><code>log4j2.xml</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;RollingFile name="FILE"
              fileName="app.log"
@@ -1257,7 +1263,7 @@ The element itself has no configuration attributes.</p>
 </div>
 <div id="_tabs_1_json--panel" class="tabpanel" aria-labelledby="_tabs_1_json">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/policies.json"><code>log4j2.json</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/policies.json"><code>log4j2.json</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"RollingFile": {
   "name": "FILE",
@@ -1275,7 +1281,7 @@ The element itself has no configuration attributes.</p>
 </div>
 <div id="_tabs_1_yaml--panel" class="tabpanel" aria-labelledby="_tabs_1_yaml">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/policies.yaml"><code>log4j2.yaml</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/policies.yaml"><code>log4j2.yaml</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">RollingFile:
   name: "FILE"
@@ -1291,7 +1297,7 @@ The element itself has no configuration attributes.</p>
 </div>
 <div id="_tabs_1_properties--panel" class="tabpanel" aria-labelledby="_tabs_1_properties">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/policies.properties"><code>log4j2.properties</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/policies.properties"><code>log4j2.properties</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.0.type = RollingFile
 appender.0.name = FILE
@@ -1310,7 +1316,7 @@ appender.0.policy.2.type = TimeBasedTriggeringPolicy</code></pre>
 </div>
 </div>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-CompositeTriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>Policies</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-CompositeTriggeringPolicy" class="xref page">&#x1F4D6; Plugin reference for <code>Policies</code></a></p>
 </div>
 </div>
 </div>
@@ -1439,7 +1445,7 @@ Use the <code>DirectWriteRolloverStrategy</code> instead by omitting the <code>f
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="element-Action"></a><a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/Action.html"><code>Action</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="element-Action"></a><a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/Action.html"><code>Action</code></a></code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">zero or more</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Additional actions to perform on a rollover beyond file rotation and compression.</p>
 <p class="tableblock">See <a href="#AbstractPathAction">Optional actions</a> for more details.</p></td>
@@ -1512,7 +1518,7 @@ Use the <code>DirectWriteRolloverStrategy</code> instead by omitting the <code>f
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-DefaultRolloverStrategy" class="xref page">&#x1F4D6; Plugin reference for <code>DefaultRolloverStrategy</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-DefaultRolloverStrategy" class="xref page">&#x1F4D6; Plugin reference for <code>DefaultRolloverStrategy</code></a></p>
 </div>
 </div>
 <div class="sect2">
@@ -1559,7 +1565,7 @@ Use the <code>DirectWriteRolloverStrategy</code> instead by omitting the <code>f
 </ul>
 </div>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-DirectWriteRolloverStrategy" class="xref page">&#x1F4D6; Plugin reference for <code>DirectWriteRolloverStrategy</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-DirectWriteRolloverStrategy" class="xref page">&#x1F4D6; Plugin reference for <code>DirectWriteRolloverStrategy</code></a></p>
 </div>
 </div>
 <div class="sect2">
@@ -1607,7 +1613,7 @@ It is <strong>not</strong> the default strategy of Log4j 2.</p>
 </div>
 <div class="imageblock kroki">
 <div class="content">
-<img src="../_images/diag-d5122741a680d765fa3170a444015b615a1fdafd.svg" alt="Diagram">
+<img src="../../_images/diag-d5122741a680d765fa3170a444015b615a1fdafd.svg" alt="Diagram">
 </div>
 </div>
 </dd>
@@ -1637,7 +1643,7 @@ It is <strong>not</strong> the default strategy of Log4j 2.</p>
 </div>
 <div class="imageblock kroki">
 <div class="content">
-<img src="../_images/diag-35cc4e8101ffe76d0edc44ed334a6273018dc51b.svg" alt="Diagram">
+<img src="../../_images/diag-35cc4e8101ffe76d0edc44ed334a6273018dc51b.svg" alt="Diagram">
 </div>
 </div>
 </dd>
@@ -1652,7 +1658,7 @@ It is <strong>not</strong> the default strategy of Log4j 2.</p>
 </div>
 <div class="imageblock kroki">
 <div class="content">
-<img src="../_images/diag-768e5e02508ea736d8901892b519a6d3a7a770ab.svg" alt="Diagram">
+<img src="../../_images/diag-768e5e02508ea736d8901892b519a6d3a7a770ab.svg" alt="Diagram">
 </div>
 </div>
 </dd>
@@ -1803,7 +1809,7 @@ Since Log4j 2.6, additional actions can be configured manually.</p>
 </ul>
 </div>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-AbstractPathAction" class="xref page">&#x1F4D6; Plugin reference for <code>AbstractPathAction</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-AbstractPathAction" class="xref page">&#x1F4D6; Plugin reference for <code>AbstractPathAction</code></a></p>
 </div>
 <div class="sect2">
 <h3 id="AbstractPathAction-config"><a class="anchor" href="#AbstractPathAction-config"></a>Common action configuration</h3>
@@ -1936,7 +1942,7 @@ The action will only be performed on files for which the condition returns <code
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="DeleteAction-attr-testMode"></a>testMode</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>boolean</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>true</code>, no files will be deleted, but a <a href="status-logger.html" class="xref page">Status Logger</a> message of level <code>INFO</code> will be issued instead.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">If <code>true</code>, no files will be deleted, but a <a href="../status-logger.html" class="xref page">Status Logger</a> message of level <code>INFO</code> will be issued instead.</p></td>
 </tr>
 </tbody>
 </table>
@@ -1962,11 +1968,11 @@ The action will only be performed on files for which the condition returns <code
 <p class="tableblock"><strong>Required</strong>, unless a <a href="#DeleteAction-element-ScriptCondition"><code>ScriptCondition</code></a> is provided, in which case these elements are ignored.</p></td>
 </tr>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="DeleteAction-element-PathSorter"></a><a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/PathSorter.html"><code>PathSorter</code></a></code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="DeleteAction-element-PathSorter"></a><a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/PathSorter.html"><code>PathSorter</code></a></code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">zero or one</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Provides a sorting order for files contained in <a href="#AbstractPathAction-attr-basePath"><code>basePath</code></a>.</p>
 <p class="tableblock">The default implementation is
-<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTime.html"><code>PathSortByModificationTime</code></a>,
+<a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTime.html"><code>PathSortByModificationTime</code></a>,
 which sorts files by ascending modification timestamp.</p></td>
 </tr>
 <tr>
@@ -1977,7 +1983,7 @@ which sorts files by ascending modification timestamp.</p></td>
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-DeleteAction" class="xref page">&#x1F4D6; Plugin reference for <code>Delete</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-DeleteAction" class="xref page">&#x1F4D6; Plugin reference for <code>Delete</code></a></p>
 </div>
 </div>
 <div class="sect2">
@@ -2081,7 +2087,7 @@ file attribute view.</p></td>
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-PosixViewAttributeAction" class="xref page">&#x1F4D6; Plugin reference for <code>PosixViewAttribute</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-PosixViewAttributeAction" class="xref page">&#x1F4D6; Plugin reference for <code>PosixViewAttribute</code></a></p>
 </div>
 </div>
 <div class="sect2">
@@ -2129,7 +2135,7 @@ See <a href="#DeleteAction-element-PathSorter"><code>PathSorter</code></a> for m
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="IfAccumulatedFileSize-attr-exceeds"></a>exceeds</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/FileSize.html"><code>FileSize</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/FileSize.html"><code>FileSize</code></a></p></td>
 <td class="tableblock halign-left valign-top"></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The threshold size for the condition to match.</p>
 <p class="tableblock">Admits the same syntax as the <a href="#SizeBasedTriggeringPolicy-attr-size"><code>size</code> attribute of <code>SizeBasedTriggeringPolicy</code></a>.</p>
@@ -2161,7 +2167,7 @@ This condition matches only if <strong>all</strong> the nested conditions also m
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfAccumulatedFileSize" class="xref page">&#x1F4D6; Plugin reference for <code>IfAccumulatedFileSize</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfAccumulatedFileSize" class="xref page">&#x1F4D6; Plugin reference for <code>IfAccumulatedFileSize</code></a></p>
 </div>
 </div>
 <div class="sect3">
@@ -2234,7 +2240,7 @@ This condition matches only if <strong>all</strong> the nested conditions also m
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfAccumulatedFileCount" class="xref page">&#x1F4D6; Plugin reference for <code>IfAccumulatedFileCount</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfAccumulatedFileCount" class="xref page">&#x1F4D6; Plugin reference for <code>IfAccumulatedFileCount</code></a></p>
 </div>
 </div>
 <div class="sect3">
@@ -2305,7 +2311,7 @@ This condition matches only if <strong>all</strong> the nested conditions also m
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfFileName" class="xref page">&#x1F4D6; Plugin reference for <code>IfFileName</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfFileName" class="xref page">&#x1F4D6; Plugin reference for <code>IfFileName</code></a></p>
 </div>
 </div>
 <div class="sect3">
@@ -2332,7 +2338,7 @@ This condition matches only if <strong>all</strong> the nested conditions also m
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="IfLastModified-attr-age"></a>age</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/Duration.html"><code>Duration</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/Duration.html"><code>Duration</code></a></p></td>
 <td class="tableblock halign-left valign-top"></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The condition accepts files that are as old or older than the specified duration.</p>
 <p class="tableblock"><strong>Required</strong></p></td>
@@ -2363,7 +2369,7 @@ This condition matches only if <strong>all</strong> the nested conditions also m
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfLastModified" class="xref page">&#x1F4D6; Plugin reference for <code>IfLastModified</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfLastModified" class="xref page">&#x1F4D6; Plugin reference for <code>IfLastModified</code></a></p>
 </div>
 </div>
 <div class="sect3">
@@ -2394,7 +2400,7 @@ This condition matches only if <strong>all</strong> the nested conditions also m
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfNot" class="xref page">&#x1F4D6; Plugin reference for <code>IfNot</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfNot" class="xref page">&#x1F4D6; Plugin reference for <code>IfNot</code></a></p>
 </div>
 </div>
 <div class="sect3">
@@ -2425,7 +2431,7 @@ This condition matches only if <strong>all</strong> the nested conditions also m
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfAll" class="xref page">&#x1F4D6; Plugin reference for <code>IfAll</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfAll" class="xref page">&#x1F4D6; Plugin reference for <code>IfAll</code></a></p>
 </div>
 </div>
 <div class="sect3">
@@ -2453,7 +2459,7 @@ This condition matches only if <strong>all</strong> the nested conditions also m
 </tbody>
 </table>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfAny" class="xref page">&#x1F4D6; Plugin reference for <code>IfAny</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-IfAny" class="xref page">&#x1F4D6; Plugin reference for <code>IfAny</code></a></p>
 </div>
 </div>
 </div>
@@ -2481,19 +2487,19 @@ This condition matches only if <strong>all</strong> the nested conditions also m
 </thead>
 <tbody>
 <tr>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="scripts.html#Script" class="xref page"><code>Script</code></a>,
-<a href="scripts.html#ScriptFile" class="xref page"><code>ScriptFile</code></a>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../scripts.html#Script" class="xref page"><code>Script</code></a>,
+<a href="../scripts.html#ScriptFile" class="xref page"><code>ScriptFile</code></a>
 or
-<a href="scripts.html#ScriptRef" class="xref page"><code>ScriptRef</code></a></p></td>
+<a href="../scripts.html#ScriptRef" class="xref page"><code>ScriptRef</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>one</strong></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">A reference to the script to execute.</p>
-<p class="tableblock">See <a href="scripts.html" class="xref page">Scripts</a> for more details about scripting.</p></td>
+<p class="tableblock">See <a href="../scripts.html" class="xref page">Scripts</a> for more details about scripting.</p></td>
 </tr>
 </tbody>
 </table>
 <div class="paragraph">
 <p>The script must return a list of
-<a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/PathWithAttributes.html"><code>PathWithAttributes</code></a>
+<a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/PathWithAttributes.html"><code>PathWithAttributes</code></a>
 objects and supports the following bindings:</p>
 </div>
 <table id="ScriptFilter-bindings" class="tableblock frame-all grid-all stretch">
@@ -2518,12 +2524,12 @@ objects and supports the following bindings:</p>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="ScriptFilter-binding-configuration"></a>configuration</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="configuration.html" class="xref page"><code>Configuration</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../configuration.html" class="xref page"><code>Configuration</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The <code>Configuration</code> object.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="ScriptFilter-binding-pathList"></a>pathList</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/PathWithAttributes.html"><code>List&lt;PathWithAttributes&gt;</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/PathWithAttributes.html"><code>List&lt;PathWithAttributes&gt;</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The list of files contained in the base directory.</p>
 <p class="tableblock">The paths are obtained by
 <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html#resolve-java.nio.file.Path-">resolving</a>
@@ -2532,19 +2538,19 @@ the relative file names against
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="ScriptFilter-binding-substitutor"></a>substitutor</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../javadoc/log4j-core/org/apache/logging/log4j/core/lookup/StrSubstitutor.html"><code>StrSubstitutor</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/lookup/StrSubstitutor.html"><code>StrSubstitutor</code></a></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">The <code>StrSubstitutor</code> used to replace lookup variables.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code><a id="ScriptFilter-binding-statusLogger"></a>statusLogger</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../javadoc/log4j-core/org/apache/logging/log4j/core/Logger.html"><code>Logger</code></a></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The <a href="status-logger.html" class="xref page">Status Logger</a> to used by diagnostic messages in the script.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/Logger.html"><code>Logger</code></a></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The <a href="../status-logger.html" class="xref page">Status Logger</a> to used by diagnostic messages in the script.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>&lt;key&gt;</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">If <code>&lt;key&gt;</code> is not one of the above, it will be bound to the value given by
-<a href="configuration.html#property-substitution" class="xref page">the global <code>Properties</code> configuration element.</a></p></td>
+<a href="../configuration.html#property-substitution" class="xref page">the global <code>Properties</code> configuration element.</a></p></td>
 </tr>
 </tbody>
 </table>
@@ -2552,7 +2558,7 @@ the relative file names against
 <p>For an example of <code>ScriptCondition</code> usage, see the <a href="#using-script-condition">Using <code>ScriptCondition</code></a> example below.</p>
 </div>
 <div class="paragraph">
-<p><a href="../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-ScriptCondition" class="xref page">&#x1F4D6; Plugin reference for <code>ScriptCondition</code></a></p>
+<p><a href="../../plugin-reference.html#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-appender-rolling-action-ScriptCondition" class="xref page">&#x1F4D6; Plugin reference for <code>ScriptCondition</code></a></p>
 </div>
 </div>
 </div>
@@ -2613,7 +2619,7 @@ An equivalent configuration will look like this:</p>
 </div>
 <div id="_tabs_3_xml--panel" class="tabpanel" aria-labelledby="_tabs_3_xml">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/logrotate.xml"><code>log4j2.xml</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/logrotate.xml"><code>log4j2.xml</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;RollingFile name="FILE"
              fileName="/var/log/app.log"
@@ -2630,7 +2636,7 @@ An equivalent configuration will look like this:</p>
 </div>
 <div id="_tabs_3_json--panel" class="tabpanel" aria-labelledby="_tabs_3_json">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/logrotate.json"><code>log4j2.json</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/logrotate.json"><code>log4j2.json</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"RollingFile": {
   "name": "FILE",
@@ -2654,7 +2660,7 @@ An equivalent configuration will look like this:</p>
 </div>
 <div id="_tabs_3_yaml--panel" class="tabpanel" aria-labelledby="_tabs_3_yaml">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/logrotate.yaml"><code>log4j2.yaml</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/logrotate.yaml"><code>log4j2.yaml</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">RollingFile:
   name: "FILE"
@@ -2673,7 +2679,7 @@ An equivalent configuration will look like this:</p>
 </div>
 <div id="_tabs_3_properties--panel" class="tabpanel" aria-labelledby="_tabs_3_properties">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/logrotate.properties"><code>log4j2.properties</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/logrotate.properties"><code>log4j2.properties</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.0.type = RollingFile
 appender.0.name = FILE
@@ -2759,7 +2765,7 @@ appender.0.policy.1.size = 100k</code></pre>
 </div>
 <div id="_tabs_4_xml--panel" class="tabpanel" aria-labelledby="_tabs_4_xml">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/timestamped.xml"><code>log4j2.xml</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/timestamped.xml"><code>log4j2.xml</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;RollingFile name="FILE"
              filePattern="/var/log/app.%d{yyyy-MM-dd}.log.gz"&gt; <i class="conum" data-value="1"></i><b>(1)</b>
@@ -2777,7 +2783,7 @@ appender.0.policy.1.size = 100k</code></pre>
 </div>
 <div id="_tabs_4_json--panel" class="tabpanel" aria-labelledby="_tabs_4_json">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/timestamped.json"><code>log4j2.json</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/timestamped.json"><code>log4j2.json</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"RollingFile": {
   "name": "FILE",
@@ -2801,7 +2807,7 @@ appender.0.policy.1.size = 100k</code></pre>
 </div>
 <div id="_tabs_4_yaml--panel" class="tabpanel" aria-labelledby="_tabs_4_yaml">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/timestamped.yaml"><code>log4j2.yaml</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/timestamped.yaml"><code>log4j2.yaml</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">RollingFile:
   name: "FILE"
@@ -2820,7 +2826,7 @@ appender.0.policy.1.size = 100k</code></pre>
 </div>
 <div id="_tabs_4_properties--panel" class="tabpanel" aria-labelledby="_tabs_4_properties">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/timestamped.properties"><code>log4j2.properties</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/timestamped.properties"><code>log4j2.properties</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.0.type = RollingFile
 appender.0.name = FILE
@@ -2871,7 +2877,7 @@ appender.0.policy.type = TimeBaseTriggeringPolicy</code></pre>
 <p>The <a href="#timestamped">example above</a> can be rewritten into the following Groovy script:</p>
 </div>
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/script-condition.groovy"><code>script-condition.groovy</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/script-condition.groovy"><code>script-condition.groovy</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-groovy hljs" data-lang="groovy">def limit = FileTime.from(ZonedDateTime.now().minusDays(15).toInstant())
 def matcher = FileSystems.getDefault().getPathMatcher('glob:app.*.log.gz')
@@ -2891,11 +2897,11 @@ return pathList.stream()
 <table>
 <tr>
 <td><i class="conum" data-value="1"></i><b>1</b></td>
-<td>Adding <a href="status-logger.html" class="xref page">Status Logger</a> calls in your script might help in debugging it.</td>
+<td>Adding <a href="../status-logger.html" class="xref page">Status Logger</a> calls in your script might help in debugging it.</td>
 </tr>
 <tr>
 <td><i class="conum" data-value="2"></i><b>2</b></td>
-<td><a href="../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/PathWithAttributes.html#getPath()"><code>PathWithAttributes.getPath()</code></a>
+<td><a href="../../javadoc/log4j-core/org/apache/logging/log4j/core/appender/rolling/action/PathWithAttributes.html#getPath()"><code>PathWithAttributes.getPath()</code></a>
 always starts with <code>basePath</code>, so we need to relativize it.</td>
 </tr>
 <tr>
@@ -2931,7 +2937,7 @@ always starts with <code>basePath</code>, so we need to relativize it.</td>
 </div>
 <div id="_tabs_5_xml--panel" class="tabpanel" aria-labelledby="_tabs_5_xml">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/script-condition.xml"><code>log4j2.xml</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/script-condition.xml"><code>log4j2.xml</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;RollingFile name="FILE"
              filePattern="/var/log/app.%d{yyyy-MM-dd}.log.gz"&gt;
@@ -2951,7 +2957,7 @@ always starts with <code>basePath</code>, so we need to relativize it.</td>
 </div>
 <div id="_tabs_5_json--panel" class="tabpanel" aria-labelledby="_tabs_5_json">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/script-condition.json"><code>log4j2.json</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/script-condition.json"><code>log4j2.json</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"RollingFile": {
   "name": "FILE",
@@ -2975,7 +2981,7 @@ always starts with <code>basePath</code>, so we need to relativize it.</td>
 </div>
 <div id="_tabs_5_yaml--panel" class="tabpanel" aria-labelledby="_tabs_5_yaml">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/script-condition.yaml"><code>log4j2.yaml</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/script-condition.yaml"><code>log4j2.yaml</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">RollingFile:
   name: "FILE"
@@ -2993,7 +2999,7 @@ always starts with <code>basePath</code>, so we need to relativize it.</td>
 </div>
 <div id="_tabs_5_properties--panel" class="tabpanel" aria-labelledby="_tabs_5_properties">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/script-condition.properties"><code>log4j2.properties</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/script-condition.properties"><code>log4j2.properties</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.0.type = RollingFile
 appender.0.name = FILE
@@ -3042,7 +3048,7 @@ In the example below, we create a different folder for each month:</p>
 </div>
 <div id="_tabs_6_xml--panel" class="tabpanel" aria-labelledby="_tabs_6_xml">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/per-month.xml"><code>log4j2.xml</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/per-month.xml"><code>log4j2.xml</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;RollingFile name="FILE"
              filePattern="/var/log/app/%d{yyyy-MM}/%d{yyyy-MM-dd}.log.gz"&gt; <i class="conum" data-value="1"></i><b>(1)</b>
@@ -3060,7 +3066,7 @@ In the example below, we create a different folder for each month:</p>
 </div>
 <div id="_tabs_6_json--panel" class="tabpanel" aria-labelledby="_tabs_6_json">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/per-month.json"><code>log4j2.json</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/per-month.json"><code>log4j2.json</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">"RollingFile": {
   "name": "FILE",
@@ -3082,7 +3088,7 @@ In the example below, we create a different folder for each month:</p>
 </div>
 <div id="_tabs_6_yaml--panel" class="tabpanel" aria-labelledby="_tabs_6_yaml">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/per-month.yaml"><code>log4j2.yaml</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/per-month.yaml"><code>log4j2.yaml</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">RollingFile:
   name: "FILE"
@@ -3100,7 +3106,7 @@ In the example below, we create a different folder for each month:</p>
 </div>
 <div id="_tabs_6_properties--panel" class="tabpanel" aria-labelledby="_tabs_6_properties">
 <div class="listingblock">
-<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/rolling-file/per-month.properties"><code>log4j2.properties</code></a></div>
+<div class="title">Snippet from an example <a href="https://github.com/apache/logging-log4j2/tree/2.x/src/site/antora/modules/ROOT/examples/manual/appenders/rolling-file/per-month.properties"><code>log4j2.properties</code></a></div>
 <div class="content">
 <pre class="highlightjs highlight"><code class="language-properties hljs" data-lang="properties">appender.0.type = RollingFile
 appender.0.name = FILE
@@ -3154,9 +3160,9 @@ appender.0.policy.type = TimeBaseTriggeringPolicy</code></pre>
     Other names may be trademarks of their respective owners.
   </p>
 </footer>
-<script id="site-script" src="../_/js/site.js" data-ui-root-path="../_"></script>
-<script async src="../_/js/vendor/highlight.js"></script>
+<script id="site-script" src="../../_/js/site.js" data-ui-root-path="../../_"></script>
+<script async src="../../_/js/vendor/highlight.js"></script>
 <!-- `@asciidoctor/tabs` extension scripts -->
-<script async src="../_/js/vendor/tabs.js"></script>
+<script async src="../../_/js/vendor/tabs.js"></script>
   </body>
 </html>
diff --git a/manual/architecture.html b/manual/architecture.html
index 5a8ff945e4..5eae380b29 100644
--- a/manual/architecture.html
+++ b/manual/architecture.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/async.html b/manual/async.html
index 9a114da578..475db8fb84 100644
--- a/manual/async.html
+++ b/manual/async.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/compatibility.html b/manual/compatibility.html
index b7a1e91bce..d5190021ce 100644
--- a/manual/compatibility.html
+++ b/manual/compatibility.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/config-intro.html b/manual/config-intro.html
index 6ccd6a9c79..0b7bf99dd4 100644
--- a/manual/config-intro.html
+++ b/manual/config-intro.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/configuration.html b/manual/configuration.html
index 14efefa910..07b8e93c1e 100644
--- a/manual/configuration.html
+++ b/manual/configuration.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/customconfig.html b/manual/customconfig.html
index e36d36604e..8d5fe6a193 100644
--- a/manual/customconfig.html
+++ b/manual/customconfig.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/customloglevels.html b/manual/customloglevels.html
index ddd04360b4..36069830c2 100644
--- a/manual/customloglevels.html
+++ b/manual/customloglevels.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/eventlogging.html b/manual/eventlogging.html
index c90a1c9435..99d45d14e5 100644
--- a/manual/eventlogging.html
+++ b/manual/eventlogging.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/extending.html b/manual/extending.html
index 5023ed6ab8..47fe06c89e 100644
--- a/manual/extending.html
+++ b/manual/extending.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/filters.html b/manual/filters.html
index 50e127aef4..87305533b7 100644
--- a/manual/filters.html
+++ b/manual/filters.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/flowtracing.html b/manual/flowtracing.html
index 678ff42c00..fff7d1a79c 100644
--- a/manual/flowtracing.html
+++ b/manual/flowtracing.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/garbagefree.html b/manual/garbagefree.html
index 15540c7c81..64fc911446 100644
--- a/manual/garbagefree.html
+++ b/manual/garbagefree.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/getting-started.html b/manual/getting-started.html
index 3695f160fe..97f82ab0f3 100644
--- a/manual/getting-started.html
+++ b/manual/getting-started.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/index.html b/manual/index.html
index f8f6c7228b..b85f0f6462 100644
--- a/manual/index.html
+++ b/manual/index.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/installation.html b/manual/installation.html
index 44b9869b7a..244eb5a595 100644
--- a/manual/installation.html
+++ b/manual/installation.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/jmx.html b/manual/jmx.html
index cf99f7c09e..426e969456 100644
--- a/manual/jmx.html
+++ b/manual/jmx.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/json-template-layout.html b/manual/json-template-layout.html
index f16966910e..1849f306dd 100644
--- a/manual/json-template-layout.html
+++ b/manual/json-template-layout.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/layouts.html b/manual/layouts.html
index 1e971dfa2d..6127981cdf 100644
--- a/manual/layouts.html
+++ b/manual/layouts.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/logbuilder.html b/manual/logbuilder.html
index 41f2ed4d4b..015b14459b 100644
--- a/manual/logbuilder.html
+++ b/manual/logbuilder.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/lookups.html b/manual/lookups.html
index 2448bf7b84..695a815043 100644
--- a/manual/lookups.html
+++ b/manual/lookups.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/markers.html b/manual/markers.html
index 659b96dc44..f3ad050478 100644
--- a/manual/markers.html
+++ b/manual/markers.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/messages.html b/manual/messages.html
index 73ff56a8eb..148af54417 100644
--- a/manual/messages.html
+++ b/manual/messages.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/pattern-layout.html b/manual/pattern-layout.html
index 62eb0174aa..f7d52e1f03 100644
--- a/manual/pattern-layout.html
+++ b/manual/pattern-layout.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/performance.html b/manual/performance.html
index cfddc23a00..ad783f752c 100644
--- a/manual/performance.html
+++ b/manual/performance.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/plugins.html b/manual/plugins.html
index 003d8610d7..801da5ab03 100644
--- a/manual/plugins.html
+++ b/manual/plugins.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/resource-logger.html b/manual/resource-logger.html
index a355067687..e5fe8e5ba1 100644
--- a/manual/resource-logger.html
+++ b/manual/resource-logger.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/scoped-context.html b/manual/scoped-context.html
index 7520e05d81..78bebee76b 100644
--- a/manual/scoped-context.html
+++ b/manual/scoped-context.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/scripts.html b/manual/scripts.html
index c5a0033d30..be9ece01e6 100644
--- a/manual/scripts.html
+++ b/manual/scripts.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/simple-logger.html b/manual/simple-logger.html
index 3732fa7f1d..279e30a058 100644
--- a/manual/simple-logger.html
+++ b/manual/simple-logger.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/status-logger.html b/manual/status-logger.html
index 23df6f9dd3..978c910915 100644
--- a/manual/status-logger.html
+++ b/manual/status-logger.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/systemproperties.html b/manual/systemproperties.html
index 647a415051..9f2ffdf810 100644
--- a/manual/systemproperties.html
+++ b/manual/systemproperties.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/manual/thread-context.html b/manual/thread-context.html
index 4468d30a32..dcc4521a3d 100644
--- a/manual/thread-context.html
+++ b/manual/thread-context.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/migrate-from-log4j1.html b/migrate-from-log4j1.html
index 212186ea31..51e1b88ba3 100644
--- a/migrate-from-log4j1.html
+++ b/migrate-from-log4j1.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/migrate-from-logback.html b/migrate-from-logback.html
index a51b9ae5e4..be724aefd6 100644
--- a/migrate-from-logback.html
+++ b/migrate-from-logback.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/migrate-from-slf4j.html b/migrate-from-slf4j.html
index 75aa367f06..691d3fd70e 100644
--- a/migrate-from-slf4j.html
+++ b/migrate-from-slf4j.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
diff --git a/plugin-reference.html b/plugin-reference.html
index f7596e208f..ffc7d2f41f 100644
--- a/plugin-reference.html
+++ b/plugin-reference.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
@@ -1474,7 +1480,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 95f4b4b849..fcd444da22 100644
--- a/release-notes.html
+++ b/release-notes.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>
@@ -519,6 +525,9 @@
 <p>Update <code>github/codeql-action</code> to version <code>3.25.1</code> (<a href="https://github.com/apache/logging-log4j2/pull/2483">2483</a>)</p>
 </li>
 <li>
+<p>Update <code>io.fabric8:docker-maven-plugin</code> to version <code>0.45.0</code> (<a href="https://github.com/apache/logging-log4j2/pull/2776">2776</a>)</p>
+</li>
+<li>
 <p>Update <code>io.netty:netty-bom</code> to version <code>4.1.112.Final</code> (<a href="https://github.com/apache/logging-log4j2/pull/2760">2760</a>)</p>
 </li>
 <li>
@@ -570,6 +579,9 @@
 <p>Update <code>org.eclipse.persistence:org.eclipse.persistence.jpa</code> to version `` (<a href="https://github.com/apache/logging-log4j2/pull/2602">2602</a>)</p>
 </li>
 <li>
+<p>Update <code>org.hamcrest:hamcrest</code> to version <code>3.0</code> (<a href="https://github.com/apache/logging-log4j2/pull/2788">2788</a>)</p>
+</li>
+<li>
 <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>
@@ -591,6 +603,9 @@
 <p>Update <code>org.springframework:spring-framework-bom</code> to version <code>5.3.37</code> (<a href="https://github.com/apache/logging-log4j2/pull/2656">2656</a>)</p>
 </li>
 <li>
+<p>Update <code>org.tukaani:xz</code> to version <code>1.10</code> (<a href="https://github.com/apache/logging-log4j2/pull/2779">2779</a>)</p>
+</li>
+<li>
 <p>Update <code>org.xmlunit:xmlunit-core</code> to version <code>2.10.0</code> (<a href="https://github.com/apache/logging-log4j2/pull/2546">2546</a>)</p>
 </li>
 </ul>
diff --git a/sitemap.xml b/sitemap.xml
index 4b00e487ce..997fb42b4d 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -2,234 +2,242 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
 <url>
 <loc>https://logging.apache.org/log4j/2.x/development.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/download.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/faq.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/hibernate.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/index.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/jakarta.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/javadoc.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/log4j-cassandra.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/log4j-couchdb.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/log4j-docker.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/log4j-flume-ng.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/log4j-iostreams.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/log4j-jul.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/log4j-spring-boot.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/log4j-spring-cloud-config-client.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/log4j-spring-cloud-config.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/log4j-to-jul.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/api.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/appenders.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
+</url>
+<url>
+<loc>https://logging.apache.org/log4j/2.x/manual/appenders/delegating.html</loc>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
+</url>
+<url>
+<loc>https://logging.apache.org/log4j/2.x/manual/appenders/file.html</loc>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
+</url>
+<url>
+<loc>https://logging.apache.org/log4j/2.x/manual/appenders/rolling-file.html</loc>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/architecture.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/async.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/compatibility.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/config-intro.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/configuration.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/customconfig.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/customloglevels.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/eventlogging.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/extending.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/filters.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/flowtracing.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/garbagefree.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/getting-started.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/index.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/installation.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/jmx.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/json-template-layout.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/layouts.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/logbuilder.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/lookups.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/markers.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/messages.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/pattern-layout.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/performance.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/plugins.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/resource-logger.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
-</url>
-<url>
-<loc>https://logging.apache.org/log4j/2.x/manual/rolling-file.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/scoped-context.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/scripts.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/simple-logger.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/status-logger.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/systemproperties.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/manual/thread-context.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/migrate-from-log4j1.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/migrate-from-logback.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/migrate-from-slf4j.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/plugin-reference.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/release-notes.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 <url>
 <loc>https://logging.apache.org/log4j/2.x/soa.html</loc>
-<lastmod>2024-07-30T07:53:45.126Z</lastmod>
+<lastmod>2024-08-01T13:18:25.171Z</lastmod>
 </url>
 </urlset>
diff --git a/soa.html b/soa.html
index 974833fce2..2439d44ab9 100644
--- a/soa.html
+++ b/soa.html
@@ -168,7 +168,13 @@
     <a class="nav-link" href="manual/appenders.html">Appenders</a>
 <ul class="nav-list">
   <li class="nav-item" data-depth="3">
-    <a class="nav-link" href="manual/rolling-file.html">Rolling file appenders</a>
+    <a class="nav-link" href="manual/appenders/file.html">File appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/rolling-file.html">Rolling file appenders</a>
+  </li>
+  <li class="nav-item" data-depth="3">
+    <a class="nav-link" href="manual/appenders/delegating.html">Delegating Appenders</a>
   </li>
 </ul>
   </li>