Merge `release/2.21.0` into `2.x`
# Conflicts:
# .github/generate-email.sh
# .github/workflows/build.yml
# README.md
# pom.xml
# src/changelog/.2.x.x/1783_spring_arbiter_without_environment.xml
# src/changelog/.2.x.x/UpdateSurefireRelease.xml
# src/changelog/2.21.0/PreventResourceLeak.xml
# src/site/_release-notes.adoc
# src/site/_release-notes/_2.0-alpha1.adoc
# src/site/_release-notes/_2.0-alpha2.adoc
# src/site/_release-notes/_2.0-beta1.adoc
# src/site/_release-notes/_2.0-beta2.adoc
# src/site/_release-notes/_2.0-beta3.adoc
# src/site/_release-notes/_2.0-beta4.adoc
# src/site/_release-notes/_2.0-beta5.adoc
# src/site/_release-notes/_2.0-beta6.adoc
# src/site/_release-notes/_2.0-beta7.adoc
# src/site/_release-notes/_2.0-beta8.adoc
# src/site/_release-notes/_2.0-beta9.adoc
# src/site/_release-notes/_2.0-rc1.adoc
# src/site/_release-notes/_2.0-rc2.adoc
# src/site/_release-notes/_2.0.1.adoc
# src/site/_release-notes/_2.0.2.adoc
# src/site/_release-notes/_2.0.adoc
# src/site/_release-notes/_2.1.adoc
# src/site/_release-notes/_2.10.0.adoc
# src/site/_release-notes/_2.11.0.adoc
# src/site/_release-notes/_2.11.1.adoc
# src/site/_release-notes/_2.11.2.adoc
# src/site/_release-notes/_2.12.0.adoc
# src/site/_release-notes/_2.12.1.adoc
# src/site/_release-notes/_2.13.0.adoc
# src/site/_release-notes/_2.13.1.adoc
# src/site/_release-notes/_2.13.2.adoc
# src/site/_release-notes/_2.13.3.adoc
# src/site/_release-notes/_2.14.0.adoc
# src/site/_release-notes/_2.14.1.adoc
# src/site/_release-notes/_2.15.0.adoc
# src/site/_release-notes/_2.16.0.adoc
# src/site/_release-notes/_2.17.0.adoc
# src/site/_release-notes/_2.17.1.adoc
# src/site/_release-notes/_2.17.2.adoc
# src/site/_release-notes/_2.18.0.adoc
# src/site/_release-notes/_2.19.0.adoc
# src/site/_release-notes/_2.2.adoc
# src/site/_release-notes/_2.20.0.adoc
# src/site/_release-notes/_2.3.adoc
# src/site/_release-notes/_2.4.1.adoc
# src/site/_release-notes/_2.4.adoc
# src/site/_release-notes/_2.5.adoc
# src/site/_release-notes/_2.6.1.adoc
# src/site/_release-notes/_2.6.2.adoc
# src/site/_release-notes/_2.6.adoc
# src/site/_release-notes/_2.7.adoc
# src/site/_release-notes/_2.8.1.adoc
# src/site/_release-notes/_2.8.2.adoc
# src/site/_release-notes/_2.8.adoc
# src/site/_release-notes/_2.9.0.adoc
# src/site/_release-notes/_2.9.1.adoc
# src/site/_release-notes/_2.x.x.adoc
diff --git a/.github/generate-email.sh b/.github/generate-email.sh
index 569583a..49a8624 100755
--- a/.github/generate-email.sh
+++ b/.github/generate-email.sh
@@ -48,7 +48,8 @@
}
dump_release_notes() {
- awk "f{print} /^Release date::/{f=1}" "$RELEASE_NOTES_FILE"
+ awk "f{print} /^Release date::/{f=1}" "$RELEASE_NOTES_FILE" \
+ | sed -r 's!'$PROJECT_REPO'/(issues|pull)/[0-9]+\[([0-9]+)\]!#\2!g'
}
case $1 in
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index eb3f90c..d5612a5 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -54,7 +54,7 @@
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@ddccb873888234080b77e9bc2d4764d5ccaaccf9 # 2.21.9
+ uses: github/codeql-action/init@2cb752a87e96af96708ab57187ab6372ee1973ab # 2.22.0
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -64,7 +64,7 @@
# JDK 11 is used for the build.
- name: Setup JDK
- uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # 3.12.0
+ uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # 3.13.0
with:
distribution: temurin
java-version: 11
@@ -79,4 +79,4 @@
-DskipTests -P!java8-tests
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@ddccb873888234080b77e9bc2d4764d5ccaaccf9 # 2.21.9
+ uses: github/codeql-action/analyze@2cb752a87e96af96708ab57187ab6372ee1973ab # 2.22.0
diff --git a/.github/workflows/merge-dependabot.yaml b/.github/workflows/merge-dependabot.yaml
index 1450173..8e52899 100644
--- a/.github/workflows/merge-dependabot.yaml
+++ b/.github/workflows/merge-dependabot.yaml
@@ -29,7 +29,7 @@
jobs:
build:
- if: github.repository == 'apache/logging-log4j-kotlin' && github.event_name == 'pull_request_target' && github.actor == 'dependabot[bot]'
+ if: github.repository == 'apache/logging-log4j2' && github.event_name == 'pull_request_target' && github.actor == 'dependabot[bot]'
uses: apache/logging-parent/.github/workflows/build-reusable.yaml@main
merge-dependabot:
diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml
index 106c3b8..e8c02ef 100644
--- a/.github/workflows/scorecards-analysis.yml
+++ b/.github/workflows/scorecards-analysis.yml
@@ -67,6 +67,6 @@
retention-days: 5
- name: "Upload to code-scanning"
- uses: github/codeql-action/upload-sarif@ddccb873888234080b77e9bc2d4764d5ccaaccf9 # 2.1.22
+ uses: github/codeql-action/upload-sarif@2cb752a87e96af96708ab57187ab6372ee1973ab # 2.1.22
with:
sarif_file: results.sarif
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/WriterAppender.java b/log4j-1.2-api/src/main/java/org/apache/log4j/WriterAppender.java
index 065ab20..3eeb3b0 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/WriterAppender.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/WriterAppender.java
@@ -20,6 +20,7 @@
import java.io.InterruptedIOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
import java.io.Writer;
import org.apache.log4j.helpers.QuietWriter;
@@ -242,12 +243,8 @@
if (enc != null) {
try {
retval = new OutputStreamWriter(os, enc);
- } catch (IOException e) {
- if (e instanceof InterruptedIOException) {
- Thread.currentThread().interrupt();
- }
- LOGGER.warn("Error initializing output writer.");
- LOGGER.warn("Unsupported encoding?");
+ } catch (final UnsupportedEncodingException e) {
+ LOGGER.warn("Error initializing output writer: encoding {} is not supported.", enc, e);
}
}
if (retval == null) {
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/LocationInfo.java b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/LocationInfo.java
index 65345cf..1fc0b40 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/LocationInfo.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/LocationInfo.java
@@ -19,6 +19,8 @@
import java.io.Serializable;
import java.util.Objects;
+import org.apache.logging.log4j.core.util.Integers;
+
/**
* The internal representation of caller location information.
*
@@ -101,35 +103,40 @@
prevClass = thisClass;
}
}
- this.stackTraceElement = new StackTraceElement(declaringClass, methodName, file, Integer.parseInt(line));
- this.fullInfo = stackTraceElement.toString();
+ if (declaringClass != null && methodName != null) {
+ this.stackTraceElement = new StackTraceElement(declaringClass, methodName, file, Integers.parseInt(line));
+ this.fullInfo = stackTraceElement.toString();
+ } else {
+ this.stackTraceElement = null;
+ this.fullInfo = null;
+ }
}
/**
* Gets the fully qualified class name of the caller making the logging request.
*/
public String getClassName() {
- return stackTraceElement.getClassName();
+ return stackTraceElement != null ? stackTraceElement.getClassName() : NA;
}
/**
* Gets the file name of the caller.
*/
public String getFileName() {
- return stackTraceElement.getFileName();
+ return stackTraceElement != null ? stackTraceElement.getFileName() : NA;
}
/**
* Gets the line number of the caller.
*/
public String getLineNumber() {
- return Integer.toString(stackTraceElement.getLineNumber());
+ return stackTraceElement != null ? Integer.toString(stackTraceElement.getLineNumber()) : NA;
}
/**
* Gets the method name of the caller.
*/
public String getMethodName() {
- return stackTraceElement.getMethodName();
+ return stackTraceElement != null ? stackTraceElement.getMethodName() : NA;
}
}
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java
index c0b46c7..2dc5c4b 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/SortedArrayStringMap.java
@@ -16,23 +16,13 @@
*/
package org.apache.logging.log4j.util;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.StreamCorruptedException;
+import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.ConcurrentModificationException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.apache.logging.log4j.status.StatusLogger;
/**
@@ -545,6 +535,8 @@
}
}
+ @SuppressFBWarnings(value = "OBJECT_DESERIALIZATION", justification = "Object deserialization uses either Java 9 " +
+ "native filter or our custom filter to limit the kinds of classes deserialized.")
private static Object unmarshall(final byte[] data, final ObjectInputStream inputStream)
throws IOException, ClassNotFoundException {
final ByteArrayInputStream bin = new ByteArrayInputStream(data);
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/JdbcH2TestHelper.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/JdbcH2TestHelper.java
index df9bad6..6e78995 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/JdbcH2TestHelper.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/appender/db/jdbc/JdbcH2TestHelper.java
@@ -23,6 +23,7 @@
import java.sql.DriverManager;
import java.sql.SQLException;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.apache.commons.io.file.PathUtils;
import org.apache.commons.lang3.SystemUtils;
import org.apache.logging.log4j.core.appender.db.jdbc.AbstractConnectionSource;
@@ -67,10 +68,12 @@
}
}
+ @SuppressFBWarnings(value = "DMI_EMPTY_DB_PASSWORD")
public static Connection getConnectionInMemory() throws SQLException {
return DriverManager.getConnection(CONNECTION_STRING_IN_MEMORY, USER_NAME, PASSWORD);
}
+ @SuppressFBWarnings(value = "DMI_EMPTY_DB_PASSWORD")
public static Connection getConnectionTempDir() throws SQLException {
return DriverManager.getConnection(CONNECTION_STRING_TEMP_DIR, USER_NAME, PASSWORD);
}
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java
index c0024d1..8804cd3 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.java
@@ -16,70 +16,50 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
-import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Pattern;
-import org.apache.commons.lang3.SystemUtils;
import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.RuleChain;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.TempLoggingDir;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledOnOs;
+import org.junit.jupiter.api.condition.OS;
-import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
-import static org.hamcrest.Matchers.endsWith;
-import static org.hamcrest.Matchers.hasItemInArray;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
+import static org.assertj.core.api.Assertions.assertThat;
/**
* LOG4J2-1766.
*/
+@UsingStatusListener
+@DisabledOnOs(value = OS.MAC, disabledReason = "FileWatcher is not fast enough on macOS for this test")
public class RollingAppenderDirectWriteTempCompressedFilePatternTest {
- private static final String CONFIG = "log4j-rolling-direct-tmp-compress-folder.xml";
+ private final String PATTERN = "test-\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d+\\.log\\.gz";
+ private final Pattern FILE_PATTERN = Pattern.compile(PATTERN);
+ private final Pattern TMP_PATTERN = Pattern.compile(PATTERN + "\\.tmp");
- private static final String DIR = "target/rolling-direct";
-
- public static LoggerContextRule loggerContextRule = LoggerContextRule
- .createShutdownTimeoutLoggerContextRule(CONFIG);
-
- @Rule
- public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR);
-
- private Logger logger;
-
- @Before
- public void setUp() throws Exception {
- // Disable this test on MacOS. FileWatcher isn't fast enough to work properly.
- Assume.assumeTrue(!SystemUtils.IS_OS_MAC_OSX);
- this.logger = loggerContextRule.getLogger(RollingAppenderDirectWriteTest.class.getName());
- }
+ @TempLoggingDir
+ private Path loggingPath;
@Test
- public void testAppender() throws Exception {
- final File dir = new File(DIR);
- dir.mkdirs();
+ @LoggerContextSource
+ public void testAppender(final LoggerContext ctx) throws Exception {
+ final Logger logger = ctx.getLogger(getClass());
try (final WatchService watcher = FileSystems.getDefault().newWatchService()) {
- WatchKey key = dir.toPath().register(watcher, StandardWatchEventKinds.ENTRY_CREATE);
+ WatchKey key = loggingPath.register(watcher, StandardWatchEventKinds.ENTRY_CREATE);
for (int i = 0; i < 100; ++i) {
- logger.debug("This is test message number " + i);
+ logger.debug("This is test message number {}.", i);
}
- Thread.sleep(50);
- assertTrue("Directory not created", dir.exists() && dir.listFiles().length > 0);
- final File[] files = dir.listFiles();
- assertNotNull(files);
- assertThat(files, hasItemInArray(that(hasName(that(endsWith(".gz"))))));
+ ctx.stop(500, TimeUnit.MILLISECONDS);
int temporaryFilesCreated = 0;
int compressedFiles = 0;
@@ -87,17 +67,18 @@
for (final WatchEvent<?> event : key.pollEvents()) {
final WatchEvent<Path> ev = (WatchEvent<Path>) event;
- final Path filename = ev.context();
- if (filename.toString().endsWith(".tmp")) {
+ final String filename = ev.context().getFileName().toString();
+ if (TMP_PATTERN.matcher(filename).matches()) {
temporaryFilesCreated++;
}
- if (filename.toString().endsWith(".gz")) {
+ if (FILE_PATTERN.matcher(filename).matches()) {
compressedFiles++;
}
}
- assertTrue("No temporary file created during compression", temporaryFilesCreated > 0);
- assertTrue("Temporarys file created not equals to compressed files",
- compressedFiles == temporaryFilesCreated);
+ assertThat(temporaryFilesCreated)
+ .as("Temporary files created.")
+ .isGreaterThan(0)
+ .isEqualTo(compressedFiles);
}
}
}
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.java
index b67aa2e..aa0c02e 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.java
@@ -17,78 +17,61 @@
package org.apache.logging.log4j.core.appender.rolling;
import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
+import java.io.InputStream;
import java.io.InputStreamReader;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Pattern;
import java.util.zip.GZIPInputStream;
import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.RuleChain;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.TempLoggingDir;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
+import org.junit.jupiter.api.Test;
-import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
-import static org.hamcrest.Matchers.endsWith;
-import static org.hamcrest.Matchers.hasItemInArray;
-import static org.junit.Assert.*;
+import static java.nio.charset.StandardCharsets.UTF_8;
-/**
- *
- */
+import static org.assertj.core.api.Assertions.assertThat;
+
+@UsingStatusListener
public class RollingAppenderDirectWriteTest {
- private static final String CONFIG = "log4j-rolling-direct.xml";
+ private final Pattern FILE_PATTERN = Pattern.compile("test-\\d{4}-\\d{2}-\\d{2}T\\d{2}-\\d{2}-\\d+\\.log(\\.gz)?");
+ private final Pattern LINE_PATTERN = Pattern.compile("This is test message number \\d+\\.");
- private static final String DIR = "target/rolling-direct";
-
- public static LoggerContextRule loggerContextRule = LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG);
-
- @Rule
- public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR);
-
- private Logger logger;
-
- @Before
- public void setUp() throws Exception {
- this.logger = loggerContextRule.getLogger(RollingAppenderDirectWriteTest.class.getName());
- }
+ @TempLoggingDir
+ private Path loggingPath;
@Test
- public void testAppender() throws Exception {
+ @LoggerContextSource
+ public void testAppender(final LoggerContext ctx) throws Exception {
+ final Logger logger = ctx.getLogger(getClass());
final int count = 100;
for (int i=0; i < count; ++i) {
- logger.debug("This is test message number " + i);
+ logger.debug("This is test message number {}.", i);
}
- Thread.sleep(50);
- final File dir = new File(DIR);
- assertTrue("Directory not created", dir.exists() && dir.listFiles().length > 0);
- final File[] files = dir.listFiles();
- assertNotNull(files);
- assertThat(files, hasItemInArray(that(hasName(that(endsWith(".gz"))))));
+ ctx.stop(500, TimeUnit.MILLISECONDS);
int found = 0;
- for (final File file: files) {
- final String actual = file.getName();
- BufferedReader reader;
- if (file.getName().endsWith(".gz")) {
- reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(file))));
- } else {
- reader = new BufferedReader(new FileReader(file));
+ try (final DirectoryStream<Path> stream = Files.newDirectoryStream(loggingPath)) {
+ for (final Path file: stream) {
+ final String fileName = file.getFileName().toString();
+ assertThat(fileName).matches(FILE_PATTERN);
+ try (final InputStream is = Files.newInputStream(file);
+ final InputStream uncompressed = fileName.endsWith(".gz") ? new GZIPInputStream(is) : is;
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(uncompressed, UTF_8))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ assertThat(line).matches(LINE_PATTERN);
+ ++found;
+ }
+ }
}
- String line;
- while ((line = reader.readLine()) != null) {
- assertNotNull("No log event in file " + actual, line);
- final String[] parts = line.split((" "));
- final String expected = "test1-" + parts[0];
- assertTrue("Incorrect file name. Expected file prefix: " + expected + " Actual: " + actual,
- actual.startsWith(expected));
- ++found;
- }
- reader.close();
}
- assertEquals("Incorrect number of events read. Expected " + count + ", Actual " + found, count, found);
+
+ assertThat(found).as("Number of events.").isEqualTo(count);
}
}
diff --git a/log4j-core-test/src/test/resources/log4j-rolling-direct-tmp-compress-folder.xml b/log4j-core-test/src/test/resources/log4j-rolling-direct-tmp-compress-folder.xml
deleted file mode 100644
index 7d0b6fa..0000000
--- a/log4j-core-test/src/test/resources/log4j-rolling-direct-tmp-compress-folder.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one or more
- ~ contributor license agreements. See the NOTICE file distributed with
- ~ this work for additional information regarding copyright ownership.
- ~ The ASF licenses this file to you under the Apache License, Version 2.0
- ~ (the "License"); you may not use this file except in compliance with
- ~ the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<Configuration status="WARN" name="XMLConfigTest">
- <Properties>
- <Property name="logDir">target/rolling-direct</Property>
- </Properties>
- <ThresholdFilter level="debug"/>
-
- <Appenders>
- <Console name="STDOUT">
- <PatternLayout pattern="%m%n"/>
- </Console>
- <RollingFile name="RollingFile" filePattern="${logDir}/test1-%d{MM-dd-yy-HH-mm}-%i.log.gz">
- <PatternLayout>
- <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
- </PatternLayout>
- <Policies>
- <TimeBasedTriggeringPolicy />
- <SizeBasedTriggeringPolicy size="500" />
- </Policies>
- <DirectWriteRolloverStrategy
- tempCompressedFilePattern="${logDir}/test1-%d{MM-dd-yy-HH-mm}-%i.log.gz.tmp"/>
- </RollingFile>
- </Appenders>
-
- <Loggers>
- <Logger name="org.apache.logging.log4j.core.appender.rolling" level="debug" additivity="false">
- <AppenderRef ref="RollingFile"/>
- </Logger>>
-
- <Root level="error">
- <AppenderRef ref="STDOUT"/>
- </Root>
- </Loggers>
-
-</Configuration>
diff --git a/log4j-core-test/src/test/resources/log4j-rolling-direct.xml b/log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.xml
similarity index 63%
rename from log4j-core-test/src/test/resources/log4j-rolling-direct.xml
rename to log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.xml
index 077e6e1..4366d96 100644
--- a/log4j-core-test/src/test/resources/log4j-rolling-direct.xml
+++ b/log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTempCompressedFilePatternTest.xml
@@ -15,35 +15,21 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-<Configuration status="WARN" name="XMLConfigTest">
- <Properties>
- <Property name="logDir">target/rolling-direct</Property>
- </Properties>
- <ThresholdFilter level="debug"/>
-
+<Configuration status="OFF" name="RollingAppenderDirectWriteTempCompressedFilePatternTest">
<Appenders>
- <Console name="STDOUT">
- <PatternLayout pattern="%m%n"/>
- </Console>
- <RollingFile name="RollingFile" filePattern="${logDir}/test1-%d{MM-dd-yy-HH-mm}-%i.log.gz">
- <PatternLayout>
- <Pattern>%d{MM-dd-yy-HH-mm} %p %C{1.} [%t] %m%n</Pattern>
- </PatternLayout>
+ <RollingFile name="RollingFile" filePattern="${test:logging.path}/test-%d{yyyy-MM-dd'T'hh-mm}-%i.log.gz">
+ <PatternLayout/>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="500" />
</Policies>
+ <DirectWriteRolloverStrategy tempCompressedFilePattern="${test:logging.path}/test-%d{yyyy-MM-dd'T'hh-mm}-%i.log.gz.tmp"/>
</RollingFile>
</Appenders>
<Loggers>
- <Logger name="org.apache.logging.log4j.core.appender.rolling" level="debug" additivity="false">
+ <Root level="DEBUG">
<AppenderRef ref="RollingFile"/>
- </Logger>>
-
- <Root level="error">
- <AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
-
</Configuration>
diff --git a/src/changelog/2.21.0/.release.xml b/log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.xml
similarity index 63%
rename from src/changelog/2.21.0/.release.xml
rename to log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.xml
index ea3f6fe..f830c27 100644
--- a/src/changelog/2.21.0/.release.xml
+++ b/log4j-core-test/src/test/resources/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteTest.xml
@@ -15,7 +15,20 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-<release xmlns="http://logging.apache.org/log4j/changelog"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://logging.apache.org/log4j/changelog https://logging.apache.org/log4j/changelog-0.1.0.xsd"
- date="2023-10-09" version="2.21.0"/>
+<Configuration status="OFF" name="RollingAppenderDirectWriteTest">
+ <Appenders>
+ <RollingFile name="RollingFile" filePattern="${test:logging.path}/test-%d{yyyy-MM-dd'T'hh-mm}-%i.log.gz">
+ <PatternLayout/>
+ <Policies>
+ <TimeBasedTriggeringPolicy />
+ <SizeBasedTriggeringPolicy size="500" />
+ </Policies>
+ </RollingFile>
+ </Appenders>
+
+ <Loggers>
+ <Root level="DEBUG">
+ <AppenderRef ref="RollingFile"/>
+ </Root>
+ </Loggers>
+</Configuration>
diff --git a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
index d3dff8e..f14a10c 100644
--- a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
+++ b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeAvroManager.java
@@ -205,7 +205,7 @@
} else {
int eventCount;
BatchEvent batch = null;
- synchronized(batchEvent) {
+ synchronized(this) {
batchEvent.addEvent(event);
eventCount = batchEvent.size();
final long now = System.nanoTime();
diff --git a/log4j-osgi/pom.xml b/log4j-osgi/pom.xml
index c7d6dc1..516468d 100644
--- a/log4j-osgi/pom.xml
+++ b/log4j-osgi/pom.xml
@@ -31,7 +31,6 @@
<docLabel>OSGi Documentation</docLabel>
<projectDir>/osgi</projectDir>
<module.name>org.apache.logging.log4j.osgi</module.name>
- <skipTests>true</skipTests>
<bnd.baseline.skip>true</bnd.baseline.skip>
<maven.deploy.skip>true</maven.deploy.skip>
<maven.install.skip>true</maven.install.skip>
diff --git a/log4j-parent/pom.xml b/log4j-parent/pom.xml
index 27c17fe..e138578 100644
--- a/log4j-parent/pom.xml
+++ b/log4j-parent/pom.xml
@@ -1027,6 +1027,12 @@
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-annotations</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
</dependencies>
<build>
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/AnnotationVsMarkerInterface.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/AnnotationVsMarkerInterface.java
index 09e1aad..da10554 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/AnnotationVsMarkerInterface.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/AnnotationVsMarkerInterface.java
@@ -18,7 +18,6 @@
import java.util.concurrent.TimeUnit;
-import org.apache.logging.log4j.util.PerformanceSensitive;
import org.apache.logging.log4j.util.SortedArrayStringMap;
import org.apache.logging.log4j.util.StringBuilderFormattable;
import org.apache.logging.log4j.util.StringMap;
@@ -58,7 +57,7 @@
@BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime, Mode.SingleShotTime})
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public Object annotationMissing() {
- return map.getClass().isAnnotationPresent(PerformanceSensitive.class);
+ return map.getClass().isAnnotationPresent(State.class);
}
@Benchmark
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
index 1fefec6..21ac31b 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JdbcAppenderBenchmark.java
@@ -22,6 +22,7 @@
import java.sql.Statement;
import java.util.concurrent.TimeUnit;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
@@ -185,6 +186,7 @@
/**
* Referred from log4j2-jdbc-appender.xml.
*/
+ @SuppressFBWarnings("DMI_EMPTY_DB_PASSWORD")
public static Connection getConnectionH2() throws Exception {
Class.forName("org.h2.Driver");
return DriverManager.getConnection("jdbc:h2:mem:Log4j", "sa", "");
@@ -193,6 +195,7 @@
/**
* Referred from log4j2-jdbc-appender.xml.
*/
+ @SuppressFBWarnings("DMI_EMPTY_DB_PASSWORD")
public static Connection getConnectionHSQLDB() throws Exception {
Class.forName("org.hsqldb.jdbcDriver");
return DriverManager.getConnection("jdbc:hsqldb:mem:Log4j", "sa", "");
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
index 156cf14..13fd981 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/JpaAppenderBenchmark.java
@@ -22,6 +22,7 @@
import java.sql.Statement;
import java.util.concurrent.TimeUnit;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
@@ -165,6 +166,7 @@
/**
* Referred from log4j2-jdbc-appender.xml.
*/
+ @SuppressFBWarnings("DMI_EMPTY_DB_PASSWORD")
public static Connection getConnectionH2() throws Exception {
Class.forName("org.h2.Driver");
final Connection connection = DriverManager.getConnection("jdbc:h2:mem:Log4j;MODE=PostgreSQL", "sa", "");
@@ -182,6 +184,7 @@
/**
* Referred from log4j2-jdbc-appender.xml.
*/
+ @SuppressFBWarnings("DMI_EMPTY_DB_PASSWORD")
public static Connection getConnectionHSQLDB() throws Exception {
Class.forName("org.hsqldb.jdbcDriver");
final Connection connection = DriverManager.getConnection("jdbc:hsqldb:mem:Log4j", "sa", "");
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadsafeDateFormatBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadsafeDateFormatBenchmark.java
index 0fedadf..24fdce0 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadsafeDateFormatBenchmark.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadsafeDateFormatBenchmark.java
@@ -90,7 +90,7 @@
}
}
- private class FormatterSimple {
+ private static class FormatterSimple {
private final SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.SSS");
private long timestamp;
private String formatted;
@@ -108,7 +108,7 @@
}
}
- private class FormatterFixedReuseBuffer {
+ private static class FormatterFixedReuseBuffer {
private final FixedDateFormat customFormat = FixedDateFormat.createIfSupported("HH:mm:ss.SSS");
private long timestamp;
private String formatted;
diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/NoGcMessage.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/NoGcMessage.java
index 5fde05c..2e86999 100644
--- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/NoGcMessage.java
+++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/NoGcMessage.java
@@ -24,7 +24,7 @@
* Reusable Message..
*/
public class NoGcMessage implements Message {
- class InternalState {
+ static class InternalState {
private final Object[] params = new Object[10];
private int paramCount;
private final StringBuilder buffer = new StringBuilder(2048);
diff --git a/pom.xml b/pom.xml
index ee6cd2b..3dd6558 100644
--- a/pom.xml
+++ b/pom.xml
@@ -304,7 +304,7 @@
<properties>
<!-- project version -->
- <revision>2.21.0</revision>
+ <revision>2.21.0-SNAPSHOT</revision>
<!-- =================
Common properties
@@ -387,7 +387,7 @@
<flume.version>1.11.0</flume.version>
<groovy.version>3.0.19</groovy.version>
<guava.version>32.1.2-jre</guava.version>
- <h2.version>2.2.222</h2.version>
+ <h2.version>2.2.224</h2.version>
<hadoop.version>1.2.1</hadoop.version>
<hamcrest.version>2.2</hamcrest.version>
<HdrHistogram.version>2.1.12</HdrHistogram.version>
@@ -411,7 +411,7 @@
<jconsole.version>1.7.0</jconsole.version>
<jctools.version>4.0.1</jctools.version>
<je.version>18.3.12</je.version>
- <jeromq.version>0.5.3</jeromq.version>
+ <jeromq.version>0.5.4</jeromq.version>
<jetty.version>9.4.52.v20230823</jetty.version>
<jmdns.version>3.5.8</jmdns.version>
<jmh.version>1.37</jmh.version>
@@ -438,8 +438,8 @@
<pax-exam.version>4.13.5</pax-exam.version>
<plexus-utils.version>3.5.0</plexus-utils.version>
<slf4j.version>1.7.36</slf4j.version>
- <spring-boot.version>2.7.15</spring-boot.version>
- <spring-framework.version>5.3.29</spring-framework.version>
+ <spring-boot.version>2.7.16</spring-boot.version>
+ <spring-framework.version>5.3.30</spring-framework.version>
<system-stubs.version>2.0.2</system-stubs.version>
<tomcat-juli.version>10.0.27</tomcat-juli.version>
<velocity.version>1.7</velocity.version>
@@ -455,7 +455,7 @@
the independence of transitive dependencies from the order
of dependencies (requireUpperBoundDeps rule).
===================================================== -->
- <asm.version>9.5</asm.version>
+ <asm.version>9.6</asm.version>
<byte-buddy.version>1.14.8</byte-buddy.version>
<commons-httpclient.version>3.1</commons-httpclient.version>
<commons-pool2.version>2.11.1</commons-pool2.version>
diff --git a/src/changelog/.2.x.x/.release-notes.adoc.ftl b/src/changelog/.2.x.x/.release-notes.adoc.ftl
index 1fb73e8..4bef52a 100644
--- a/src/changelog/.2.x.x/.release-notes.adoc.ftl
+++ b/src/changelog/.2.x.x/.release-notes.adoc.ftl
@@ -15,30 +15,32 @@
limitations under the License.
////
-////
- ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
- ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
- ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
- ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
- ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
-
- IF THIS FILE DOESN'T HAVE A `.ftl` SUFFIX, IT IS AUTO-GENERATED, DO NOT EDIT IT!
-
- Version-specific release notes (`7.8.0.adoc`, etc.) are generated from `src/changelog/*/.release-notes.adoc.ftl`.
- Auto-generation happens during `generate-sources` phase of Maven.
- Hence, you must always
-
- 1. Find and edit the associated `.release-notes.adoc.ftl`
- 2. Run `./mvnw generate-sources`
- 3. Commit both `.release-notes.adoc.ftl` and the generated `7.8.0.adoc`
-////
-
[#release-notes-${release.version?replace("[^a-zA-Z0-9]", "-", "r")}]
== ${release.version}
<#if release.date?has_content>Release date:: ${release.date}</#if>
-This is a placeholder introduction to these release notes.
-This will be updated prior to the release.
+This release primarily focuses on enhancements to our OSGi and JPMS support and contains several bug fixes.
+It will be the first release built and signed by the CI using the https://keyserver.ubuntu.com/pks/lookup?search=077E8893A6DCC33DD4A4D5B256E73BA9A0B592D0&op=index[ASF Logging Services Release Manager GPG key], which is shared in https://www.apache.org/dist/logging/KEYS[KEYS].
+
+The Log4j 2.21.0 API, as well as the other artifacts, maintains binary compatibility with the previous release.
+
+Apache Log4j 2.21.0 requires Java 8 to run.
+The build requires JDK 11 and generates reproducible binaries.
+
+For complete information on Apache Log4j 2, including instructions on how to submit bug reports, patches, get support, or suggestions for improvement, see http://logging.apache.org/log4j/2.x/[the Apache Log4j 2 website].
+
+=== OSGi changes
+
+All the published artifacts are OSGi bundles or fragments.
+
+This release introduces a change in the bundle symbolic names to allow them to function as JPMS module name: all hyphens `-` present in the bundle names of previous releases were replaced by dots `.`.
+
+=== JPMS changes
+
+All the published artifacts have been migrated from automatic modules to named JPMS modules.
+All packages marked as private in the Javadoc are not exported.
+
+The module name of four bridges (`log4j-slf4j-impl`, `log4j-slf4j2-impl`, `log4j-to-jul` and `log4j-to-slf4j`) have been changed to adhere to the same convention as the OSGi bundle names.
<#include "../.changelog.adoc.ftl">
diff --git a/src/changelog/2.21.0/1231_validation_path_condition.xml b/src/changelog/.2.x.x/1231_validation_path_condition.xml
similarity index 100%
rename from src/changelog/2.21.0/1231_validation_path_condition.xml
rename to src/changelog/.2.x.x/1231_validation_path_condition.xml
diff --git a/src/changelog/2.21.0/1232_log4j-to-sfl4j-2-OSGiMetadata.xml b/src/changelog/.2.x.x/1232_log4j-to-sfl4j-2-OSGiMetadata.xml
similarity index 100%
rename from src/changelog/2.21.0/1232_log4j-to-sfl4j-2-OSGiMetadata.xml
rename to src/changelog/.2.x.x/1232_log4j-to-sfl4j-2-OSGiMetadata.xml
diff --git a/src/changelog/2.21.0/1275_fix-javadoc.xml b/src/changelog/.2.x.x/1275_fix-javadoc.xml
similarity index 100%
rename from src/changelog/2.21.0/1275_fix-javadoc.xml
rename to src/changelog/.2.x.x/1275_fix-javadoc.xml
diff --git a/src/changelog/2.21.0/1281_remove_locale-dependent_toLowerCase.xml b/src/changelog/.2.x.x/1281_remove_locale-dependent_toLowerCase.xml
similarity index 100%
rename from src/changelog/2.21.0/1281_remove_locale-dependent_toLowerCase.xml
rename to src/changelog/.2.x.x/1281_remove_locale-dependent_toLowerCase.xml
diff --git a/src/changelog/2.21.0/1284_redirect_old_javadoc_urls.xml b/src/changelog/.2.x.x/1284_redirect_old_javadoc_urls.xml
similarity index 100%
rename from src/changelog/2.21.0/1284_redirect_old_javadoc_urls.xml
rename to src/changelog/.2.x.x/1284_redirect_old_javadoc_urls.xml
diff --git a/src/changelog/2.21.0/1312_add_environment_arbiter.xml b/src/changelog/.2.x.x/1312_add_environment_arbiter.xml
similarity index 100%
rename from src/changelog/2.21.0/1312_add_environment_arbiter.xml
rename to src/changelog/.2.x.x/1312_add_environment_arbiter.xml
diff --git a/src/changelog/2.21.0/1365_open-FileExtension.xml b/src/changelog/.2.x.x/1365_open-FileExtension.xml
similarity index 100%
rename from src/changelog/2.21.0/1365_open-FileExtension.xml
rename to src/changelog/.2.x.x/1365_open-FileExtension.xml
diff --git a/src/changelog/2.21.0/1366_fix_java_sql_date.xml b/src/changelog/.2.x.x/1366_fix_java_sql_date.xml
similarity index 100%
rename from src/changelog/2.21.0/1366_fix_java_sql_date.xml
rename to src/changelog/.2.x.x/1366_fix_java_sql_date.xml
diff --git a/src/changelog/2.21.0/1367_Missing-Bundle-Activation-OSGiMetadata.xml b/src/changelog/.2.x.x/1367_Missing-Bundle-Activation-OSGiMetadata.xml
similarity index 100%
rename from src/changelog/2.21.0/1367_Missing-Bundle-Activation-OSGiMetadata.xml
rename to src/changelog/.2.x.x/1367_Missing-Bundle-Activation-OSGiMetadata.xml
diff --git a/src/changelog/2.21.0/1369_bump_build_requirement_jdk_11.xml b/src/changelog/.2.x.x/1369_bump_build_requirement_jdk_11.xml
similarity index 100%
rename from src/changelog/2.21.0/1369_bump_build_requirement_jdk_11.xml
rename to src/changelog/.2.x.x/1369_bump_build_requirement_jdk_11.xml
diff --git a/src/changelog/2.21.0/1380_StackTraceStringResolver_uses_instance_after_recycling.xml b/src/changelog/.2.x.x/1380_StackTraceStringResolver_uses_instance_after_recycling.xml
similarity index 100%
rename from src/changelog/2.21.0/1380_StackTraceStringResolver_uses_instance_after_recycling.xml
rename to src/changelog/.2.x.x/1380_StackTraceStringResolver_uses_instance_after_recycling.xml
diff --git a/src/changelog/2.21.0/1381_support_parents_in_MarkerResolver.xml b/src/changelog/.2.x.x/1381_support_parents_in_MarkerResolver.xml
similarity index 100%
rename from src/changelog/2.21.0/1381_support_parents_in_MarkerResolver.xml
rename to src/changelog/.2.x.x/1381_support_parents_in_MarkerResolver.xml
diff --git a/src/changelog/2.21.0/1389_Added_missing_setter_for_connectionStringSource_in_MongoDb4Provider.xml b/src/changelog/.2.x.x/1389_Added_missing_setter_for_connectionStringSource_in_MongoDb4Provider.xml
similarity index 100%
rename from src/changelog/2.21.0/1389_Added_missing_setter_for_connectionStringSource_in_MongoDb4Provider.xml
rename to src/changelog/.2.x.x/1389_Added_missing_setter_for_connectionStringSource_in_MongoDb4Provider.xml
diff --git a/src/changelog/2.21.0/1391_fix_NPE_in_PluginElementVisitor.xml b/src/changelog/.2.x.x/1391_fix_NPE_in_PluginElementVisitor.xml
similarity index 100%
rename from src/changelog/2.21.0/1391_fix_NPE_in_PluginElementVisitor.xml
rename to src/changelog/.2.x.x/1391_fix_NPE_in_PluginElementVisitor.xml
diff --git a/src/changelog/2.21.0/1405_column_mapping_rename_type_attribute.xml b/src/changelog/.2.x.x/1405_column_mapping_rename_type_attribute.xml
similarity index 94%
rename from src/changelog/2.21.0/1405_column_mapping_rename_type_attribute.xml
rename to src/changelog/.2.x.x/1405_column_mapping_rename_type_attribute.xml
index e84af13..a686a36 100644
--- a/src/changelog/2.21.0/1405_column_mapping_rename_type_attribute.xml
+++ b/src/changelog/.2.x.x/1405_column_mapping_rename_type_attribute.xml
@@ -22,6 +22,6 @@
<issue id="1405" link="https://github.com/apache/logging-log4j2/issues/1405"/>
<author id="github:ppkarwasz"/>
<description format="asciidoc">
- Add `columnType` as alias for the column mapping `type` attribute.
+ Added `columnType` as alias for the column mapping `type` attribute
</description>
</entry>
diff --git a/src/changelog/2.21.0/1414_restore_SLF4J_Log4jMarker_visibility.xml b/src/changelog/.2.x.x/1414_restore_SLF4J_Log4jMarker_visibility.xml
similarity index 100%
rename from src/changelog/2.21.0/1414_restore_SLF4J_Log4jMarker_visibility.xml
rename to src/changelog/.2.x.x/1414_restore_SLF4J_Log4jMarker_visibility.xml
diff --git a/src/changelog/2.21.0/1418_fix_ArrayOutOfBound_in_Log4jFixedFormatter.xml b/src/changelog/.2.x.x/1418_fix_ArrayOutOfBound_in_Log4jFixedFormatter.xml
similarity index 100%
rename from src/changelog/2.21.0/1418_fix_ArrayOutOfBound_in_Log4jFixedFormatter.xml
rename to src/changelog/.2.x.x/1418_fix_ArrayOutOfBound_in_Log4jFixedFormatter.xml
diff --git a/src/changelog/2.21.0/1445_1549_fix_sync_roll_action_propagation.xml b/src/changelog/.2.x.x/1445_1549_fix_sync_roll_action_propagation.xml
similarity index 100%
rename from src/changelog/2.21.0/1445_1549_fix_sync_roll_action_propagation.xml
rename to src/changelog/.2.x.x/1445_1549_fix_sync_roll_action_propagation.xml
diff --git a/src/changelog/2.21.0/1445_fix_synchronous_rolling_file_manager.xml b/src/changelog/.2.x.x/1445_fix_synchronous_rolling_file_manager.xml
similarity index 98%
rename from src/changelog/2.21.0/1445_fix_synchronous_rolling_file_manager.xml
rename to src/changelog/.2.x.x/1445_fix_synchronous_rolling_file_manager.xml
index 4e446eb..573e5f6 100644
--- a/src/changelog/2.21.0/1445_fix_synchronous_rolling_file_manager.xml
+++ b/src/changelog/.2.x.x/1445_fix_synchronous_rolling_file_manager.xml
@@ -22,6 +22,6 @@
<issue id="1445" link="https://github.com/apache/logging-log4j2/issues/1445"/>
<author id="thisdudeiknew" name="Timothy Pfeifer"/>
<description format="asciidoc">
- Fixed `RollingFileManager` to propagate failed synchronous actions correctly.
+ Fixed `RollingFileManager` to propagate failed synchronous actions correctly
</description>
</entry>
diff --git a/src/changelog/2.21.0/1484_fix_StackLocator_stdout.xml b/src/changelog/.2.x.x/1484_fix_StackLocator_stdout.xml
similarity index 100%
rename from src/changelog/2.21.0/1484_fix_StackLocator_stdout.xml
rename to src/changelog/.2.x.x/1484_fix_StackLocator_stdout.xml
diff --git a/src/changelog/2.21.0/1485_fix_DatePatternConverter_when_TL_disabled.xml b/src/changelog/.2.x.x/1485_fix_DatePatternConverter_when_TL_disabled.xml
similarity index 100%
rename from src/changelog/2.21.0/1485_fix_DatePatternConverter_when_TL_disabled.xml
rename to src/changelog/.2.x.x/1485_fix_DatePatternConverter_when_TL_disabled.xml
diff --git a/src/changelog/2.21.0/1503_change_defaults_for_LevelRangeFilter.xml b/src/changelog/.2.x.x/1503_change_defaults_for_LevelRangeFilter.xml
similarity index 100%
rename from src/changelog/2.21.0/1503_change_defaults_for_LevelRangeFilter.xml
rename to src/changelog/.2.x.x/1503_change_defaults_for_LevelRangeFilter.xml
diff --git a/src/changelog/2.21.0/1508_fix-javadoc.xml b/src/changelog/.2.x.x/1508_fix-javadoc.xml
similarity index 100%
rename from src/changelog/2.21.0/1508_fix-javadoc.xml
rename to src/changelog/.2.x.x/1508_fix-javadoc.xml
diff --git a/src/changelog/2.21.0/1530_fix_runtime-dependencies_documentation.xml b/src/changelog/.2.x.x/1530_fix_runtime-dependencies_documentation.xml
similarity index 100%
rename from src/changelog/2.21.0/1530_fix_runtime-dependencies_documentation.xml
rename to src/changelog/.2.x.x/1530_fix_runtime-dependencies_documentation.xml
diff --git a/src/changelog/2.21.0/1533_set_fqcn_eventbuilder.xml b/src/changelog/.2.x.x/1533_set_fqcn_eventbuilder.xml
similarity index 100%
rename from src/changelog/2.21.0/1533_set_fqcn_eventbuilder.xml
rename to src/changelog/.2.x.x/1533_set_fqcn_eventbuilder.xml
diff --git a/src/changelog/2.21.0/1545_add_warn_in_case_of_incorrect_syntax_of_highlighting_style.xml b/src/changelog/.2.x.x/1545_add_warn_in_case_of_incorrect_syntax_of_highlighting_style.xml
similarity index 100%
rename from src/changelog/2.21.0/1545_add_warn_in_case_of_incorrect_syntax_of_highlighting_style.xml
rename to src/changelog/.2.x.x/1545_add_warn_in_case_of_incorrect_syntax_of_highlighting_style.xml
diff --git a/src/changelog/2.21.0/1550_multiple_filter_invocations.xml b/src/changelog/.2.x.x/1550_multiple_filter_invocations.xml
similarity index 100%
rename from src/changelog/2.21.0/1550_multiple_filter_invocations.xml
rename to src/changelog/.2.x.x/1550_multiple_filter_invocations.xml
diff --git a/src/changelog/2.21.0/1589_mongodb_tests.xml b/src/changelog/.2.x.x/1589_mongodb_tests.xml
similarity index 100%
rename from src/changelog/2.21.0/1589_mongodb_tests.xml
rename to src/changelog/.2.x.x/1589_mongodb_tests.xml
diff --git a/src/changelog/2.21.0/1626_parameter_format_rewrite.xml b/src/changelog/.2.x.x/1626_parameter_format_rewrite.xml
similarity index 100%
rename from src/changelog/2.21.0/1626_parameter_format_rewrite.xml
rename to src/changelog/.2.x.x/1626_parameter_format_rewrite.xml
diff --git a/src/changelog/2.21.0/1640_java_9_stack_trace_element.xml b/src/changelog/.2.x.x/1640_java_9_stack_trace_element.xml
similarity index 100%
rename from src/changelog/2.21.0/1640_java_9_stack_trace_element.xml
rename to src/changelog/.2.x.x/1640_java_9_stack_trace_element.xml
diff --git a/src/changelog/2.21.0/1646_unsafe_cleaner.xml b/src/changelog/.2.x.x/1646_unsafe_cleaner.xml
similarity index 100%
rename from src/changelog/2.21.0/1646_unsafe_cleaner.xml
rename to src/changelog/.2.x.x/1646_unsafe_cleaner.xml
diff --git a/src/changelog/2.21.0/1650_fix_rollover_strategy_log4j1.xml b/src/changelog/.2.x.x/1650_fix_rollover_strategy_log4j1.xml
similarity index 100%
rename from src/changelog/2.21.0/1650_fix_rollover_strategy_log4j1.xml
rename to src/changelog/.2.x.x/1650_fix_rollover_strategy_log4j1.xml
diff --git a/src/changelog/2.21.0/1681_fix_and_improve_lookup_docs.xml b/src/changelog/.2.x.x/1681_fix_and_improve_lookup_docs.xml
similarity index 100%
rename from src/changelog/2.21.0/1681_fix_and_improve_lookup_docs.xml
rename to src/changelog/.2.x.x/1681_fix_and_improve_lookup_docs.xml
diff --git a/src/changelog/2.21.0/1692_make_JTL_LocationAware.xml b/src/changelog/.2.x.x/1692_make_JTL_LocationAware.xml
similarity index 100%
rename from src/changelog/2.21.0/1692_make_JTL_LocationAware.xml
rename to src/changelog/.2.x.x/1692_make_JTL_LocationAware.xml
diff --git a/src/changelog/2.21.0/1747_mongodb4-long-collection-size-conifg.xml b/src/changelog/.2.x.x/1747_mongodb4-long-collection-size-conifg.xml
similarity index 100%
rename from src/changelog/2.21.0/1747_mongodb4-long-collection-size-conifg.xml
rename to src/changelog/.2.x.x/1747_mongodb4-long-collection-size-conifg.xml
diff --git a/src/changelog/2.21.0/1760_use_java_version_specific_warnings_in_StackLocator.xml b/src/changelog/.2.x.x/1760_use_java_version_specific_warnings_in_StackLocator.xml
similarity index 100%
rename from src/changelog/2.21.0/1760_use_java_version_specific_warnings_in_StackLocator.xml
rename to src/changelog/.2.x.x/1760_use_java_version_specific_warnings_in_StackLocator.xml
diff --git a/src/changelog/2.21.0/1782_allow_multiple_servletcontextlistener_instances.xml b/src/changelog/.2.x.x/1782_allow_multiple_servletcontextlistener_instances.xml
similarity index 98%
rename from src/changelog/2.21.0/1782_allow_multiple_servletcontextlistener_instances.xml
rename to src/changelog/.2.x.x/1782_allow_multiple_servletcontextlistener_instances.xml
index 50f3f61..4173122 100644
--- a/src/changelog/2.21.0/1782_allow_multiple_servletcontextlistener_instances.xml
+++ b/src/changelog/.2.x.x/1782_allow_multiple_servletcontextlistener_instances.xml
@@ -23,6 +23,6 @@
<author name="Christian Seewald" id="github:cseewald"/>
<author id="github:ppkarwasz"/>
<description format="asciidoc">
- Only shutdown Log4j after last `Log4jServletContextListener` is executed.
+ Only shutdown Log4j after last `Log4jServletContextListener` is executed
</description>
</entry>
diff --git a/src/changelog/2.21.0/1783_spring_arbiter_without_environment.xml b/src/changelog/.2.x.x/1783_spring_arbiter_without_environment.xml
similarity index 95%
rename from src/changelog/2.21.0/1783_spring_arbiter_without_environment.xml
rename to src/changelog/.2.x.x/1783_spring_arbiter_without_environment.xml
index 0065cce..610e255 100644
--- a/src/changelog/2.21.0/1783_spring_arbiter_without_environment.xml
+++ b/src/changelog/.2.x.x/1783_spring_arbiter_without_environment.xml
@@ -22,6 +22,6 @@
<issue id="1783" link="https://github.com/apache/logging-log4j2/issues/1783"/>
<author id="github:ppkarwasz"/>
<description format="asciidoc">
- Allow using Spring Arbiter without a Spring environment.
+ Allowed using Spring Arbiter without a Spring environment
</description>
</entry>
diff --git a/src/changelog/2.21.0/1786_fix_async_context_data_loss.xml b/src/changelog/.2.x.x/1786_fix_async_context_data_loss.xml
similarity index 100%
rename from src/changelog/2.21.0/1786_fix_async_context_data_loss.xml
rename to src/changelog/.2.x.x/1786_fix_async_context_data_loss.xml
diff --git a/src/changelog/2.21.0/1805_fix_NPE_in_JTL_LevelResolver.xml b/src/changelog/.2.x.x/1805_fix_NPE_in_JTL_LevelResolver.xml
similarity index 100%
rename from src/changelog/2.21.0/1805_fix_NPE_in_JTL_LevelResolver.xml
rename to src/changelog/.2.x.x/1805_fix_NPE_in_JTL_LevelResolver.xml
diff --git a/src/changelog/2.21.0/LOG4J2-170_Improve_XML_schema.xml b/src/changelog/.2.x.x/LOG4J2-170_Improve_XML_schema.xml
similarity index 100%
rename from src/changelog/2.21.0/LOG4J2-170_Improve_XML_schema.xml
rename to src/changelog/.2.x.x/LOG4J2-170_Improve_XML_schema.xml
diff --git a/src/changelog/2.21.0/LOG4J2-3217_fix_NPE_in_ContextSelector.xml b/src/changelog/.2.x.x/LOG4J2-3217_fix_NPE_in_ContextSelector.xml
similarity index 100%
rename from src/changelog/2.21.0/LOG4J2-3217_fix_NPE_in_ContextSelector.xml
rename to src/changelog/.2.x.x/LOG4J2-3217_fix_NPE_in_ContextSelector.xml
diff --git a/src/changelog/2.21.0/LOG4J2-3657_fix_TL_usage_in_AbstractLogger.xml b/src/changelog/.2.x.x/LOG4J2-3657_fix_TL_usage_in_AbstractLogger.xml
similarity index 100%
rename from src/changelog/2.21.0/LOG4J2-3657_fix_TL_usage_in_AbstractLogger.xml
rename to src/changelog/.2.x.x/LOG4J2-3657_fix_TL_usage_in_AbstractLogger.xml
diff --git a/src/changelog/2.21.0/LOG4J2-3660_fix_notEmpty_converter_for_empty_collections.xml b/src/changelog/.2.x.x/LOG4J2-3660_fix_notEmpty_converter_for_empty_collections.xml
similarity index 100%
rename from src/changelog/2.21.0/LOG4J2-3660_fix_notEmpty_converter_for_empty_collections.xml
rename to src/changelog/.2.x.x/LOG4J2-3660_fix_notEmpty_converter_for_empty_collections.xml
diff --git a/src/changelog/2.21.0/LOG4J2-3663_fix_file_descriptor_leak_on_Tomcat.xml b/src/changelog/.2.x.x/LOG4J2-3663_fix_file_descriptor_leak_on_Tomcat.xml
similarity index 100%
rename from src/changelog/2.21.0/LOG4J2-3663_fix_file_descriptor_leak_on_Tomcat.xml
rename to src/changelog/.2.x.x/LOG4J2-3663_fix_file_descriptor_leak_on_Tomcat.xml
diff --git a/src/changelog/2.21.0/OsgiServiceLocator_npe.xml b/src/changelog/.2.x.x/OsgiServiceLocator_npe.xml
similarity index 100%
rename from src/changelog/2.21.0/OsgiServiceLocator_npe.xml
rename to src/changelog/.2.x.x/OsgiServiceLocator_npe.xml
diff --git a/src/changelog/2.21.0/PreventResourceLeak.xml b/src/changelog/.2.x.x/PreventResourceLeak.xml
similarity index 100%
rename from src/changelog/2.21.0/PreventResourceLeak.xml
rename to src/changelog/.2.x.x/PreventResourceLeak.xml
diff --git a/src/changelog/2.21.0/new-release-process.xml b/src/changelog/.2.x.x/new-release-process.xml
similarity index 100%
rename from src/changelog/2.21.0/new-release-process.xml
rename to src/changelog/.2.x.x/new-release-process.xml
diff --git a/src/changelog/2.21.0/remove-jmx-gui.xml b/src/changelog/.2.x.x/remove-jmx-gui.xml
similarity index 100%
rename from src/changelog/2.21.0/remove-jmx-gui.xml
rename to src/changelog/.2.x.x/remove-jmx-gui.xml
diff --git a/src/changelog/2.21.0/update-1runtime-angus-activation.xml b/src/changelog/.2.x.x/update-1runtime-angus-activation.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-angus-activation.xml
rename to src/changelog/.2.x.x/update-1runtime-angus-activation.xml
diff --git a/src/changelog/2.21.0/update-1runtime-angus-mail.xml b/src/changelog/.2.x.x/update-1runtime-angus-mail.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-angus-mail.xml
rename to src/changelog/.2.x.x/update-1runtime-angus-mail.xml
diff --git a/src/changelog/2.21.0/update-1runtime-cassandra-driver.xml b/src/changelog/.2.x.x/update-1runtime-cassandra-driver.xml
similarity index 98%
rename from src/changelog/2.21.0/update-1runtime-cassandra-driver.xml
rename to src/changelog/.2.x.x/update-1runtime-cassandra-driver.xml
index f90c44d..c8f071a 100644
--- a/src/changelog/2.21.0/update-1runtime-cassandra-driver.xml
+++ b/src/changelog/.2.x.x/update-1runtime-cassandra-driver.xml
@@ -22,6 +22,6 @@
<issue id="1591" link="https://github.com/apache/logging-log4j2/issues/1591"/>
<author id="github:dependabot"/>
<description format="asciidoc">
- Update `com.datastax.cassandra:cassandra-driver-core` to version 3.11.5.
+ Update `com.datastax.cassandra:cassandra-driver-core` to version 3.11.5
</description>
</entry>
diff --git a/src/changelog/2.21.0/update-1runtime-cassandra.xml b/src/changelog/.2.x.x/update-1runtime-cassandra.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-cassandra.xml
rename to src/changelog/.2.x.x/update-1runtime-cassandra.xml
diff --git a/src/changelog/2.21.0/update-1runtime-commons-compress.xml b/src/changelog/.2.x.x/update-1runtime-commons-compress.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-commons-compress.xml
rename to src/changelog/.2.x.x/update-1runtime-commons-compress.xml
diff --git a/src/changelog/2.21.0/update-1runtime-commons-csv.xml b/src/changelog/.2.x.x/update-1runtime-commons-csv.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-commons-csv.xml
rename to src/changelog/.2.x.x/update-1runtime-commons-csv.xml
diff --git a/src/changelog/2.21.0/update-1runtime-jackson.xml b/src/changelog/.2.x.x/update-1runtime-jackson.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-jackson.xml
rename to src/changelog/.2.x.x/update-1runtime-jackson.xml
diff --git a/src/changelog/2.21.0/update-1runtime-jakarta-activation.xml b/src/changelog/.2.x.x/update-1runtime-jakarta-activation.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-jakarta-activation.xml
rename to src/changelog/.2.x.x/update-1runtime-jakarta-activation.xml
diff --git a/src/changelog/2.21.0/update-1runtime-jakarta-mail.xml b/src/changelog/.2.x.x/update-1runtime-jakarta-mail.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-jakarta-mail.xml
rename to src/changelog/.2.x.x/update-1runtime-jakarta-mail.xml
diff --git a/src/changelog/2.21.0/update-1runtime-jctools.xml b/src/changelog/.2.x.x/update-1runtime-jctools.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-jctools.xml
rename to src/changelog/.2.x.x/update-1runtime-jctools.xml
diff --git a/src/changelog/2.21.0/update-1runtime-kafka.xml b/src/changelog/.2.x.x/update-1runtime-kafka.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-kafka.xml
rename to src/changelog/.2.x.x/update-1runtime-kafka.xml
diff --git a/src/changelog/2.21.0/update-1runtime-kubernetes.xml b/src/changelog/.2.x.x/update-1runtime-kubernetes.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-kubernetes.xml
rename to src/changelog/.2.x.x/update-1runtime-kubernetes.xml
diff --git a/src/changelog/2.21.0/update-1runtime-mongodb.xml b/src/changelog/.2.x.x/update-1runtime-mongodb.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-mongodb.xml
rename to src/changelog/.2.x.x/update-1runtime-mongodb.xml
diff --git a/src/changelog/2.21.0/update-1runtime-netty.xml b/src/changelog/.2.x.x/update-1runtime-netty.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-netty.xml
rename to src/changelog/.2.x.x/update-1runtime-netty.xml
diff --git a/src/changelog/2.21.0/update-1runtime-spring-boot.xml b/src/changelog/.2.x.x/update-1runtime-spring-boot.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-spring-boot.xml
rename to src/changelog/.2.x.x/update-1runtime-spring-boot.xml
diff --git a/src/changelog/2.21.0/update-1runtime-spring-framework.xml b/src/changelog/.2.x.x/update-1runtime-spring-framework.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-spring-framework.xml
rename to src/changelog/.2.x.x/update-1runtime-spring-framework.xml
diff --git a/src/changelog/2.21.0/update-1runtime-tomcat-juli.xml b/src/changelog/.2.x.x/update-1runtime-tomcat-juli.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-tomcat-juli.xml
rename to src/changelog/.2.x.x/update-1runtime-tomcat-juli.xml
diff --git a/src/changelog/2.21.0/update-1runtime-woodstox.xml b/src/changelog/.2.x.x/update-1runtime-woodstox.xml
similarity index 100%
rename from src/changelog/2.21.0/update-1runtime-woodstox.xml
rename to src/changelog/.2.x.x/update-1runtime-woodstox.xml
diff --git a/src/changelog/2.21.0/.release-notes.adoc.ftl b/src/changelog/2.21.0/.release-notes.adoc.ftl
deleted file mode 100644
index 4bef52a..0000000
--- a/src/changelog/2.21.0/.release-notes.adoc.ftl
+++ /dev/null
@@ -1,46 +0,0 @@
-////
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-////
-
-[#release-notes-${release.version?replace("[^a-zA-Z0-9]", "-", "r")}]
-== ${release.version}
-
-<#if release.date?has_content>Release date:: ${release.date}</#if>
-
-This release primarily focuses on enhancements to our OSGi and JPMS support and contains several bug fixes.
-It will be the first release built and signed by the CI using the https://keyserver.ubuntu.com/pks/lookup?search=077E8893A6DCC33DD4A4D5B256E73BA9A0B592D0&op=index[ASF Logging Services Release Manager GPG key], which is shared in https://www.apache.org/dist/logging/KEYS[KEYS].
-
-The Log4j 2.21.0 API, as well as the other artifacts, maintains binary compatibility with the previous release.
-
-Apache Log4j 2.21.0 requires Java 8 to run.
-The build requires JDK 11 and generates reproducible binaries.
-
-For complete information on Apache Log4j 2, including instructions on how to submit bug reports, patches, get support, or suggestions for improvement, see http://logging.apache.org/log4j/2.x/[the Apache Log4j 2 website].
-
-=== OSGi changes
-
-All the published artifacts are OSGi bundles or fragments.
-
-This release introduces a change in the bundle symbolic names to allow them to function as JPMS module name: all hyphens `-` present in the bundle names of previous releases were replaced by dots `.`.
-
-=== JPMS changes
-
-All the published artifacts have been migrated from automatic modules to named JPMS modules.
-All packages marked as private in the Javadoc are not exported.
-
-The module name of four bridges (`log4j-slf4j-impl`, `log4j-slf4j2-impl`, `log4j-to-jul` and `log4j-to-slf4j`) have been changed to adhere to the same convention as the OSGi bundle names.
-
-<#include "../.changelog.adoc.ftl">
diff --git a/src/site/_constants.adoc b/src/site/_constants.adoc
index 9e4123d..078500b 100644
--- a/src/site/_constants.adoc
+++ b/src/site/_constants.adoc
@@ -34,7 +34,7 @@
////
:project-github-url: https://github.com/apache/logging-log4j2
-:project-version: 2.21.0
+:project-version: 2.21.0-SNAPSHOT
:project-name: Log4j
:project-id: log4j
:java-target-version: 8
diff --git a/src/site/_release-notes.adoc b/src/site/_release-notes.adoc
index c4743cb..6f9d281 100644
--- a/src/site/_release-notes.adoc
+++ b/src/site/_release-notes.adoc
@@ -36,7 +36,7 @@
[#release-notes]
= Release Notes
-include::_release-notes/_2.21.0.adoc[]
+include::_release-notes/_2.x.x.adoc[]
include::_release-notes/_2.20.0.adoc[]
include::_release-notes/_2.19.0.adoc[]
include::_release-notes/_2.18.0.adoc[]
diff --git a/src/site/_release-notes/_2.21.0.adoc b/src/site/_release-notes/_2.21.0.adoc
deleted file mode 100644
index 9805999..0000000
--- a/src/site/_release-notes/_2.21.0.adoc
+++ /dev/null
@@ -1,124 +0,0 @@
-////
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-////
-
-[#release-notes-2-21-0]
-== 2.21.0
-
-Release date:: 2023-10-09
-
-This release primarily focuses on enhancements to our OSGi and JPMS support and contains several bug fixes.
-It will be the first release built and signed by the CI using the https://keyserver.ubuntu.com/pks/lookup?search=077E8893A6DCC33DD4A4D5B256E73BA9A0B592D0&op=index[ASF Logging Services Release Manager GPG key], which is shared in https://www.apache.org/dist/logging/KEYS[KEYS].
-
-The Log4j 2.21.0 API, as well as the other artifacts, maintains binary compatibility with the previous release.
-
-Apache Log4j 2.21.0 requires Java 8 to run.
-The build requires JDK 11 and generates reproducible binaries.
-
-For complete information on Apache Log4j 2, including instructions on how to submit bug reports, patches, get support, or suggestions for improvement, see http://logging.apache.org/log4j/2.x/[the Apache Log4j 2 website].
-
-=== OSGi changes
-
-All the published artifacts are OSGi bundles or fragments.
-
-This release introduces a change in the bundle symbolic names to allow them to function as JPMS module name: all hyphens `-` present in the bundle names of previous releases were replaced by dots `.`.
-
-=== JPMS changes
-
-All the published artifacts have been migrated from automatic modules to named JPMS modules.
-All packages marked as private in the Javadoc are not exported.
-
-The module name of four bridges (`log4j-slf4j-impl`, `log4j-slf4j2-impl`, `log4j-to-jul` and `log4j-to-slf4j`) have been changed to adhere to the same convention as the OSGi bundle names.
-
-
-=== Added
-
-* Added marker parent support to `JsonTemplateLayout` (https://github.com/apache/logging-log4j2/pull/1381[1381])
-* Added https://facebook.github.io/zstd/[ZStandard compression] support (https://github.com/apache/logging-log4j2/issues/1508[1508], https://github.com/apache/logging-log4j2/pull/1514[1514])
-* Added a warning for incorrect syntax of highlighting styles (https://github.com/apache/logging-log4j2/issues/1545[1545], https://github.com/apache/logging-log4j2/pull/1637[1637])
-
-=== Changed
-
-* Open `FileExtension` methods to allow their usage in custom ``RolloverStrategy``s (https://github.com/apache/logging-log4j2/issues/1365[1365], https://github.com/apache/logging-log4j2/pull/1683[1683])
-* Bumped the minimum Java version required for the build to JDK 11. Runtime requirements remain unchanged. (https://github.com/apache/logging-log4j2/issues/1369[1369])
-* Set the default `minLevel` and `maxLevel` of `LevelRangeFilter` to `OFF` and `ALL`, respectively (https://github.com/apache/logging-log4j2/pull/1503[1503])
-* Removed additional `isFiltered` checks in `AsyncLoggerConfig` (https://github.com/apache/logging-log4j2/pull/1550[1550])
-* Use Java version-specific warnings in `StackLocator` (https://github.com/apache/logging-log4j2/pull/1760[1760])
-* Started logging a status error event instead of an NPE in `OsgiServiceLocator.loadServices(Class, Lookup, boolean)` when a bundle has no valid `BundleContext` for a service type
-* Implemented a CI-based release process
-* Update Eclipse Angus Activation to version https://github.com/eclipse-ee4j/angus-activation/releases/tag/2.0.1[2.0.1] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Eclipse Angus Mail to version https://github.com/eclipse-ee4j/angus-mail/releases/tag/2.0.2[2.0.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update `com.datastax.cassandra:cassandra-driver-core` to version 3.11.5. (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Apache Cassandra to version https://github.com/apache/cassandra/blob/cassandra-3.11/CHANGES.txt[3.11.16] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Apache Commons Compress to version https://commons.apache.org/proper/commons-compress/changes-report.html#a1.24.0[1.24.0] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Apache Commons CSV to version https://commons.apache.org/proper/commons-csv/changes-report.html#a1.10.0[1.10.0] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Jackson to version https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.15.2[2.15.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Jakarta Activation API to version https://jakarta.ee/specifications/activation/2.1/changelog/[2.1.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Jakarta Mail API to version https://jakarta.ee/specifications/mail/2.1/changelog/[2.1.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update JCTools to version https://github.com/JCTools/JCTools/blob/master/RELEASE-NOTES.md[4.0.1] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Apache Kafka to version https://archive.apache.org/dist/kafka/3.4.0/RELEASE_NOTES.html[3.4.0] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Kubernetes client to version https://github.com/fabric8io/kubernetes-client/releases?q=5.12.4[5.12.4] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update `org.mongodb:mongodb-driver-core` to version 4.10.2 (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update `io.netty:netty-bom` to version 4.1.97 (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Spring Boot to version https://github.com/spring-projects/spring-boot/releases/tag/v2.7.15[2.7.15] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Spring Framework to version https://github.com/spring-projects/spring-framework/releases/tag/v5.3.29[5.3.29] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Tomcat JULI to version 10.0.27 (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Woodstox to version https://github.com/FasterXML/woodstox/blob/master/release-notes/VERSION[6.5.1] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-
-=== Removed
-
-* Moved `log4j-jmx-gui` to https://github.com/apache/logging-log4j-jmx-gui/actions[its own repository] along with its own release cycle
-
-=== Fixed
-
-* Added validation to rolling file manager path conditions (https://github.com/apache/logging-log4j2/issues/1231[1231])
-* Adapted the OSGi metadata of `log4j-to-slf4j` to work with SLF4J 1 and 2. To achieve that used a version range of `[1.7,3)` for the imported SLF4J packages. (https://github.com/apache/logging-log4j2/issues/1232[1232])
-* Fixed Javadoc failures (https://github.com/apache/logging-log4j2/issues/1275[1275], https://github.com/apache/logging-log4j2/pull/1753[1753])
-* Removed locale-dependent `toLowerCase/toUpperCase` calls (https://github.com/apache/logging-log4j2/pull/1281[1281])
-* Redirected old `/<module>/apidocs` URLs (broken in 2.20.0) to `/javadoc/<module>` (https://github.com/apache/logging-log4j2/pull/1284[1284])
-* Added environment variable arbiter (https://github.com/apache/logging-log4j2/issues/1312[1312])
-* Fixed logging of `java.sql.Date` objects by appending it before Log4J tries to call `java.util.Date.toInstant()` on it (https://github.com/apache/logging-log4j2/pull/1366[1366])
-* Adapted the OSGi metadata of `log4j-api`, `log4j-core`, `log4j-slf4j-impl` and `log4j-slf4j2-impl` to activate the bundle when it is accessed. To achieve that set the `Bundle-ActivationPolicy` to `lazy` for the log4j bundles. (https://github.com/apache/logging-log4j2/issues/1367[1367])
-* Avoided using released objects in `StackTraceStringResolver` of `JsonTemplateLayout` (https://github.com/apache/logging-log4j2/pull/1380[1380])
-* Added missing setter for `connectionStringSource` in `MongoDb4Provider` builder (https://github.com/apache/logging-log4j2/issues/1389[1389])
-* Fixed NPE in `PluginElementVisitor` (https://github.com/apache/logging-log4j2/issues/1391[1391])
-* Add `columnType` as alias for the column mapping `type` attribute. (https://github.com/apache/logging-log4j2/issues/1405[1405])
-* Restored `Log4jMarker` visibility in SLF4J adapters (https://github.com/apache/logging-log4j2/issues/1414[1414])
-* Fixed buffer size in `Log4jFixedFormatter` date time formatter (https://github.com/apache/logging-log4j2/pull/1418[1418])
-* Fixed the propagation of synchronous action failures in `RollingFileManager` and `FileRenameAction` (https://github.com/apache/logging-log4j2/issues/1445[1445], https://github.com/apache/logging-log4j2/pull/1549[1549])
-* Fixed `RollingFileManager` to propagate failed synchronous actions correctly. (https://github.com/apache/logging-log4j2/issues/1445[1445])
-* Replaced the usage of `System.out` in `StackLocator` for warnings with `System.err` (https://github.com/apache/logging-log4j2/issues/1484[1484])
-* Fixed concurrent date-time formatting issue in `PatternLayout` (https://github.com/apache/logging-log4j2/issues/1485[1485])
-* Fixed runtime dependencies documentation (https://github.com/apache/logging-log4j2/pull/1530[1530])
-* Allowed to override FQCN in `Log4jEventBuilder` by implementing `CallerBoundaryAware` (https://github.com/apache/logging-log4j2/pull/1533[1533])
-* Migrated MongoDB tests to JUnit 5 and Flapdoodle Embedded MongoDB 4 (https://github.com/apache/logging-log4j2/issues/1589[1589])
-* Rewrote message parameter formatter with improved escape handling (https://github.com/apache/logging-log4j2/issues/1626[1626])
-* Improved formatting and serialization of `StackTraceElement` on JDK 9+ (https://github.com/apache/logging-log4j2/issues/1640[1640])
-* Fixed `MemoryMappedFileAppender` buffer unmapping on JRE 9+ (https://github.com/apache/logging-log4j2/issues/1646[1646])
-* Fixed rollover strategy in the Log4j 1.x compatibility layer (https://github.com/apache/logging-log4j2/issues/1650[1650])
-* Removed incorrect mention of `base64` lookup and improve the rest of the lookup manual (https://github.com/apache/logging-log4j2/issues/1681[1681], https://issues.apache.org/jira/browse/LOG4J2-3504[LOG4J2-3504])
-* Implemented `LocationAware` for `JsonTemplateLayout`, since this was causing location not being passed to underlying appenders (https://github.com/apache/logging-log4j2/issues/1692[1692])
-* Added support for `long` values in MongoDb 4 appender to configure `collectionSize` (https://github.com/apache/logging-log4j2/issues/1747[1747])
-* Only shutdown Log4j after last `Log4jServletContextListener` is executed. (https://github.com/apache/logging-log4j2/issues/1782[1782])
-* Allow using Spring Arbiter without a Spring environment. (https://github.com/apache/logging-log4j2/issues/1783[1783])
-* Fixed context data loss if `<AsyncLogger>` components are used with an all async logger context (https://github.com/apache/logging-log4j2/issues/1786[1786])
-* Fixed `JsonTemplateLayout` NPE thrown on custom log levels (https://github.com/apache/logging-log4j2/issues/1805[1805])
-* Improved `Log4j-config.xsd` schema (https://issues.apache.org/jira/browse/LOG4J2-170[LOG4J2-170])
-* Fixed NPE in `ContextSelector` (https://issues.apache.org/jira/browse/LOG4J2-3217[LOG4J2-3217], https://github.com/apache/logging-log4j2/pull/1538[1538])
-* Avoided allocating ``ThreadLocal``s in `AbstractLogger` when they are disabled, since this was causing memory leaks due to retained reference to class loaders in web applications (https://issues.apache.org/jira/browse/LOG4J2-3657[LOG4J2-3657])
-* Fixed `%notEmpty` directive of `PatternLayout` for empty MDC/NDC inputs (https://issues.apache.org/jira/browse/LOG4J2-3660[LOG4J2-3660])
-* Fixed file descriptor leak on Tomcat (https://issues.apache.org/jira/browse/LOG4J2-3663[LOG4J2-3663])
-* Ensured `FileOutputStream` is closed in `CommonsCompressAction.execute()`
diff --git a/src/site/_release-notes/_2.x.x.adoc b/src/site/_release-notes/_2.x.x.adoc
index f6d6875..c3204dc 100644
--- a/src/site/_release-notes/_2.x.x.adoc
+++ b/src/site/_release-notes/_2.x.x.adoc
@@ -15,29 +15,110 @@
limitations under the License.
////
-////
- ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
- ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
- ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
- ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
- ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
-
- IF THIS FILE DOESN'T HAVE A `.ftl` SUFFIX, IT IS AUTO-GENERATED, DO NOT EDIT IT!
-
- Version-specific release notes (`7.8.0.adoc`, etc.) are generated from `src/changelog/*/.release-notes.adoc.ftl`.
- Auto-generation happens during `generate-sources` phase of Maven.
- Hence, you must always
-
- 1. Find and edit the associated `.release-notes.adoc.ftl`
- 2. Run `./mvnw generate-sources`
- 3. Commit both `.release-notes.adoc.ftl` and the generated `7.8.0.adoc`
-////
-
[#release-notes-2-x-x]
== 2.x.x
-This is a placeholder introduction to these release notes.
-This will be updated prior to the release.
+This release primarily focuses on enhancements to our OSGi and JPMS support and contains several bug fixes.
+It will be the first release built and signed by the CI using the https://keyserver.ubuntu.com/pks/lookup?search=077E8893A6DCC33DD4A4D5B256E73BA9A0B592D0&op=index[ASF Logging Services Release Manager GPG key], which is shared in https://www.apache.org/dist/logging/KEYS[KEYS].
+The Log4j 2.21.0 API, as well as the other artifacts, maintains binary compatibility with the previous release.
+
+Apache Log4j 2.21.0 requires Java 8 to run.
+The build requires JDK 11 and generates reproducible binaries.
+
+For complete information on Apache Log4j 2, including instructions on how to submit bug reports, patches, get support, or suggestions for improvement, see http://logging.apache.org/log4j/2.x/[the Apache Log4j 2 website].
+
+=== OSGi changes
+
+All the published artifacts are OSGi bundles or fragments.
+
+This release introduces a change in the bundle symbolic names to allow them to function as JPMS module name: all hyphens `-` present in the bundle names of previous releases were replaced by dots `.`.
+
+=== JPMS changes
+
+All the published artifacts have been migrated from automatic modules to named JPMS modules.
+All packages marked as private in the Javadoc are not exported.
+
+The module name of four bridges (`log4j-slf4j-impl`, `log4j-slf4j2-impl`, `log4j-to-jul` and `log4j-to-slf4j`) have been changed to adhere to the same convention as the OSGi bundle names.
+
+
+=== Added
+
+* Added marker parent support to `JsonTemplateLayout` (https://github.com/apache/logging-log4j2/pull/1381[1381])
+* Added https://facebook.github.io/zstd/[ZStandard compression] support (https://github.com/apache/logging-log4j2/issues/1508[1508], https://github.com/apache/logging-log4j2/pull/1514[1514])
+* Added a warning for incorrect syntax of highlighting styles (https://github.com/apache/logging-log4j2/issues/1545[1545], https://github.com/apache/logging-log4j2/pull/1637[1637])
+
+=== Changed
+
+* Open `FileExtension` methods to allow their usage in custom ``RolloverStrategy``s (https://github.com/apache/logging-log4j2/issues/1365[1365], https://github.com/apache/logging-log4j2/pull/1683[1683])
+* Bumped the minimum Java version required for the build to JDK 11. Runtime requirements remain unchanged. (https://github.com/apache/logging-log4j2/issues/1369[1369])
+* Set the default `minLevel` and `maxLevel` of `LevelRangeFilter` to `OFF` and `ALL`, respectively (https://github.com/apache/logging-log4j2/pull/1503[1503])
+* Removed additional `isFiltered` checks in `AsyncLoggerConfig` (https://github.com/apache/logging-log4j2/pull/1550[1550])
+* Use Java version-specific warnings in `StackLocator` (https://github.com/apache/logging-log4j2/pull/1760[1760])
+* Started logging a status error event instead of an NPE in `OsgiServiceLocator.loadServices(Class, Lookup, boolean)` when a bundle has no valid `BundleContext` for a service type
+* Implemented a CI-based release process
+* Update Eclipse Angus Activation to version https://github.com/eclipse-ee4j/angus-activation/releases/tag/2.0.1[2.0.1] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Eclipse Angus Mail to version https://github.com/eclipse-ee4j/angus-mail/releases/tag/2.0.2[2.0.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update `com.datastax.cassandra:cassandra-driver-core` to version 3.11.5 (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Apache Cassandra to version https://github.com/apache/cassandra/blob/cassandra-3.11/CHANGES.txt[3.11.16] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Apache Commons Compress to version https://commons.apache.org/proper/commons-compress/changes-report.html#a1.24.0[1.24.0] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Apache Commons CSV to version https://commons.apache.org/proper/commons-csv/changes-report.html#a1.10.0[1.10.0] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Jackson to version https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.15.2[2.15.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Jakarta Activation API to version https://jakarta.ee/specifications/activation/2.1/changelog/[2.1.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Jakarta Mail API to version https://jakarta.ee/specifications/mail/2.1/changelog/[2.1.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update JCTools to version https://github.com/JCTools/JCTools/blob/master/RELEASE-NOTES.md[4.0.1] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Apache Kafka to version https://archive.apache.org/dist/kafka/3.4.0/RELEASE_NOTES.html[3.4.0] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Kubernetes client to version https://github.com/fabric8io/kubernetes-client/releases?q=5.12.4[5.12.4] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update `org.mongodb:mongodb-driver-core` to version 4.10.2 (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update `io.netty:netty-bom` to version 4.1.97 (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Spring Boot to version https://github.com/spring-projects/spring-boot/releases/tag/v2.7.15[2.7.15] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Spring Framework to version https://github.com/spring-projects/spring-framework/releases/tag/v5.3.29[5.3.29] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Tomcat JULI to version 10.0.27 (https://github.com/apache/logging-log4j2/issues/1591[1591])
+* Update Woodstox to version https://github.com/FasterXML/woodstox/blob/master/release-notes/VERSION[6.5.1] (https://github.com/apache/logging-log4j2/issues/1591[1591])
+
+=== Removed
+
+* Moved `log4j-jmx-gui` to https://github.com/apache/logging-log4j-jmx-gui/actions[its own repository] along with its own release cycle
+
+=== Fixed
+
+* Added validation to rolling file manager path conditions (https://github.com/apache/logging-log4j2/issues/1231[1231])
+* Adapted the OSGi metadata of `log4j-to-slf4j` to work with SLF4J 1 and 2. To achieve that used a version range of `[1.7,3)` for the imported SLF4J packages. (https://github.com/apache/logging-log4j2/issues/1232[1232])
+* Fixed Javadoc failures (https://github.com/apache/logging-log4j2/issues/1275[1275], https://github.com/apache/logging-log4j2/pull/1753[1753])
+* Removed locale-dependent `toLowerCase/toUpperCase` calls (https://github.com/apache/logging-log4j2/pull/1281[1281])
+* Redirected old `/<module>/apidocs` URLs (broken in 2.20.0) to `/javadoc/<module>` (https://github.com/apache/logging-log4j2/pull/1284[1284])
+* Added environment variable arbiter (https://github.com/apache/logging-log4j2/issues/1312[1312])
+* Fixed logging of `java.sql.Date` objects by appending it before Log4J tries to call `java.util.Date.toInstant()` on it (https://github.com/apache/logging-log4j2/pull/1366[1366])
+* Adapted the OSGi metadata of `log4j-api`, `log4j-core`, `log4j-slf4j-impl` and `log4j-slf4j2-impl` to activate the bundle when it is accessed. To achieve that set the `Bundle-ActivationPolicy` to `lazy` for the log4j bundles. (https://github.com/apache/logging-log4j2/issues/1367[1367])
+* Avoided using released objects in `StackTraceStringResolver` of `JsonTemplateLayout` (https://github.com/apache/logging-log4j2/pull/1380[1380])
+* Added missing setter for `connectionStringSource` in `MongoDb4Provider` builder (https://github.com/apache/logging-log4j2/issues/1389[1389])
+* Fixed NPE in `PluginElementVisitor` (https://github.com/apache/logging-log4j2/issues/1391[1391])
+* Added `columnType` as alias for the column mapping `type` attribute (https://github.com/apache/logging-log4j2/issues/1405[1405])
+* Restored `Log4jMarker` visibility in SLF4J adapters (https://github.com/apache/logging-log4j2/issues/1414[1414])
+* Fixed buffer size in `Log4jFixedFormatter` date time formatter (https://github.com/apache/logging-log4j2/pull/1418[1418])
+* Fixed the propagation of synchronous action failures in `RollingFileManager` and `FileRenameAction` (https://github.com/apache/logging-log4j2/issues/1445[1445], https://github.com/apache/logging-log4j2/pull/1549[1549])
+* Fixed `RollingFileManager` to propagate failed synchronous actions correctly (https://github.com/apache/logging-log4j2/issues/1445[1445])
+* Replaced the usage of `System.out` in `StackLocator` for warnings with `System.err` (https://github.com/apache/logging-log4j2/issues/1484[1484])
+* Fixed concurrent date-time formatting issue in `PatternLayout` (https://github.com/apache/logging-log4j2/issues/1485[1485])
+* Fixed runtime dependencies documentation (https://github.com/apache/logging-log4j2/pull/1530[1530])
+* Allowed to override FQCN in `Log4jEventBuilder` by implementing `CallerBoundaryAware` (https://github.com/apache/logging-log4j2/pull/1533[1533])
+* Migrated MongoDB tests to JUnit 5 and Flapdoodle Embedded MongoDB 4 (https://github.com/apache/logging-log4j2/issues/1589[1589])
+* Rewrote message parameter formatter with improved escape handling (https://github.com/apache/logging-log4j2/issues/1626[1626])
+* Improved formatting and serialization of `StackTraceElement` on JDK 9+ (https://github.com/apache/logging-log4j2/issues/1640[1640])
+* Fixed `MemoryMappedFileAppender` buffer unmapping on JRE 9+ (https://github.com/apache/logging-log4j2/issues/1646[1646])
+* Fixed rollover strategy in the Log4j 1.x compatibility layer (https://github.com/apache/logging-log4j2/issues/1650[1650])
+* Removed incorrect mention of `base64` lookup and improve the rest of the lookup manual (https://github.com/apache/logging-log4j2/issues/1681[1681], https://issues.apache.org/jira/browse/LOG4J2-3504[LOG4J2-3504])
+* Implemented `LocationAware` for `JsonTemplateLayout`, since this was causing location not being passed to underlying appenders (https://github.com/apache/logging-log4j2/issues/1692[1692])
+* Added support for `long` values in MongoDb 4 appender to configure `collectionSize` (https://github.com/apache/logging-log4j2/issues/1747[1747])
+* Only shutdown Log4j after last `Log4jServletContextListener` is executed (https://github.com/apache/logging-log4j2/issues/1782[1782])
+* Allowed using Spring Arbiter without a Spring environment (https://github.com/apache/logging-log4j2/issues/1783[1783])
+* Fixed context data loss if `<AsyncLogger>` components are used with an all async logger context (https://github.com/apache/logging-log4j2/issues/1786[1786])
+* Fixed `JsonTemplateLayout` NPE thrown on custom log levels (https://github.com/apache/logging-log4j2/issues/1805[1805])
+* Improved `Log4j-config.xsd` schema (https://issues.apache.org/jira/browse/LOG4J2-170[LOG4J2-170])
+* Fixed NPE in `ContextSelector` (https://issues.apache.org/jira/browse/LOG4J2-3217[LOG4J2-3217], https://github.com/apache/logging-log4j2/pull/1538[1538])
+* Avoided allocating ``ThreadLocal``s in `AbstractLogger` when they are disabled, since this was causing memory leaks due to retained reference to class loaders in web applications (https://issues.apache.org/jira/browse/LOG4J2-3657[LOG4J2-3657])
+* Fixed `%notEmpty` directive of `PatternLayout` for empty MDC/NDC inputs (https://issues.apache.org/jira/browse/LOG4J2-3660[LOG4J2-3660])
+* Fixed file descriptor leak on Tomcat (https://issues.apache.org/jira/browse/LOG4J2-3663[LOG4J2-3663])
+* Ensured `FileOutputStream` is closed in `CommonsCompressAction.execute()`
diff --git a/src/site/asciidoc/_release-notes/_2.21.0.adoc b/src/site/asciidoc/_release-notes/_2.21.0.adoc
deleted file mode 100644
index 9034f17..0000000
--- a/src/site/asciidoc/_release-notes/_2.21.0.adoc
+++ /dev/null
@@ -1,121 +0,0 @@
-////
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-////
-
-[#release-notes-2-21-0]
-== 2.21.0
-
-Release date:: 2023-10-09
-
-This release primarily focuses on enhancements to our OSGi and JPMS support and contains several bug fixes.
-It will be the first release built and signed by the CI using the https://keyserver.ubuntu.com/pks/lookup?search=077E8893A6DCC33DD4A4D5B256E73BA9A0B592D0&op=index[ASF Logging Services Release Manager GPG key], which is shared in https://www.apache.org/dist/logging/KEYS[KEYS].
-
-The Log4j 2.21.0 API, as well as the other artifacts, maintains binary compatibility with the previous release.
-
-Apache Log4j 2.21.0 requires Java 8 to run.
-The build requires JDK 11 and generates reproducible binaries.
-
-For complete information on Apache Log4j 2, including instructions on how to submit bug reports, patches, get support, or suggestions for improvement, see http://logging.apache.org/log4j/2.x/[the Apache Log4j 2 website].
-
-=== OSGi changes
-
-All the published artifacts are OSGi bundles or fragments.
-
-This release introduces a change in the bundle symbolic names to allow them to function as JPMS module name: all hyphens `-` present in the bundle names of previous releases were replaced by dots `.`.
-
-=== JPMS changes
-
-All the published artifacts have been migrated from automatic modules to named JPMS modules.
-All packages marked as private in the Javadoc are not exported.
-
-The module name of four bridges (`log4j-slf4j-impl`, `log4j-slf4j2-impl`, `log4j-to-jul` and `log4j-to-slf4j`) have been changed to adhere to the same convention as the OSGi bundle names.
-
-
-=== Added
-
-* Added marker parent support to `JsonTemplateLayout` (https://github.com/apache/logging-log4j2/pull/1381[1381])
-* Added a warning for incorrect syntax of highlighting styles (https://github.com/apache/logging-log4j2/issues/1545[1545], https://github.com/apache/logging-log4j2/pull/1637[1637])
-
-=== Changed
-
-* Bumped the minimum Java version required for the build to JDK 11. Runtime requirements remain unchanged. (https://github.com/apache/logging-log4j2/issues/1369[1369])
-* Set the default `minLevel` and `maxLevel` of `LevelRangeFilter` to `OFF` and `ALL`, respectively (https://github.com/apache/logging-log4j2/pull/1503[1503])
-* Removed additional `isFiltered` checks in `AsyncLoggerConfig` (https://github.com/apache/logging-log4j2/pull/1550[1550])
-* Use Java version-specific warnings in `StackLocator` (https://github.com/apache/logging-log4j2/pull/1760[1760])
-* Started logging a status error event instead of an NPE in `OsgiServiceLocator.loadServices(Class, Lookup, boolean)` when a bundle has no valid `BundleContext` for a service type
-* Implemented a CI-based release process
-* Update Eclipse Angus Activation to version https://github.com/eclipse-ee4j/angus-activation/releases/tag/2.0.1[2.0.1] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Eclipse Angus Mail to version https://github.com/eclipse-ee4j/angus-mail/releases/tag/2.0.2[2.0.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update `com.datastax.cassandra:cassandra-driver-core` to version 3.11.5. (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Apache Cassandra to version https://github.com/apache/cassandra/blob/cassandra-3.11/CHANGES.txt[3.11.16] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Apache Commons Compress to version https://commons.apache.org/proper/commons-compress/changes-report.html#a1.24.0[1.24.0] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Apache Commons CSV to version https://commons.apache.org/proper/commons-csv/changes-report.html#a1.10.0[1.10.0] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Jackson to version https://github.com/FasterXML/jackson/wiki/Jackson-Release-2.15.2[2.15.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Jakarta Activation API to version https://jakarta.ee/specifications/activation/2.1/changelog/[2.1.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Jakarta Mail API to version https://jakarta.ee/specifications/mail/2.1/changelog/[2.1.2] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update JCTools to version https://github.com/JCTools/JCTools/blob/master/RELEASE-NOTES.md[4.0.1] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Apache Kafka to version https://archive.apache.org/dist/kafka/3.4.0/RELEASE_NOTES.html[3.4.0] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Kubernetes client to version https://github.com/fabric8io/kubernetes-client/releases?q=5.12.4[5.12.4] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update `org.mongodb:mongodb-driver-core` to version 4.10.2 (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update `io.netty:netty-bom` to version 4.1.97 (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Spring Boot to version https://github.com/spring-projects/spring-boot/releases/tag/v2.7.15[2.7.15] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Spring Framework to version https://github.com/spring-projects/spring-framework/releases/tag/v5.3.29[5.3.29] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Tomcat JULI to version 10.0.27 (https://github.com/apache/logging-log4j2/issues/1591[1591])
-* Update Woodstox to version https://github.com/FasterXML/woodstox/blob/master/release-notes/VERSION[6.5.1] (https://github.com/apache/logging-log4j2/issues/1591[1591])
-
-=== Removed
-
-* Moved `log4j-jmx-gui` to https://github.com/apache/logging-log4j-jmx-gui/actions[its own repository] along with its own release cycle
-
-=== Fixed
-
-* Added validation to rolling file manager path conditions (https://github.com/apache/logging-log4j2/issues/1231[1231])
-* Adapted the OSGi metadata of `log4j-to-slf4j` to work with SLF4J 1 and 2. To achieve that used a version range of `[1.7,3)` for the imported SLF4J packages. (https://github.com/apache/logging-log4j2/issues/1232[1232])
-* Removed locale-dependent `toLowerCase/toUpperCase` calls (https://github.com/apache/logging-log4j2/pull/1281[1281])
-* Redirected old `/<module>/apidocs` URLs (broken in 2.20.0) to `/javadoc/<module>` (https://github.com/apache/logging-log4j2/pull/1284[1284])
-* Added environment variable arbiter (https://github.com/apache/logging-log4j2/issues/1312[1312])
-* Fixed logging of `java.sql.Date` objects by appending it before Log4J tries to call `java.util.Date.toInstant()` on it (https://github.com/apache/logging-log4j2/pull/1366[1366])
-* Adapted the OSGi metadata of `log4j-api`, `log4j-core`, `log4j-slf4j-impl` and `log4j-slf4j2-impl` to activate the bundle when it is accessed. To achieve that set the `Bundle-ActivationPolicy` to `lazy` for the log4j bundles. (https://github.com/apache/logging-log4j2/issues/1367[1367])
-* Avoided using released objects in `StackTraceStringResolver` of `JsonTemplateLayout` (https://github.com/apache/logging-log4j2/pull/1380[1380])
-* Added missing setter for `connectionStringSource` in `MongoDb4Provider` builder (https://github.com/apache/logging-log4j2/issues/1389[1389])
-* Fixed NPE in `PluginElementVisitor` (https://github.com/apache/logging-log4j2/issues/1391[1391])
-* Add `columnType` as alias for the column mapping `type` attribute. (https://github.com/apache/logging-log4j2/issues/1405[1405])
-* Restored `Log4jMarker` visibility in SLF4J adapters (https://github.com/apache/logging-log4j2/issues/1414[1414])
-* Fixed buffer size in `Log4jFixedFormatter` date time formatter (https://github.com/apache/logging-log4j2/pull/1418[1418])
-* Fixed the propagation of synchronous action failures in `RollingFileManager` and `FileRenameAction` (https://github.com/apache/logging-log4j2/issues/1445[1445], https://github.com/apache/logging-log4j2/pull/1549[1549])
-* Fixed `RollingFileManager` to propagate failed synchronous actions correctly. (https://github.com/apache/logging-log4j2/issues/1445[1445])
-* Replaced the usage of `System.out` in `StackLocator` for warnings with `System.err` (https://github.com/apache/logging-log4j2/issues/1484[1484])
-* Fixed concurrent date-time formatting issue in `PatternLayout` (https://github.com/apache/logging-log4j2/issues/1485[1485])
-* Fixed runtime dependencies documentation (https://github.com/apache/logging-log4j2/pull/1530[1530])
-* Allowed to override FQCN in `Log4jEventBuilder` by implementing `CallerBoundaryAware` (https://github.com/apache/logging-log4j2/pull/1533[1533])
-* Migrated MongoDB tests to JUnit 5 and Flapdoodle Embedded MongoDB 4 (https://github.com/apache/logging-log4j2/issues/1589[1589])
-* Rewrote message parameter formatter with improved escape handling (https://github.com/apache/logging-log4j2/issues/1626[1626])
-* Improved formatting and serialization of `StackTraceElement` on JDK 9+ (https://github.com/apache/logging-log4j2/issues/1640[1640])
-* Fixed `MemoryMappedFileAppender` buffer unmapping on JRE 9+ (https://github.com/apache/logging-log4j2/issues/1646[1646])
-* Fixed rollover strategy in the Log4j 1.x compatibility layer (https://github.com/apache/logging-log4j2/issues/1650[1650])
-* Removed incorrect mention of `base64` lookup and improve the rest of the lookup manual (https://github.com/apache/logging-log4j2/issues/1681[1681], https://issues.apache.org/jira/browse/LOG4J2-3504[LOG4J2-3504])
-* Implemented `LocationAware` for `JsonTemplateLayout`, since this was causing location not being passed to underlying appenders (https://github.com/apache/logging-log4j2/issues/1692[1692])
-* Added support for `long` values in MongoDb 4 appender to configure `collectionSize` (https://github.com/apache/logging-log4j2/issues/1747[1747])
-* Only shutdown Log4j after last `Log4jServletContextListener` is executed. (https://github.com/apache/logging-log4j2/issues/1782[1782])
-* Allow using Spring Arbiter without a Spring environment. (https://github.com/apache/logging-log4j2/issues/1783[1783])
-* Fixed context data loss if `<AsyncLogger>` components are used with an all async logger context (https://github.com/apache/logging-log4j2/issues/1786[1786])
-* Fixed `JsonTemplateLayout` NPE thrown on custom log levels (https://github.com/apache/logging-log4j2/issues/1805[1805])
-* Improved `Log4j-config.xsd` schema (https://issues.apache.org/jira/browse/LOG4J2-170[LOG4J2-170])
-* Fixed NPE in `ContextSelector` (https://issues.apache.org/jira/browse/LOG4J2-3217[LOG4J2-3217], https://github.com/apache/logging-log4j2/pull/1538[1538])
-* Avoided allocating ``ThreadLocal``s in `AbstractLogger` when they are disabled, since this was causing memory leaks due to retained reference to class loaders in web applications (https://issues.apache.org/jira/browse/LOG4J2-3657[LOG4J2-3657])
-* Fixed `%notEmpty` directive of `PatternLayout` for empty MDC/NDC inputs (https://issues.apache.org/jira/browse/LOG4J2-3660[LOG4J2-3660])
-* Fixed file descriptor leak on Tomcat (https://issues.apache.org/jira/browse/LOG4J2-3663[LOG4J2-3663])
-* Ensured `FileOutputStream` is closed in `CommonsCompressAction.execute()`