This is an automated email from the ASF dual-hosted git repository.
github-actions[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 1005770aa5 Add website content generated from
`98c2fa3946de2481f4cd50a965b0e2b4b1201ff0`
1005770aa5 is described below
commit 1005770aa53c9193a1fc89bca86f6d8fc1ffe767
Author: ASF Logging Services RM <[email protected]>
AuthorDate: Fri May 15 13:20:27 2026 +0000
Add website content generated from
`98c2fa3946de2481f4cd50a965b0e2b4b1201ff0`
---
...ag-01168003b98f120d2f0736e5172de8e1218f189e.svg | 1 +
...ag-0c23746e246efa4a462049e2adc4b0349185aa77.svg | 1 +
...ag-2158b7cc88b372c32a9592f8cdbc1cc926bb8b80.svg | 1 +
...ag-232cdf1d44336897239fa03f6521cc730f38f32d.svg | 1 +
...ag-35cc4e8101ffe76d0edc44ed334a6273018dc51b.svg | 1 +
...ag-3f8a04c810525cc09a5e7564abf3aa14ed1f7c81.svg | 1 +
...ag-4d55aeb99a0ae8707b4121b1f76e9544af16b3c4.svg | 1 +
...ag-581e854ee8ecdb00104bac5affda10a653d8f76d.svg | 1 +
...ag-58c484caf8cd616db4f1c7ed31b51c123b5859d4.svg | 1 +
...ag-5c97f284d82478c0499cab16fe90893de781b11f.svg | 1 +
...ag-5ffe377615be9b0375b26533bbf7b10507dc946b.svg | 1 +
...ag-63d449f3bcd24cfa522a41f6e2f545416de30322.svg | 1 +
...ag-73365a4d8197b5441a98fd1d661b07760da178be.svg | 1 +
...ag-768e5e02508ea736d8901892b519a6d3a7a770ab.svg | 1 +
...ag-77a13b00749af95e3ed0eefd605a73f25d70973c.svg | 1 +
...ag-7a08e5a79432e9299cc0d9671bd39677be5618e8.svg | 1 +
...ag-892fd9dbd9ea6bece55c1d4078ae1de2edd5c689.svg | 1 +
...ag-a15d9b3aaacbf863f81fe0dcb0ed21346b6c46ed.svg | 1 +
...ag-a51b68065f249459078382aa4c61888857f01b2c.svg | 1 +
...ag-d5122741a680d765fa3170a444015b615a1fdafd.svg | 1 +
...ag-fd71b342bbb89cd55a1ddb592976b9ac26b6348e.svg | 1 +
graalvm.html | 58 +--
hibernate.html | 58 +--
log4j-jul.html | 58 +--
manual/appenders/rolling-file.html | 134 +----
manual/architecture.html | 554 ++-------------------
manual/filters.html | 97 +---
manual/installation.html | 58 +--
manual/lookups.html | 28 +-
migrate-from-logback.html | 58 +--
migrate-from-slf4j.html | 58 +--
plugin-reference.html | 14 +-
sitemap.xml | 120 ++---
33 files changed, 163 insertions(+), 1153 deletions(-)
diff --git a/_images/diag-01168003b98f120d2f0736e5172de8e1218f189e.svg
b/_images/diag-01168003b98f120d2f0736e5172de8e1218f189e.svg
new file mode 100644
index 0000000000..c6695226b2
--- /dev/null
+++ b/_images/diag-01168003b98f120d2f0736e5172de8e1218f189e.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="278px" preserveAspectRatio="none"
style="width:787px;height:278px;background:#FFFFFF;" version="1.1" viewBox="0 0
787 278" width="787px" zoomAndPan="magnify"><defs/><g><!--cluster
LoggerContext--><g class="cluster" data-qualified-name="LoggerContext"
data-source-line="3" id="ent0002"><path d="M8.5,6 L126.251,6 A3.75,3.75 0 0
[...]
\ No newline at end of file
diff --git a/_images/diag-0c23746e246efa4a462049e2adc4b0349185aa77.svg
b/_images/diag-0c23746e246efa4a462049e2adc4b0349185aa77.svg
new file mode 100644
index 0000000000..287508e9d3
--- /dev/null
+++ b/_images/diag-0c23746e246efa4a462049e2adc4b0349185aa77.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="ACTIVITY" height="463px" preserveAspectRatio="none"
style="width:513px;height:463px;background:#FFFFFF;" version="1.1" viewBox="0 0
513 463" width="513px" zoomAndPan="magnify"><defs/><g><rect fill="#FFFFCC"
height="48.2813" rx="2.5" ry="2.5" style="stroke:#FFDD88;stroke-width:3;"
width="502.6611" x="5" y="5"/><text fill="#000000" font-fami [...]
\ No newline at end of file
diff --git a/_images/diag-2158b7cc88b372c32a9592f8cdbc1cc926bb8b80.svg
b/_images/diag-2158b7cc88b372c32a9592f8cdbc1cc926bb8b80.svg
new file mode 100644
index 0000000000..4744d89b7f
--- /dev/null
+++ b/_images/diag-2158b7cc88b372c32a9592f8cdbc1cc926bb8b80.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="ACTIVITY" height="475px" preserveAspectRatio="none"
style="width:459px;height:475px;background:#FFFFFF;" version="1.1" viewBox="0 0
459 475" width="459px" zoomAndPan="magnify"><defs/><g><rect fill="#FFFFCC"
height="48.2813" rx="2.5" ry="2.5" style="stroke:#FFDD88;stroke-width:3;"
width="448.4766" x="5" y="5"/><text fill="#000000" font-fami [...]
\ No newline at end of file
diff --git a/_images/diag-232cdf1d44336897239fa03f6521cc730f38f32d.svg
b/_images/diag-232cdf1d44336897239fa03f6521cc730f38f32d.svg
new file mode 100644
index 0000000000..f2bbf26f8d
--- /dev/null
+++ b/_images/diag-232cdf1d44336897239fa03f6521cc730f38f32d.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="218px" preserveAspectRatio="none"
style="width:200px;height:218px;background:#FFFFFF;" version="1.1" viewBox="0 0
200 218" width="200px" zoomAndPan="magnify"><defs/><g><!--class Appender--><g
class="entity" data-qualified-name="Appender" data-source-line="1"
id="ent0002"><rect fill="#F1F1F1" height="80.5938" rx="2.5" ry="2.5 [...]
\ No newline at end of file
diff --git a/_images/diag-35cc4e8101ffe76d0edc44ed334a6273018dc51b.svg
b/_images/diag-35cc4e8101ffe76d0edc44ed334a6273018dc51b.svg
new file mode 100644
index 0000000000..37ff824237
--- /dev/null
+++ b/_images/diag-35cc4e8101ffe76d0edc44ed334a6273018dc51b.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="226px" preserveAspectRatio="none"
style="width:790px;height:226px;background:#FFFFFF;" version="1.1" viewBox="0 0
790 226" width="790px" zoomAndPan="magnify"><defs/><g><!--class initial--><g
class="entity" data-qualified-name="initial" data-source-line="1"
id="ent0002"><rect fill="#F1F1F1" height="64.2969" rx="2.5" ry="2.5" [...]
\ No newline at end of file
diff --git a/_images/diag-3f8a04c810525cc09a5e7564abf3aa14ed1f7c81.svg
b/_images/diag-3f8a04c810525cc09a5e7564abf3aa14ed1f7c81.svg
new file mode 100644
index 0000000000..6451d9a005
--- /dev/null
+++ b/_images/diag-3f8a04c810525cc09a5e7564abf3aa14ed1f7c81.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="1022px" preserveAspectRatio="none"
style="width:1354px;height:1022px;background:#FFFFFF;" version="1.1" viewBox="0
0 1354 1022" width="1354px" zoomAndPan="magnify"><defs/><g><!--cluster c--><g
class="cluster" data-qualified-name="c" data-source-line="13"
id="ent0008"><path d="M8.5,150.89 L117.665,150.89 A3.75,3.75 0 0 1 120. [...]
\ No newline at end of file
diff --git a/_images/diag-4d55aeb99a0ae8707b4121b1f76e9544af16b3c4.svg
b/_images/diag-4d55aeb99a0ae8707b4121b1f76e9544af16b3c4.svg
new file mode 100644
index 0000000000..4a885a0758
--- /dev/null
+++ b/_images/diag-4d55aeb99a0ae8707b4121b1f76e9544af16b3c4.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="ACTIVITY" height="482px" preserveAspectRatio="none"
style="width:495px;height:482px;background:#FFFFFF;" version="1.1" viewBox="0 0
495 482" width="495px" zoomAndPan="magnify"><defs/><g><rect fill="#FFFFCC"
height="48.2813" rx="2.5" ry="2.5" style="stroke:#FFDD88;stroke-width:3;"
width="484.5996" x="5" y="5"/><text fill="#000000" font-fami [...]
\ No newline at end of file
diff --git a/_images/diag-581e854ee8ecdb00104bac5affda10a653d8f76d.svg
b/_images/diag-581e854ee8ecdb00104bac5affda10a653d8f76d.svg
new file mode 100644
index 0000000000..7c7170a080
--- /dev/null
+++ b/_images/diag-581e854ee8ecdb00104bac5affda10a653d8f76d.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="614px" preserveAspectRatio="none"
style="width:558px;height:614px;background:#FFFFFF;" version="1.1" viewBox="0 0
558 614" width="558px" zoomAndPan="magnify"><defs/><g><!--class
Configuration--><g class="entity" data-qualified-name="Configuration"
data-source-line="1" id="ent0002"><rect fill="#F1F1F1" height="129.4844" rx="2
[...]
\ No newline at end of file
diff --git a/_images/diag-58c484caf8cd616db4f1c7ed31b51c123b5859d4.svg
b/_images/diag-58c484caf8cd616db4f1c7ed31b51c123b5859d4.svg
new file mode 100644
index 0000000000..4550c16af0
--- /dev/null
+++ b/_images/diag-58c484caf8cd616db4f1c7ed31b51c123b5859d4.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="MINDMAP" height="134px" preserveAspectRatio="none"
style="width:627px;height:134px;background:#FFFFFF;" version="1.1" viewBox="0 0
627 134" width="627px" zoomAndPan="magnify"><defs/><g><rect fill="#F1F1F1"
height="36.2969" rx="12.5" ry="12.5" style="stroke:#181818;stroke-width:1.5;"
width="48.376" x="10" y="48.1484"/><text fill="#000000" f [...]
\ No newline at end of file
diff --git a/_images/diag-5c97f284d82478c0499cab16fe90893de781b11f.svg
b/_images/diag-5c97f284d82478c0499cab16fe90893de781b11f.svg
new file mode 100644
index 0000000000..3f1b2580f1
--- /dev/null
+++ b/_images/diag-5c97f284d82478c0499cab16fe90893de781b11f.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="408px" preserveAspectRatio="none"
style="width:336px;height:408px;background:#FFFFFF;" version="1.1" viewBox="0 0
336 408" width="336px" zoomAndPan="magnify"><defs/><g><!--class
StrSubstitutor--><g class="entity" data-qualified-name="StrSubstitutor"
data-source-line="1" id="ent0002"><rect fill="#F1F1F1" height="96.8906" rx="
[...]
\ No newline at end of file
diff --git a/_images/diag-5ffe377615be9b0375b26533bbf7b10507dc946b.svg
b/_images/diag-5ffe377615be9b0375b26533bbf7b10507dc946b.svg
new file mode 100644
index 0000000000..cbcfecd5f6
--- /dev/null
+++ b/_images/diag-5ffe377615be9b0375b26533bbf7b10507dc946b.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="489px" preserveAspectRatio="none"
style="width:938px;height:489px;background:#FFFFFF;" version="1.1" viewBox="0 0
938 489" width="938px" zoomAndPan="magnify"><defs/><g><!--class
LoggerContext--><g class="entity" data-qualified-name="LoggerContext"
data-source-line="1" id="ent0002"><rect fill="#F1F1F1" height="96.8906" rx="2.
[...]
\ No newline at end of file
diff --git a/_images/diag-63d449f3bcd24cfa522a41f6e2f545416de30322.svg
b/_images/diag-63d449f3bcd24cfa522a41f6e2f545416de30322.svg
new file mode 100644
index 0000000000..4438110a42
--- /dev/null
+++ b/_images/diag-63d449f3bcd24cfa522a41f6e2f545416de30322.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="754px" preserveAspectRatio="none"
style="width:557px;height:754px;background:#FFFFFF;" version="1.1" viewBox="0 0
557 754" width="557px" zoomAndPan="magnify"><defs/><g><!--class
Configuration--><g class="entity" data-qualified-name="Configuration"
data-source-line="1" id="ent0002"><rect fill="#F1F1F1" height="129.4844" rx="2
[...]
\ No newline at end of file
diff --git a/_images/diag-73365a4d8197b5441a98fd1d661b07760da178be.svg
b/_images/diag-73365a4d8197b5441a98fd1d661b07760da178be.svg
new file mode 100644
index 0000000000..8477cbd3a2
--- /dev/null
+++ b/_images/diag-73365a4d8197b5441a98fd1d661b07760da178be.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="507px" preserveAspectRatio="none"
style="width:663px;height:507px;background:#FFFFFF;" version="1.1" viewBox="0 0
663 507" width="663px" zoomAndPan="magnify"><defs/><g><!--class
Configuration--><g class="entity" data-qualified-name="Configuration"
data-source-line="1" id="ent0002"><rect fill="#F1F1F1" height="129.4844" rx="2
[...]
\ No newline at end of file
diff --git a/_images/diag-768e5e02508ea736d8901892b519a6d3a7a770ab.svg
b/_images/diag-768e5e02508ea736d8901892b519a6d3a7a770ab.svg
new file mode 100644
index 0000000000..b3a86f6a75
--- /dev/null
+++ b/_images/diag-768e5e02508ea736d8901892b519a6d3a7a770ab.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="143px" preserveAspectRatio="none"
style="width:790px;height:143px;background:#FFFFFF;" version="1.1" viewBox="0 0
790 143" width="790px" zoomAndPan="magnify"><defs/><g><!--class initial--><g
class="entity" data-qualified-name="initial" data-source-line="1"
id="ent0002"><rect fill="#F1F1F1" height="64.2969" rx="2.5" ry="2.5" [...]
\ No newline at end of file
diff --git a/_images/diag-77a13b00749af95e3ed0eefd605a73f25d70973c.svg
b/_images/diag-77a13b00749af95e3ed0eefd605a73f25d70973c.svg
new file mode 100644
index 0000000000..f7e347ed7a
--- /dev/null
+++ b/_images/diag-77a13b00749af95e3ed0eefd605a73f25d70973c.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="442px" preserveAspectRatio="none"
style="width:304px;height:442px;background:#FFFFFF;" version="1.1" viewBox="0 0
304 442" width="304px" zoomAndPan="magnify"><defs/><g><!--class
LoggerContext--><g class="entity" data-qualified-name="LoggerContext"
data-source-line="1" id="ent0002"><rect fill="#F1F1F1" height="96.8906" rx="2.
[...]
\ No newline at end of file
diff --git a/_images/diag-7a08e5a79432e9299cc0d9671bd39677be5618e8.svg
b/_images/diag-7a08e5a79432e9299cc0d9671bd39677be5618e8.svg
new file mode 100644
index 0000000000..f27a90c7fc
--- /dev/null
+++ b/_images/diag-7a08e5a79432e9299cc0d9671bd39677be5618e8.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="548px" preserveAspectRatio="none"
style="width:337px;height:548px;background:#FFFFFF;" version="1.1" viewBox="0 0
337 548" width="337px" zoomAndPan="magnify"><defs/><g><!--class
Configuration--><g class="entity" data-qualified-name="Configuration"
data-source-line="1" id="ent0002"><rect fill="#F1F1F1" height="129.4844" rx="2
[...]
\ No newline at end of file
diff --git a/_images/diag-892fd9dbd9ea6bece55c1d4078ae1de2edd5c689.svg
b/_images/diag-892fd9dbd9ea6bece55c1d4078ae1de2edd5c689.svg
new file mode 100644
index 0000000000..0393a83721
--- /dev/null
+++ b/_images/diag-892fd9dbd9ea6bece55c1d4078ae1de2edd5c689.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="MINDMAP" height="134px" preserveAspectRatio="none"
style="width:349px;height:134px;background:#FFFFFF;" version="1.1" viewBox="0 0
349 134" width="349px" zoomAndPan="magnify"><defs/><g><rect fill="#F1F1F1"
height="36.2969" rx="12.5" ry="12.5" style="stroke:#181818;stroke-width:1.5;"
width="48.376" x="10" y="48.1484"/><text fill="#000000" f [...]
\ No newline at end of file
diff --git a/_images/diag-a15d9b3aaacbf863f81fe0dcb0ed21346b6c46ed.svg
b/_images/diag-a15d9b3aaacbf863f81fe0dcb0ed21346b6c46ed.svg
new file mode 100644
index 0000000000..0fc65044f4
--- /dev/null
+++ b/_images/diag-a15d9b3aaacbf863f81fe0dcb0ed21346b6c46ed.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="ACTIVITY" height="333px" preserveAspectRatio="none"
style="width:471px;height:333px;background:#FFFFFF;" version="1.1" viewBox="0 0
471 333" width="471px" zoomAndPan="magnify"><defs/><g><rect fill="#FFFFCC"
height="48.2813" rx="2.5" ry="2.5" style="stroke:#FFDD88;stroke-width:3;"
width="460.5176" x="5" y="5"/><text fill="#000000" font-fami [...]
\ No newline at end of file
diff --git a/_images/diag-a51b68065f249459078382aa4c61888857f01b2c.svg
b/_images/diag-a51b68065f249459078382aa4c61888857f01b2c.svg
new file mode 100644
index 0000000000..4942255b47
--- /dev/null
+++ b/_images/diag-a51b68065f249459078382aa4c61888857f01b2c.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="DESCRIPTION" height="905px" preserveAspectRatio="none"
style="width:1183px;height:905px;background:#FFFFFF;" version="1.1" viewBox="0
0 1183 905" width="1183px" zoomAndPan="magnify"><defs/><g><g class="legend"
data-source-line="43"><rect fill="#DDDDDD" height="104.7969" rx="7.5" ry="7.5"
style="stroke:#000000;stroke-width:1;" width="214.04 [...]
\ No newline at end of file
diff --git a/_images/diag-d5122741a680d765fa3170a444015b615a1fdafd.svg
b/_images/diag-d5122741a680d765fa3170a444015b615a1fdafd.svg
new file mode 100644
index 0000000000..3aac179158
--- /dev/null
+++ b/_images/diag-d5122741a680d765fa3170a444015b615a1fdafd.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="226px" preserveAspectRatio="none"
style="width:790px;height:226px;background:#FFFFFF;" version="1.1" viewBox="0 0
790 226" width="790px" zoomAndPan="magnify"><defs/><g><!--class initial--><g
class="entity" data-qualified-name="initial" data-source-line="1"
id="ent0002"><rect fill="#F1F1F1" height="64.2969" rx="2.5" ry="2.5" [...]
\ No newline at end of file
diff --git a/_images/diag-fd71b342bbb89cd55a1ddb592976b9ac26b6348e.svg
b/_images/diag-fd71b342bbb89cd55a1ddb592976b9ac26b6348e.svg
new file mode 100644
index 0000000000..2115ad9bde
--- /dev/null
+++ b/_images/diag-fd71b342bbb89cd55a1ddb592976b9ac26b6348e.svg
@@ -0,0 +1 @@
+<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css"
data-diagram-type="CLASS" height="300px" preserveAspectRatio="none"
style="width:663px;height:300px;background:#FFFFFF;" version="1.1" viewBox="0 0
663 300" width="663px" zoomAndPan="magnify"><defs/><g><!--class
LoggerContext--><g class="entity" data-qualified-name="LoggerContext"
data-source-line="1" id="ent0002"><rect fill="#F1F1F1" height="96.8906" rx="2.
[...]
\ No newline at end of file
diff --git a/graalvm.html b/graalvm.html
index 4173b048e7..0f9459f579 100644
--- a/graalvm.html
+++ b/graalvm.html
@@ -408,63 +408,11 @@ For instance, <code>log4j-slf4j2-impl</code>
<em>bridges</em> SLF4J calls to Log
<div class="paragraph">
<p>To make things a little bit more tangible, consider the following
visualization of a typical Log4j Core installation with bridges for an
application:</p>
</div>
-<div class="literalblock kroki-error">
-<div class="title">Visualization of a typical Log4j Core installation with
SLF4J, JUL, and JPL bridges</div>
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-frame "Compile time" {
- [Application] --> [Log4j API] : logs to
-
- [Log4j API] #Cyan
-
- [SLF4J] #Cyan
-
- [Library 1] --> [SLF4J] : logs to
- [Application] --> [Library 1] : uses
- [Application] --> [Library 2] : uses
- [Application] --> [Library 3] : uses
-}
-
-frame Runtime {
-
- [Log4j Core] <.. [Log4j API] : is implemented by
- [Log4j Core] <.. (log4j2.xml) : is provided to
- [Log4j Core] #LightGreen
-
- [JPL-to-Log4j] ..> [Log4j Core] : forwards to
- [JPL-to-Log4j] #Yellow
-
- [SLF4J-to-Log4j] ..> [Log4j Core] : forwards to
- [SLF4J-to-Log4j] #Yellow
-
- [JUL-to-Log4j] ..> [Log4j Core] : forwards to
- [JUL-to-Log4j] #Yellow
-
- frame JRE {
- [JPL] #Cyan
- [JUL] #Cyan
- }
-
-}
-
-[Library 2] --> [JUL] : logs to
-[Library 3] --> [JPL] : logs to
-
-[JPL] ..> [JPL-to-Log4j] : is implemented by
-[JUL] ..> [JUL-to-Log4j] : is implemented by
-[SLF4J] ..> [SLF4J-to-Log4j] : is implemented by
-
-legend top right
- | <#LightGreen> | Logging implementation |
- | <#Yellow> | Logging bridge |
- | <#Cyan> | Logging API |
- | <size:18><U+2192></size> | Compile-time usage |
- | <size:18><U+21E2></size> | Runtime usage |
-endlegend
-
-@enduml</pre>
+<img src="_images/diag-a51b68065f249459078382aa4c61888857f01b2c.svg"
alt="Visualization of a typical Log4j Core installation with SLF4J, JUL, and
JPL bridges">
</div>
+<div class="title">Figure 1. Visualization of a typical Log4j Core
installation with SLF4J, JUL, and JPL bridges</div>
</div>
</div>
</details>
diff --git a/hibernate.html b/hibernate.html
index ef14ecd757..b126452ec4 100644
--- a/hibernate.html
+++ b/hibernate.html
@@ -397,63 +397,11 @@ For instance, <code>log4j-slf4j2-impl</code>
<em>bridges</em> SLF4J calls to Log
<div class="paragraph">
<p>To make things a little bit more tangible, consider the following
visualization of a typical Log4j Core installation with bridges for an
application:</p>
</div>
-<div class="literalblock kroki-error">
-<div class="title">Visualization of a typical Log4j Core installation with
SLF4J, JUL, and JPL bridges</div>
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-frame "Compile time" {
- [Application] --> [Log4j API] : logs to
-
- [Log4j API] #Cyan
-
- [SLF4J] #Cyan
-
- [Library 1] --> [SLF4J] : logs to
- [Application] --> [Library 1] : uses
- [Application] --> [Library 2] : uses
- [Application] --> [Library 3] : uses
-}
-
-frame Runtime {
-
- [Log4j Core] <.. [Log4j API] : is implemented by
- [Log4j Core] <.. (log4j2.xml) : is provided to
- [Log4j Core] #LightGreen
-
- [JPL-to-Log4j] ..> [Log4j Core] : forwards to
- [JPL-to-Log4j] #Yellow
-
- [SLF4J-to-Log4j] ..> [Log4j Core] : forwards to
- [SLF4J-to-Log4j] #Yellow
-
- [JUL-to-Log4j] ..> [Log4j Core] : forwards to
- [JUL-to-Log4j] #Yellow
-
- frame JRE {
- [JPL] #Cyan
- [JUL] #Cyan
- }
-
-}
-
-[Library 2] --> [JUL] : logs to
-[Library 3] --> [JPL] : logs to
-
-[JPL] ..> [JPL-to-Log4j] : is implemented by
-[JUL] ..> [JUL-to-Log4j] : is implemented by
-[SLF4J] ..> [SLF4J-to-Log4j] : is implemented by
-
-legend top right
- | <#LightGreen> | Logging implementation |
- | <#Yellow> | Logging bridge |
- | <#Cyan> | Logging API |
- | <size:18><U+2192></size> | Compile-time usage |
- | <size:18><U+21E2></size> | Runtime usage |
-endlegend
-
-@enduml</pre>
+<img src="_images/diag-a51b68065f249459078382aa4c61888857f01b2c.svg"
alt="Visualization of a typical Log4j Core installation with SLF4J, JUL, and
JPL bridges">
</div>
+<div class="title">Figure 1. Visualization of a typical Log4j Core
installation with SLF4J, JUL, and JPL bridges</div>
</div>
</div>
</details>
diff --git a/log4j-jul.html b/log4j-jul.html
index 6231f665cc..d9d46b7eb1 100644
--- a/log4j-jul.html
+++ b/log4j-jul.html
@@ -420,63 +420,11 @@ For instance, <code>log4j-slf4j2-impl</code>
<em>bridges</em> SLF4J calls to Log
<div class="paragraph">
<p>To make things a little bit more tangible, consider the following
visualization of a typical Log4j Core installation with bridges for an
application:</p>
</div>
-<div class="literalblock kroki-error">
-<div class="title">Visualization of a typical Log4j Core installation with
SLF4J, JUL, and JPL bridges</div>
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-frame "Compile time" {
- [Application] --> [Log4j API] : logs to
-
- [Log4j API] #Cyan
-
- [SLF4J] #Cyan
-
- [Library 1] --> [SLF4J] : logs to
- [Application] --> [Library 1] : uses
- [Application] --> [Library 2] : uses
- [Application] --> [Library 3] : uses
-}
-
-frame Runtime {
-
- [Log4j Core] <.. [Log4j API] : is implemented by
- [Log4j Core] <.. (log4j2.xml) : is provided to
- [Log4j Core] #LightGreen
-
- [JPL-to-Log4j] ..> [Log4j Core] : forwards to
- [JPL-to-Log4j] #Yellow
-
- [SLF4J-to-Log4j] ..> [Log4j Core] : forwards to
- [SLF4J-to-Log4j] #Yellow
-
- [JUL-to-Log4j] ..> [Log4j Core] : forwards to
- [JUL-to-Log4j] #Yellow
-
- frame JRE {
- [JPL] #Cyan
- [JUL] #Cyan
- }
-
-}
-
-[Library 2] --> [JUL] : logs to
-[Library 3] --> [JPL] : logs to
-
-[JPL] ..> [JPL-to-Log4j] : is implemented by
-[JUL] ..> [JUL-to-Log4j] : is implemented by
-[SLF4J] ..> [SLF4J-to-Log4j] : is implemented by
-
-legend top right
- | <#LightGreen> | Logging implementation |
- | <#Yellow> | Logging bridge |
- | <#Cyan> | Logging API |
- | <size:18><U+2192></size> | Compile-time usage |
- | <size:18><U+21E2></size> | Runtime usage |
-endlegend
-
-@enduml</pre>
+<img src="_images/diag-a51b68065f249459078382aa4c61888857f01b2c.svg"
alt="Visualization of a typical Log4j Core installation with SLF4J, JUL, and
JPL bridges">
</div>
+<div class="title">Figure 1. Visualization of a typical Log4j Core
installation with SLF4J, JUL, and JPL bridges</div>
</div>
</div>
</details>
diff --git a/manual/appenders/rolling-file.html
b/manual/appenders/rolling-file.html
index 1fa8005550..47cb26af7c 100644
--- a/manual/appenders/rolling-file.html
+++ b/manual/appenders/rolling-file.html
@@ -1611,50 +1611,9 @@ It is <strong>not</strong> the default strategy of Log4j
2.</p>
<div class="paragraph">
<p>Assuming <code>min="1"</code> and <code>max="3"</code> the rotation of the
log files is represented in the graph below:</p>
</div>
-<div class="literalblock kroki-error">
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-class "Initial status" as initial {
- <color:green>app.log</color>
-}
-class "1st rollover" as first {
- <color:green>app.log</color>
- app.1.log
-}
-class "2nd rollover" as second {
- <color:green>app.log</color>
- app.1.log
- app.2.log
-}
-class "3rd rollover" as third {
- <color:green>app.log</color>
- app.1.log
- app.2.log
- app.3.log
-}
-class "4th rollover" as fourth {
- <color:green>app.log</color>
- app.1.log
- app.2.log
- app.3.log
-}
-
-object "Delete file" as delete
-
-initial::app.log -> first::app.1.log
-
-first::app.log -> second::app.1.log
-first::app.1.log -> second::app.2.log
-
-second::app.log -> third::app.1.log
-second::app.1.log -> third::app.2.log
-second::app.2.log -> third::app.3.log
-
-third::app.log -> fourth::app.1.log
-third::app.1.log -> fourth::app.2.log
-third::app.2.log -> fourth::app.3.log
-third::app.3.log -[#red]-> delete
-@enduml</pre>
+<img src="../../_images/diag-d5122741a680d765fa3170a444015b615a1fdafd.svg"
alt="Diagram">
</div>
</div>
</dd>
@@ -1682,50 +1641,9 @@ third::app.3.log -[#red]-> delete
<div class="paragraph">
<p>Assuming <code>min="1"</code> and <code>max="3"</code> the rotation of the
log files is represented in the graph below:</p>
</div>
-<div class="literalblock kroki-error">
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-class "Initial status" as initial {
- <color:green>app.log</color>
-}
-class "1st rollover" as first {
- <color:green>app.log</color>
- app.1.log
-}
-class "2nd rollover" as second {
- <color:green>app.log</color>
- app.1.log
- app.2.log
-}
-class "3rd rollover" as third {
- <color:green>app.log</color>
- app.1.log
- app.2.log
- app.3.log
-}
-class "4th rollover" as fourth {
- <color:green>app.log</color>
- app.1.log
- app.2.log
- app.3.log
-}
-
-object "Delete file" as delete
-
-initial::app.log -> first::app.1.log
-
-first::app.log -> second::app.2.log
-first::app.1.log -> second::app.1.log
-
-second::app.log -> third::app.3.log
-second::app.1.log -> third::app.1.log
-second::app.2.log -> third::app.2.log
-
-third::app.log -> fourth::app.3.log
-third::app.1.log -[#red]-> delete
-third::app.2.log -> fourth::app.1.log
-third::app.3.log -> fourth::app.2.log
-@enduml</pre>
+<img src="../../_images/diag-35cc4e8101ffe76d0edc44ed334a6273018dc51b.svg"
alt="Diagram">
</div>
</div>
</dd>
@@ -1738,49 +1656,9 @@ third::app.3.log -> fourth::app.2.log
<div class="paragraph">
<p>Using the <code>nomax</code> strategy no files will ever be deleted and
newer archive files will be assigned increasing index numbers, starting from
<code>min</code>.</p>
</div>
-<div class="literalblock kroki-error">
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-class "Initial status" as initial {
- <color:green>app.log</color>
-}
-class "1st rollover" as first {
- <color:green>app.log</color>
- app.1.log
-}
-class "2nd rollover" as second {
- <color:green>app.log</color>
- app.1.log
- app.2.log
-}
-class "3rd rollover" as third {
- <color:green>app.log</color>
- app.1.log
- app.2.log
- app.3.log
-}
-class "4th rollover" as fourth {
- <color:green>app.log</color>
- app.1.log
- app.2.log
- app.3.log
- app.4.log
-}
-
-initial::app.log -> first::app.1.log
-
-first::app.log -> second::app.2.log
-first::app.1.log -> second::app.1.log
-
-second::app.log -> third::app.3.log
-second::app.1.log -> third::app.1.log
-second::app.2.log -> third::app.2.log
-
-third::app.log -> fourth::app.4.log
-third::app.1.log -> fourth::app.1.log
-third::app.2.log -> fourth::app.2.log
-third::app.3.log -> fourth::app.3.log
-@enduml</pre>
+<img src="../../_images/diag-768e5e02508ea736d8901892b519a6d3a7a770ab.svg"
alt="Diagram">
</div>
</div>
</dd>
diff --git a/manual/architecture.html b/manual/architecture.html
index 3846fe94f8..fc4a1072a7 100644
--- a/manual/architecture.html
+++ b/manual/architecture.html
@@ -361,146 +361,11 @@
In this section we will try to explain major pillars its architecture stands
on.
An overview these major classes can be depicted as follows:</p>
</div>
-<div id="architecture-diagram" class="literalblock kroki-error">
-<div class="title">An overview of major classes and their relation</div>
+<div id="architecture-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-class LoggerContext {
- Configuration config
- Logger[] loggers
- Logger getLogger(String name)
-}
-
-note left of LoggerContext {
- Anchor for the logging system
-}
-
-LoggerContext --> "0..*" Logger
-
-package "Configuration" as c {
-
- class Configuration {
- Appender[] appenders
- Filter filter
- LoggerConfig[] loggerConfigs
- LoggerConfig getLoggerConfig(String name)
- StrSubstitutor substitutor
- }
-
- note left of Configuration
- Encapsulates components compiled
- from a user-provided configuration
- file (e.g., `log4j2.xml`)
- end note
-
- Configuration --> Filter
-
- Configuration --> "0..*" Appender
-
- Configuration --> "0..*" LoggerConfig
-
- Configuration --> StrSubstitutor
-
- class Appender {
- AbstractManager manager
- Layout layout
- Filter filter
- void append(LogEvent)
- }
-
- Appender --> Layout
-
- Appender --> Filter
-
- class Layout {
- byte[] encode(LogEvent)
- }
-
- class Filter {
- Result filter(LogEvent)
- }
-
- note right of Filter
- Note that a `Filter` can
- be provided at 4 levels:
- 1. `Configuration`
- 2. `LoggerConfig`
- 3. `AppenderControl`
- 4. `Appender`
- end note
-
- class LoggerConfig {
- AppenderControl[] appenderControls
- Level level
- Filter filter
- void log(LogEvent)
- }
-
- LoggerConfig -[#green,thickness=6]-> "0..*" AppenderControl
-
- LoggerConfig --> Filter
-
- class AppenderControl {
- Appender appender
- Filter filter
- void append(LogEvent)
- }
-
- note right of AppenderControl
- Decorates an `Appender`
- with a `Filter`
- end note
-
- AppenderControl -[#green,thickness=6]-> Appender
-
- AppenderControl --> Filter
-
- class StrSubstitutor {
- Interpolator interpolator
- String replace(String input)
- }
-
- note right of StrSubstitutor
- Responsible for
- property substitution
- (e.g., `${env:USER}`)
- end note
-
- StrSubstitutor --> Interpolator
-
- class Interpolator {
- StrLookup[] lookups
- String lookup(String input)
- }
-
- Interpolator --> "0..*" StrLookup
-
- class StrLookup {
- String lookup(String input)
- }
-}
-
-LoggerContext --> Configuration
-
-class Logger {
- void log(Level level, Message message)
-}
-
-note right of Logger
- The main API entry point
- users interact with
-end note
-
-Logger -[#green,thickness=6]-> LoggerConfig : delegates `log()`
-
-class AbstractManager {
-}
-
-Appender -[#green,thickness=6]-> AbstractManager
-
-@enduml</pre>
+<img src="../_images/diag-3f8a04c810525cc09a5e7564abf3aa14ed1f7c81.svg"
alt="An overview of major classes and their relation">
</div>
+<div class="title">Figure 1. An overview of major classes and their
relation</div>
</div>
<div class="paragraph">
<p>At a high level,</p>
@@ -524,7 +389,7 @@ Both can be created directly (i.e., programmatically) or
indirectly at first int
<p><a href="#Configuration"><code>Configuration</code></a> is equipped with <a
href="#StrSubstitutor"><code>StrSubstitutor</code> et al.</a> to allow property
substitution in <code>String</code>-typed values.</p>
</li>
<li>
-<p>A typical <code>log()</code> call triggers a chain of invocations through
classes <code>Logger</code>, <code>LoggerConfig</code>,
<code>AppenderControl</code>, <code>Appender</code>, and
<code>AbstractManager</code> in order – this is depicted using green arrows in
<a href="#architecture-diagram">An overview of major classes and their
relation</a>.</p>
+<p>A typical <code>log()</code> call triggers a chain of invocations through
classes <code>Logger</code>, <code>LoggerConfig</code>,
<code>AppenderControl</code>, <code>Appender</code>, and
<code>AbstractManager</code> in order – this is depicted using green arrows in
<a href="#architecture-diagram">Figure 1</a>.</p>
</li>
</ul>
</div>
@@ -540,35 +405,11 @@ Both can be created directly (i.e., programmatically) or
indirectly at first int
<p>The <a
href="../javadoc/log4j-api/org/apache/logging/log4j/spi/LoggerContext.html"><code>LoggerContext</code></a>
acts as the anchor point for the logging system.
It is associated with an active <a
href="#Configuration"><code>Configuration</code></a> and is primarily
responsible for instantiating <a href="#Logger"><code>Logger</code></a>s.</p>
</div>
-<div id="LoggerContext-diagram" class="literalblock kroki-error">
-<div class="title"><code>LoggerContext</code> and other directly related
classes</div>
+<div id="LoggerContext-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-class LoggerContext #line.bold {
- Configuration config
- Logger[] loggers
- Logger getLogger(String name)
-}
-
-LoggerContext --> Configuration
-
-LoggerContext --> "0..*" Logger
-
-class Configuration {
- Appender[] appenders
- Filter filter
- LoggerConfig[] loggerConfigs
- LoggerConfig getLoggerConfig(String name)
- StrSubstitutor substitutor
-}
-
-class Logger {
- void log(Level level, Message message)
-}
-
-@enduml</pre>
+<img src="../_images/diag-fd71b342bbb89cd55a1ddb592976b9ac26b6348e.svg"
alt="`LoggerContext` and other directly related classes">
</div>
+<div class="title">Figure 2. <code>LoggerContext</code> and other directly
related classes</div>
</div>
<div class="paragraph">
<p>In most cases, applications have a single global <code>LoggerContext</code>.
@@ -584,58 +425,11 @@ Refer to <a href="../jakarta.html#log-separation"
class="xref page">Log Separati
<p>Every <a href="#LoggerContext"><code>LoggerContext</code></a> is associated
with an active <a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/config/Configuration.html"><code>Configuration</code></a>.
It models the configuration of all appenders, layouts, filters, loggers, and
contains the reference to <a href="#StrSubstitutor"><code>StrSubstitutor</code>
et al.</a>.</p>
</div>
-<div id="Configuration-diagram" class="literalblock kroki-error">
-<div class="title"><code>Configuration</code> and other directly related
classes</div>
+<div id="Configuration-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-class LoggerContext {
- Configuration config
- Logger[] loggers
- Logger getLogger(String name)
-}
-
-LoggerContext --> Configuration
-
-class Configuration #line.bold {
- Appender[] appenders
- Filter filter
- LoggerConfig[] loggerConfigs
- LoggerConfig getLoggerConfig(String name)
- StrSubstitutor substitutor
-}
-
-Configuration --> "0..*" Filter
-
-Configuration --> "0..*" Appender
-
-Configuration --> "0..*" LoggerConfig
-
-Configuration --> StrSubstitutor
-
-class Appender {
- Layout layout
- void append(LogEvent)
-}
-
-class Filter {
- Result filter(LogEvent)
-}
-
-class LoggerConfig {
- AppenderRef[] appenderRefs
- AppenderControl[] appenderControls
- Level level
- Filter filter
- void log(LogEvent)
-}
-
-class StrSubstitutor {
- Interpolator interpolator
- String replace(String input)
-}
-@enduml</pre>
+<img src="../_images/diag-5ffe377615be9b0375b26533bbf7b10507dc946b.svg"
alt="`Configuration` and other directly related classes">
</div>
+<div class="title">Figure 3. <code>Configuration</code> and other directly
related classes</div>
</div>
<div class="paragraph">
<p>Configuration of Log4j Core is typically done at application initialization.
@@ -672,41 +466,11 @@ Threads that already started processing a log event will
either:</p>
</li>
</ul>
</div>
-<div class="literalblock kroki-error">
-<div class="title">Overview of the reconfiguration process</div>
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-left to right direction
-
-package LoggerContext {
- object Logger
-
- package "New Configuration" as c2 {
- object "LoggerConfig" as lc2
- object "AppenderControl" as ac2
- object "Appender" as app2
- }
-
- package "Old Configuration" as c1 {
- object "LoggerConfig" as lc1
- object "AppenderControl" as ac1
- object "Appender" as app1
- }
-}
-
-object AbstractManager
-
-Logger ..> lc1
-lc1 --> ac1
-ac1 --> app1
-app1 --> AbstractManager
-
-Logger --> lc2
-lc2 --> ac2
-ac2 --> app2
-app2 --> AbstractManager
-@enduml</pre>
+<img src="../_images/diag-01168003b98f120d2f0736e5172de8e1218f189e.svg"
alt="Overview of the reconfiguration process">
</div>
+<div class="title">Figure 4. Overview of the reconfiguration process</div>
</div>
</div>
</div>
@@ -720,35 +484,11 @@ They are created by calling one of the
<code>getLogger()</code> methods of <a hr
The <code>Logger</code> itself performs no direct actions.
It simply has a name and is associated with a <a
href="#LoggerConfig"><code>LoggerConfig</code></a>.</p>
</div>
-<div id="Logger-diagram" class="literalblock kroki-error">
-<div class="title"><code>Logger</code> and other directly related classes</div>
+<div id="Logger-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-class LoggerContext {
- Configuration config
- Logger[] loggers
- Logger getLogger(String name)
-}
-
-LoggerContext --> "0..*" Logger
-
-class LoggerConfig {
- AppenderRef[] appenderRefs
- AppenderControl[] appenderControls
- Level level
- Filter filter
- void log(LogEvent)
-}
-
-class Logger #line.bold {
- void log(Level level, Message message)
-}
-
-Logger -[#green,thickness=6]-> LoggerConfig : delegates `log()`
-
-@enduml</pre>
+<img src="../_images/diag-77a13b00749af95e3ed0eefd605a73f25d70973c.svg"
alt="`Logger` and other directly related classes">
</div>
+<div class="title">Figure 5. <code>Logger</code> and other directly related
classes</div>
</div>
<div class="paragraph">
<p>The hierarchy between <a
href="#LoggerConfig"><code>LoggerConfig</code></a>s, implies the very same
hierarchy between <code>Logger</code>s too.
@@ -786,59 +526,11 @@ A <code>LoggerConfig</code> essentially contains</p>
</li>
</ul>
</div>
-<div id="LoggerConfig-diagram" class="literalblock kroki-error">
-<div class="title"><code>LoggerConfig</code> and other directly related
classes</div>
+<div id="LoggerConfig-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-class Configuration {
- Appender[] appenders
- Filter filter
- LoggerConfig[] loggerConfigs
- LoggerConfig getLoggerConfig(String name)
- StrSubstitutor substitutor
-}
-
-Configuration --> "0..*" LoggerConfig
-
-class Filter {
- Result filter(LogEvent)
-}
-
-class LoggerConfig #line.bold {
- AppenderRef[] appenderRefs
- AppenderControl[] appenderControls
- Level level
- Filter filter
- void log(LogEvent)
-}
-
-LoggerConfig --> "0..*" AppenderRef
-
-LoggerConfig -[#green,thickness=6]-> "0..*" AppenderControl
-
-LoggerConfig --> Filter
-
-class AppenderRef {
- String appenderName
- Level level
- Filter filter
-}
-
-class AppenderControl {
- Appender appender
- Filter filter
- void append(LogEvent)
-}
-
-class Logger {
- void log(Level level, Message message)
-}
-
-Logger -[#green,thickness=6]-> LoggerConfig : delegates `log()`
-
-@enduml</pre>
+<img src="../_images/diag-73365a4d8197b5441a98fd1d661b07760da178be.svg"
alt="`LoggerConfig` and other directly related classes">
</div>
+<div class="title">Figure 6. <code>LoggerConfig</code> and other directly
related classes</div>
</div>
<div class="sect2">
<h3 id="logger-hierarchy"><a class="anchor"
href="#logger-hierarchy"></a>Logger hierarchy</h3>
@@ -847,19 +539,13 @@ Logger -[#green,thickness=6]-> LoggerConfig :
delegates `log()`
A <code>LoggerConfig</code> called <code>child</code> is said to be parented
by <code>parent</code>, if <code>parent</code> has the <em>longest prefix
match</em> on name.
This match is case-sensitive and performed after tokenizing the name by
splitting it from <code>.</code> (dot) characters.
For a positive name match, tokens must match exhaustively.
-See <a href="#logger-hiearchy-diagram">Example hierarchy of loggers named
<code>X</code>, <code>X.Y</code>, <code>X.Y.Z</code>, and <code>X.YZ</code></a>
for an example.</p>
+See <a href="#logger-hiearchy-diagram">Figure 7</a> for an example.</p>
</div>
-<div id="logger-hiearchy-diagram" class="literalblock kroki-error">
-<div class="title">Example hierarchy of loggers named <code>X</code>,
<code>X.Y</code>, <code>X.Y.Z</code>, and <code>X.YZ</code></div>
+<div id="logger-hiearchy-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startmindmap
-* root
-** X
-*** X.Y
-**** X.Y.Z
-*** X.YZ
-@endmindmap</pre>
+<img src="../_images/diag-892fd9dbd9ea6bece55c1d4078ae1de2edd5c689.svg"
alt="Example hierarchy of loggers named `X`, `X.Y`, `X.Y.Z`, and `X.YZ`">
</div>
+<div class="title">Figure 7. Example hierarchy of loggers named
<code>X</code>, <code>X.Y</code>, <code>X.Y.Z</code>, and
<code>X.YZ</code></div>
</div>
<div class="paragraph">
<p>If a <code>LoggerConfig</code> is not provided an explicit level, it will
be inherited from its parent.
@@ -1101,57 +787,11 @@ That is, we will examine the effective level of a
<code>Logger</code> in various
<div class="paragraph">
<p>In addition to <a href="#LoggerConfig">the level-based filtering
facilitated by <code>LoggerConfig</code></a>, Log4j provides <a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/Filter.html"><code>Filter</code></a>s
to evaluate the parameters of a logging call (i.e., context-wide filter) or a
log event, and decide if it should be processed further in the pipeline.</p>
</div>
-<div id="Filter-diagram" class="literalblock kroki-error">
-<div class="title"><code>Filter</code> and other directly related classes</div>
+<div id="Filter-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-class Configuration {
- Appender[] appenders
- Filter filter
- LoggerConfig[] loggerConfigs
- LoggerConfig getLoggerConfig(String name)
- StrSubstitutor substitutor
-}
-
-Configuration --> Filter
-
-Configuration --> "0..*" LoggerConfig
-
-class Filter #line.bold {
- Result filter(LogEvent)
-}
-
-class LoggerConfig {
- AppenderRef[] appenderRefs
- AppenderControl[] appenderControls
- Level level
- Filter filter
- void log(LogEvent)
-}
-
-LoggerConfig --> "0..*" AppenderRef
-
-LoggerConfig -[#green,thickness=6]-> "0..*" AppenderControl
-
-LoggerConfig --> Filter
-
-class AppenderRef {
- String appenderName
- Level level
- Filter filter
-}
-
-class AppenderControl {
- Filter filter
-}
-
-AppenderRef --> Filter
-
-AppenderControl --> Filter
-
-@enduml</pre>
+<img src="../_images/diag-581e854ee8ecdb00104bac5affda10a653d8f76d.svg"
alt="`Filter` and other directly related classes">
</div>
+<div class="title">Figure 8. <code>Filter</code> and other directly related
classes</div>
</div>
<div class="paragraph">
<p>Refer to <a href="filters.html" class="xref page">Filters</a> for further
information.</p>
@@ -1166,74 +806,11 @@ AppenderControl --> Filter
While doing so, they typically use <a href="#Layout"><code>Layout</code></a>s
to encode the log event.
See <a href="appenders.html" class="xref page">Appenders</a> for the complete
guide.</p>
</div>
-<div id="Appender-diagram" class="literalblock kroki-error">
-<div class="title"><code>Appender</code> and other directly related
classes</div>
+<div id="Appender-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-class Configuration {
- Appender[] appenders
- Filter filter
- LoggerConfig[] loggerConfigs
- LoggerConfig getLoggerConfig(String name)
- StrSubstitutor substitutor
-}
-
-Configuration --> "0..*" Filter
-
-Configuration --> "0..*" Appender
-
-Configuration --> "0..*" LoggerConfig
-
-class Appender #line.bold {
- Layout layout
- void append(LogEvent)
-}
-
-Appender -[#green,thickness=6]-> Layout
-
-class Layout {
- byte[] encode(LogEvent)
-}
-
-class Filter {
- Result filter(LogEvent)
-}
-
-class LoggerConfig {
- AppenderRef[] appenderRefs
- AppenderControl[] appenderControls
- Level level
- Filter filter
- void log(LogEvent)
-}
-
-LoggerConfig --> "0..*" AppenderRef
-
-LoggerConfig -[#green,thickness=6]-> "0..*" AppenderControl
-
-LoggerConfig --> Filter
-
-class AppenderRef {
- String appenderName
- Level level
- Filter filter
-}
-
-AppenderRef --> Filter
-
-class AppenderControl {
- Appender appender
- Filter filter
- void append(LogEvent)
-}
-
-AppenderControl -[#green,thickness=6]-> Appender
-
-AppenderControl --> Filter
-
-@enduml</pre>
+<img src="../_images/diag-63d449f3bcd24cfa522a41f6e2f545416de30322.svg"
alt="`Appender` and other directly related classes">
</div>
+<div class="title">Figure 9. <code>Appender</code> and other directly related
classes</div>
</div>
<div class="paragraph">
<p>An <code>Appender</code> can be added to a <a
href="#Logger"><code>Logger</code></a> by calling the <a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/config/Configuration.html#addLoggerAppender(org.apache.logging.log4j.core.Logger,%20org.apache.logging.log4j.core.Appender)"><code>addLoggerAppender()</code></a>
method of the current <a href="#Configuration"><code>Configuration</code></a>.
@@ -1256,25 +833,17 @@ However, if an ancestor of the <code>LoggerConfig</code>
associated with <code>L
<details>
<summary class="title">Click for an example on appender additivity</summary>
<div class="content">
-<div id="appender-additivity-diagram" class="literalblock kroki-error">
-<div class="title">Example hierarchy of logger configurations to demonstrate
appender additivity</div>
+<div id="appender-additivity-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startmindmap
-* root
-** A
-*** A.B1 (additivity=false)
-**** A.B1.C
-***** A.B1.C.D
-*** A.B2.C
-**** A.B2.C.D (additivity=false)
-@endmindmap</pre>
+<img src="../_images/diag-58c484caf8cd616db4f1c7ed31b51c123b5859d4.svg"
alt="Example hierarchy of logger configurations to demonstrate appender
additivity">
</div>
+<div class="title">Figure 10. Example hierarchy of logger configurations to
demonstrate appender additivity</div>
</div>
<div class="paragraph">
-<p>In <a href="#appender-additivity-diagram">Example hierarchy of logger
configurations to demonstrate appender additivity</a>, the effective appenders
for each logger configuration are as follows:</p>
+<p>In <a href="#appender-additivity-diagram">Figure 10</a>, the effective
appenders for each logger configuration are as follows:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
-<caption class="title">Table 6. Effective appenders of logger configurations
in <a href="#appender-additivity-diagram">Example hierarchy of logger
configurations to demonstrate appender additivity</a></caption>
+<caption class="title">Table 6. Effective appenders of logger configurations
in <a href="#appender-additivity-diagram">Figure 10</a></caption>
<colgroup>
<col style="width: 14.2857%;">
<col style="width: 14.2857%;">
@@ -1406,24 +975,11 @@ Since during a <a
href="#reconfiguration">reconfiguration event</a> multiple ins
<div class="paragraph">
<p>An <a href="#Appender"><code>Appender</code></a> uses a
<strong>layout</strong> to encode a <a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/LogEvent.html"><code>LogEvent</code></a>
into a form that meets the needs of whatever will be consuming the log
event.</p>
</div>
-<div id="Layout-diagram" class="literalblock kroki-error">
-<div class="title"><code>Layout</code> and other directly related classes</div>
+<div id="Layout-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-class Appender {
- Layout layout
- void append(LogEvent)
-}
-
-Appender -[#green,thickness=6]-> Layout
-
-class Layout #line.bold {
- byte[] encode(LogEvent)
-}
-
-@enduml</pre>
+<img src="../_images/diag-232cdf1d44336897239fa03f6521cc730f38f32d.svg"
alt="`Layout` and other directly related classes">
</div>
+<div class="title">Figure 11. <code>Layout</code> and other directly related
classes</div>
</div>
<div class="paragraph">
<p>Refer to <a href="layouts.html" class="xref page">Layouts</a> for
details.</p>
@@ -1438,41 +994,11 @@ class Layout #line.bold {
It accepts an <a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/lookup/Interpolator.html"><code>Interpolator</code></a>
to determine if a key maps to a certain value.
<code>Interpolator</code> is essentially a facade delegating to multiple <a
href="../javadoc/log4j-core/org/apache/logging/log4j/core/lookup/StrLookup.html"><code>StrLookup</code></a>
(aka. <em>lookup</em>) implementations.</p>
</div>
-<div id="StrSubstitutor-diagram" class="literalblock kroki-error">
-<div class="title"><code>StrSubstitutor</code> et al. and other directly
related classes</div>
+<div id="StrSubstitutor-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-class Configuration {
- Appender[] appenders
- Filter[] filters
- LoggerConfig[] loggerConfigs
- LoggerConfig getLoggerConfig(String name)
- StrSubstitutor substitutor
-}
-
-Configuration --> StrSubstitutor
-
-class StrSubstitutor #line.bold {
- Interpolator interpolator
- String replace(String input)
-}
-
-StrSubstitutor --> Interpolator
-
-class Interpolator {
- StrLookup[] lookups
- String lookup(String input)
-}
-
-Interpolator --> "0..*" StrLookup
-
-class StrLookup {
- String lookup(String input)
-}
-
-@enduml</pre>
+<img src="../_images/diag-7a08e5a79432e9299cc0d9671bd39677be5618e8.svg"
alt="`StrSubstitutor` et al. and other directly related classes">
</div>
+<div class="title">Figure 12. <code>StrSubstitutor</code> et al. and other
directly related classes</div>
</div>
<div class="paragraph">
<p>See <a href="configuration.html#property-substitution" class="xref
page">how property substitution works</a> and <a href="lookups.html"
class="xref page">the predefined lookups</a> for further information.</p>
diff --git a/manual/filters.html b/manual/filters.html
index 230abb75a0..845974519d 100644
--- a/manual/filters.html
+++ b/manual/filters.html
@@ -454,31 +454,9 @@ e.g., log event creation, population of context data,
formatting, transfer throu
</div>
<div class="sect2">
<h3 id="logger-stage"><a class="anchor" href="#logger-stage"></a>1.
<code>Logger</code> stage</h3>
-<div class="literalblock kroki-error">
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-start
-group Logger
-
-:A Logger method;
-
-switch (Apply global filter)
-case (DENY)
- #pink:Discard;
- detach
-case (ACCEPT)
-case (NEUTRAL)
- if (Is less severe than logger level?) then (yes)
- #pink:Discard;
- detach
- else (no)
- ' The label improves spacing
- label a1
- endif
-endswitch
-end group
-:Create LogEvent;
-stop</pre>
+<img src="../_images/diag-2158b7cc88b372c32a9592f8cdbc1cc926bb8b80.svg"
alt="Diagram">
</div>
</div>
<div class="paragraph">
@@ -550,29 +528,9 @@ or
</div>
<div class="sect2">
<h3 id="logger-config-stage"><a class="anchor"
href="#logger-config-stage"></a>2. <code>LoggerConfig</code> stage</h3>
-<div class="literalblock kroki-error">
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-start
-:LogEvent;
-
-group LoggerConfig
-repeat
-
-:LoggerConfig#log();
-
-if (Apply logger filter) then (DENY)
- #pink:Discard;
- detach
-else (not DENY)
- ' The label improves spacing
- label a1
-endif
-repeat while (Go to parent logger?) is (yes)
--> no;
-end group
-stop
-@enduml</pre>
+<img src="../_images/diag-4d55aeb99a0ae8707b4121b1f76e9544af16b3c4.svg"
alt="Diagram">
</div>
</div>
<div class="paragraph">
@@ -587,33 +545,9 @@ until it reaches the logger that references the chosen
appender.</p>
</div>
<div class="sect2">
<h3 id="appender-control-stage"><a class="anchor"
href="#appender-control-stage"></a>3. <code>AppenderControl</code> stage</h3>
-<div class="literalblock kroki-error">
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-start
-:LogEvent;
-
-group AppenderControl
-
-:AppenderControl#callAppender();
-
-if (Is less severe then appender reference level?) then (yes)
- #pink:Discard;
- detach
-else (no)
- ' The label improves spacing
- label a2
-endif
-if (Apply appender reference filter) then (DENY)
- #pink:Discard;
- detach
-else (not DENY)
- ' The label improves spacing
- label a1
-endif
-end group
-stop
-@enduml</pre>
+<img src="../_images/diag-0c23746e246efa4a462049e2adc4b0349185aa77.svg"
alt="Diagram">
</div>
</div>
<div class="paragraph">
@@ -634,24 +568,9 @@ of the appender reference.</p>
</div>
<div class="sect2">
<h3 id="appender-stage"><a class="anchor" href="#appender-stage"></a>4.
<code>Appender</code> stage (optional)</h3>
-<div class="literalblock kroki-error">
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-start
-:LogEvent;
-
-group Appender
-
-if (Apply appender filter) then (DENY)
- #pink:Discard;
- detach
-else (not DENY)
- ' The label improves spacing
- label a1
-endif
-end group
-#palegreen:Appender#append();
-@enduml</pre>
+<img src="../_images/diag-a15d9b3aaacbf863f81fe0dcb0ed21346b6c46ed.svg"
alt="Diagram">
</div>
</div>
<div class="paragraph">
diff --git a/manual/installation.html b/manual/installation.html
index 4796a53f03..4680432168 100644
--- a/manual/installation.html
+++ b/manual/installation.html
@@ -462,63 +462,11 @@ In this case, you need to install <code>log4j-core</code>
and <code>log4j-slf4j2
<div class="paragraph">
<p>To make things a little bit more tangible, consider the following
visualization of a typical Log4j Core installation with bridges for an
application:</p>
</div>
-<div class="literalblock kroki-error">
-<div class="title">Visualization of a typical Log4j Core installation with
SLF4J, JUL, and JPL bridges</div>
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-frame "Compile time" {
- [Application] --> [Log4j API] : logs to
-
- [Log4j API] #Cyan
-
- [SLF4J] #Cyan
-
- [Library 1] --> [SLF4J] : logs to
- [Application] --> [Library 1] : uses
- [Application] --> [Library 2] : uses
- [Application] --> [Library 3] : uses
-}
-
-frame Runtime {
-
- [Log4j Core] <.. [Log4j API] : is implemented by
- [Log4j Core] <.. (log4j2.xml) : is provided to
- [Log4j Core] #LightGreen
-
- [JPL-to-Log4j] ..> [Log4j Core] : forwards to
- [JPL-to-Log4j] #Yellow
-
- [SLF4J-to-Log4j] ..> [Log4j Core] : forwards to
- [SLF4J-to-Log4j] #Yellow
-
- [JUL-to-Log4j] ..> [Log4j Core] : forwards to
- [JUL-to-Log4j] #Yellow
-
- frame JRE {
- [JPL] #Cyan
- [JUL] #Cyan
- }
-
-}
-
-[Library 2] --> [JUL] : logs to
-[Library 3] --> [JPL] : logs to
-
-[JPL] ..> [JPL-to-Log4j] : is implemented by
-[JUL] ..> [JUL-to-Log4j] : is implemented by
-[SLF4J] ..> [SLF4J-to-Log4j] : is implemented by
-
-legend top right
- | <#LightGreen> | Logging implementation |
- | <#Yellow> | Logging bridge |
- | <#Cyan> | Logging API |
- | <size:18><U+2192></size> | Compile-time usage |
- | <size:18><U+21E2></size> | Runtime usage |
-endlegend
-
-@enduml</pre>
+<img src="../_images/diag-a51b68065f249459078382aa4c61888857f01b2c.svg"
alt="Visualization of a typical Log4j Core installation with SLF4J, JUL, and
JPL bridges">
</div>
+<div class="title">Figure 1. Visualization of a typical Log4j Core
installation with SLF4J, JUL, and JPL bridges</div>
</div>
</div>
</div>
diff --git a/manual/lookups.html b/manual/lookups.html
index 5089e21e17..fbb206de1c 100644
--- a/manual/lookups.html
+++ b/manual/lookups.html
@@ -360,33 +360,11 @@
<div class="paragraph">
<p>Log4j Core provides a flexible and extensible property substitution
system.</p>
</div>
-<div id="StrSubstitutor-diagram" class="literalblock kroki-error">
-<div class="title">Property substitution system</div>
+<div id="StrSubstitutor-diagram" class="imageblock kroki">
<div class="content">
-<pre>@startuml
-class StrSubstitutor #line.bold {
- Interpolator interpolator
- String replace(String input)
- String replace(LogEvent event, String input)
-}
-
-StrSubstitutor --> Interpolator
-
-class Interpolator {
- StrLookup[] lookups
- String lookup(String key)
- String lookup(LogEvent event, String key)
-}
-
-Interpolator --> "0..*" StrLookup
-
-class StrLookup {
- String lookup(String input)
- String lookup(LogEvent event, String key)
-}
-
-@enduml</pre>
+<img src="../_images/diag-5c97f284d82478c0499cab16fe90893de781b11f.svg"
alt="Property substitution system">
</div>
+<div class="title">Figure 1. Property substitution system</div>
</div>
<div class="paragraph">
<p>The property substitution system is composed of these elements:</p>
diff --git a/migrate-from-logback.html b/migrate-from-logback.html
index ae033b13ff..d87b899cba 100644
--- a/migrate-from-logback.html
+++ b/migrate-from-logback.html
@@ -411,63 +411,11 @@ For instance, <code>log4j-slf4j2-impl</code>
<em>bridges</em> SLF4J calls to Log
<div class="paragraph">
<p>To make things a little bit more tangible, consider the following
visualization of a typical Log4j Core installation with bridges for an
application:</p>
</div>
-<div class="literalblock kroki-error">
-<div class="title">Visualization of a typical Log4j Core installation with
SLF4J, JUL, and JPL bridges</div>
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-frame "Compile time" {
- [Application] --> [Log4j API] : logs to
-
- [Log4j API] #Cyan
-
- [SLF4J] #Cyan
-
- [Library 1] --> [SLF4J] : logs to
- [Application] --> [Library 1] : uses
- [Application] --> [Library 2] : uses
- [Application] --> [Library 3] : uses
-}
-
-frame Runtime {
-
- [Log4j Core] <.. [Log4j API] : is implemented by
- [Log4j Core] <.. (log4j2.xml) : is provided to
- [Log4j Core] #LightGreen
-
- [JPL-to-Log4j] ..> [Log4j Core] : forwards to
- [JPL-to-Log4j] #Yellow
-
- [SLF4J-to-Log4j] ..> [Log4j Core] : forwards to
- [SLF4J-to-Log4j] #Yellow
-
- [JUL-to-Log4j] ..> [Log4j Core] : forwards to
- [JUL-to-Log4j] #Yellow
-
- frame JRE {
- [JPL] #Cyan
- [JUL] #Cyan
- }
-
-}
-
-[Library 2] --> [JUL] : logs to
-[Library 3] --> [JPL] : logs to
-
-[JPL] ..> [JPL-to-Log4j] : is implemented by
-[JUL] ..> [JUL-to-Log4j] : is implemented by
-[SLF4J] ..> [SLF4J-to-Log4j] : is implemented by
-
-legend top right
- | <#LightGreen> | Logging implementation |
- | <#Yellow> | Logging bridge |
- | <#Cyan> | Logging API |
- | <size:18><U+2192></size> | Compile-time usage |
- | <size:18><U+21E2></size> | Runtime usage |
-endlegend
-
-@enduml</pre>
+<img src="_images/diag-a51b68065f249459078382aa4c61888857f01b2c.svg"
alt="Visualization of a typical Log4j Core installation with SLF4J, JUL, and
JPL bridges">
</div>
+<div class="title">Figure 1. Visualization of a typical Log4j Core
installation with SLF4J, JUL, and JPL bridges</div>
</div>
</div>
</details>
diff --git a/migrate-from-slf4j.html b/migrate-from-slf4j.html
index da60ac5de9..242b80eef3 100644
--- a/migrate-from-slf4j.html
+++ b/migrate-from-slf4j.html
@@ -411,63 +411,11 @@ For instance, <code>log4j-slf4j2-impl</code>
<em>bridges</em> SLF4J calls to Log
<div class="paragraph">
<p>To make things a little bit more tangible, consider the following
visualization of a typical Log4j Core installation with bridges for an
application:</p>
</div>
-<div class="literalblock kroki-error">
-<div class="title">Visualization of a typical Log4j Core installation with
SLF4J, JUL, and JPL bridges</div>
+<div class="imageblock kroki">
<div class="content">
-<pre>@startuml
-
-frame "Compile time" {
- [Application] --> [Log4j API] : logs to
-
- [Log4j API] #Cyan
-
- [SLF4J] #Cyan
-
- [Library 1] --> [SLF4J] : logs to
- [Application] --> [Library 1] : uses
- [Application] --> [Library 2] : uses
- [Application] --> [Library 3] : uses
-}
-
-frame Runtime {
-
- [Log4j Core] <.. [Log4j API] : is implemented by
- [Log4j Core] <.. (log4j2.xml) : is provided to
- [Log4j Core] #LightGreen
-
- [JPL-to-Log4j] ..> [Log4j Core] : forwards to
- [JPL-to-Log4j] #Yellow
-
- [SLF4J-to-Log4j] ..> [Log4j Core] : forwards to
- [SLF4J-to-Log4j] #Yellow
-
- [JUL-to-Log4j] ..> [Log4j Core] : forwards to
- [JUL-to-Log4j] #Yellow
-
- frame JRE {
- [JPL] #Cyan
- [JUL] #Cyan
- }
-
-}
-
-[Library 2] --> [JUL] : logs to
-[Library 3] --> [JPL] : logs to
-
-[JPL] ..> [JPL-to-Log4j] : is implemented by
-[JUL] ..> [JUL-to-Log4j] : is implemented by
-[SLF4J] ..> [SLF4J-to-Log4j] : is implemented by
-
-legend top right
- | <#LightGreen> | Logging implementation |
- | <#Yellow> | Logging bridge |
- | <#Cyan> | Logging API |
- | <size:18><U+2192></size> | Compile-time usage |
- | <size:18><U+21E2></size> | Runtime usage |
-endlegend
-
-@enduml</pre>
+<img src="_images/diag-a51b68065f249459078382aa4c61888857f01b2c.svg"
alt="Visualization of a typical Log4j Core installation with SLF4J, JUL, and
JPL bridges">
</div>
+<div class="title">Figure 1. Visualization of a typical Log4j Core
installation with SLF4J, JUL, and JPL bridges</div>
</div>
</div>
</details>
diff --git a/plugin-reference.html b/plugin-reference.html
index c231cd35a8..bdb9b55f45 100644
--- a/plugin-reference.html
+++ b/plugin-reference.html
@@ -1479,7 +1479,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>
@@ -16314,10 +16314,10 @@ Supports Lookup expressions.</p>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>boolean?</code></p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><div class="content"><div
class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
</div>
<div class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
</div></div></td>
</tr>
<tr>
@@ -17768,10 +17768,10 @@ Supports Lookup expressions.</p>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>boolean?</code></p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><div class="content"><div
class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
</div>
<div class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
</div></div></td>
</tr>
<tr>
@@ -17967,10 +17967,10 @@ Supports Lookup expressions.</p>
<td class="tableblock halign-left valign-top"><p
class="tableblock"><code>boolean?</code></p></td>
<td class="tableblock halign-left valign-top"></td>
<td class="tableblock halign-left valign-top"><div class="content"><div
class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
</div>
<div class="paragraph">
-<p>If "true", includes the stacktrace of any Throwable in the generated JSON,
defaults to "true".</p>
+<p>If "true", includes the stacktrace of any Throwable in the generated data,
defaults to "true".</p>
</div></div></td>
</tr>
<tr>
diff --git a/sitemap.xml b/sitemap.xml
index 486061a9f9..682c71a9f0 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -2,242 +2,242 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://logging.apache.org/log4j/2.x/components.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/development.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/download.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/faq.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/graalvm.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/hibernate.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/index.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/jakarta.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/javadoc.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-iostreams.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-jul.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-spring-boot.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-spring-cloud-config-client.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/log4j-to-jul.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/api.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/appenders.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/appenders/database.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/appenders/delegating.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/appenders/file.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/appenders/message-queue.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/appenders/network.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/appenders/rolling-file.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/architecture.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/async.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/compatibility.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/config-intro.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/configuration.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/customconfig.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/customloglevels.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/eventlogging.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/extending.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/filters.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/flowtracing.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/garbagefree.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/getting-started.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/implementation.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/index.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/installation.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/jmx.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/json-template-layout.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/layouts.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/logbuilder.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/lookups.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/markers.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/messages.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/pattern-layout.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/performance.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/plugins.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/scripts.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/simple-logger.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/status-logger.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/systemproperties.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/manual/thread-context.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/migrate-from-log4j1.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/migrate-from-logback.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/migrate-from-slf4j.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/plugin-reference.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/release-notes.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/soa.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
<url>
<loc>https://logging.apache.org/log4j/2.x/versioning.html</loc>
-<lastmod>2026-05-10T10:21:03.404Z</lastmod>
+<lastmod>2026-05-15T13:19:56.293Z</lastmod>
</url>
</urlset>