diff --git a/.editorconfig b/.editorconfig
index f9451f42..e50b5f2f 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -205,4 +205,10 @@ dotnet_diagnostic.KR1037.severity = none
# NUnit2045: Use Assert.Multiple
dotnet_diagnostic.NUnit2045.severity = none
# IDE0079: Remove unnecessary suppressions
-dotnet_diagnostic.IDE0079.severity = none
\ No newline at end of file
+dotnet_diagnostic.IDE0079.severity = none
+
+[*.xml]
+tab_width = 2
+indent_size = 2
+indent_style = space
+end_of_line = crlf
\ No newline at end of file
diff --git a/.github/workflows/git-broadcast.yml b/.github/workflows/git-broadcast.yml
index 5541bf15..513b8c11 100644
--- a/.github/workflows/git-broadcast.yml
+++ b/.github/workflows/git-broadcast.yml
@@ -1,3 +1,19 @@
+#
+# 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.
+#
name: Broadcast master updates to satellites
on:
diff --git a/.gitignore b/.gitignore
index 0906a46a..a2d86354 100644
--- a/.gitignore
+++ b/.gitignore
@@ -87,9 +87,6 @@ ipch/
*.vspx
*.sap
-# TFS 2012 Local Workspace
-$tf/
-
# Guidance Automation Toolkit
*.gpState
@@ -169,18 +166,6 @@ AppPackages/
# but keep track of directories ending in .cache
!*.[Cc]ache/
-# Others
-ClientBin/
-[Ss]tyle[Cc]op.*
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.pfx
-*.publishsettings
-node_modules/
-orleans.codegen.cs
-
# RIA/Silverlight projects
Generated_Code/
@@ -240,6 +225,8 @@ src/GeneratedAssemblyInfo.cs
*.orig
*.old
*.swp
+node
+node_modules
build-tools
buildreports
vs_buildtools.exe
@@ -247,4 +234,6 @@ dotnetfx35.exe
*.exe
/src/Binaries/*
-local-tasks/*.generated.js
\ No newline at end of file
+local-tasks/*.generated.js
+/.flattened-pom.xml
+validate
\ No newline at end of file
diff --git a/.mvn/jvm.config b/.mvn/jvm.config
new file mode 100644
index 00000000..45a03401
--- /dev/null
+++ b/.mvn/jvm.config
@@ -0,0 +1,13 @@
+-Djava.awt.headless=true
+--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
+--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
+--add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
+--add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
+--add-opens java.base/sun.nio.ch=ALL-UNNAMED
+--add-opens java.base/java.io=ALL-UNNAMED
diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar
new file mode 100644
index 00000000..cb28b0e3
Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 00000000..08ea486a
--- /dev/null
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,18 @@
+# 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.
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.0/apache-maven-3.9.0-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
diff --git a/antora-playbook.yaml b/antora-playbook.yaml
new file mode 100644
index 00000000..6b2a2c3b
--- /dev/null
+++ b/antora-playbook.yaml
@@ -0,0 +1,141 @@
+#
+# 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.
+#
+
+site:
+ title: Apache log4net
+ url: "https://logging.apache.org/log4net"
+ start_page: "ROOT::index.adoc"
+
+content:
+ sources:
+ - url: .
+ branches: HEAD
+ start_paths:
+ - target/generated-site/antora
+ edit_url:
+
+runtime:
+ log:
+ # Fail on warnings
+ failure_level: warn
+
+asciidoc:
+ extensions:
+ - "@asciidoctor/tabs"
+
+ui:
+
+ bundle:
+ url: "https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable"
+ snapshot: true
+
+ # Template files: https://github.com/asciidoctor/asciidoctor-docs-ui/blob/main/src
+ # Template variables: https://docs.antora.org/antora-ui-default/templates
+ supplemental_files:
+
+ # Add `@asciidoctor/tabs` extension styles
+ - path: css/vendor/tabs.css
+ contents: ./node_modules/@asciidoctor/tabs/dist/css/tabs.css
+
+ # Add `@asciidoctor/tabs` extension scripts
+ - path: js/vendor/tabs.js
+ contents: ./node_modules/@asciidoctor/tabs/dist/js/tabs.js
+
+ - path: partials/footer-scripts.hbs
+ contents: |
+
+
+
+
+ {{#if env.SITE_SEARCH_PROVIDER}}
+ {{> search-scripts}}
+ {{/if}}
+
+ - path: partials/head-styles.hbs
+ contents: |
+
+
+
+
+
+
+ - path: partials/header-content.hbs
+ contents: |
+
+
+
+
+ - path: partials/footer-content.hbs
+ contents: |
+
+
+ # Disable component version selector
+ - path: partials/nav-explore.hbs
+ contents: ""
+
+ # Fix the `Edit this page` link
+ - path: partials/edit-this-page.hbs
+ contents: |
+
diff --git a/mvnw b/mvnw
new file mode 100755
index 00000000..af46563a
--- /dev/null
+++ b/mvnw
@@ -0,0 +1,311 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# 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.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Apache Maven Wrapper startup batch script, version 3.2.0
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /usr/local/etc/mavenrc ] ; then
+ . /usr/local/etc/mavenrc
+ fi
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+ if [ -z "$JAVA_HOME" ]; then
+ if [ -x "/usr/libexec/java_home" ]; then
+ JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
+ else
+ JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
+ fi
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=$(java-config --jre-home)
+ fi
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
+ JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="$(which javac)"
+ if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=$(which readlink)
+ if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
+ if $darwin ; then
+ javaHome="$(dirname "\"$javaExecutable\"")"
+ javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
+ else
+ javaExecutable="$(readlink -f "\"$javaExecutable\"")"
+ fi
+ javaHome="$(dirname "\"$javaExecutable\"")"
+ javaHome=$(expr "$javaHome" : '\(.*\)/bin')
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+ if [ -z "$1" ]
+ then
+ echo "Path not specified to find_maven_basedir"
+ return 1
+ fi
+
+ basedir="$1"
+ wdir="$1"
+ while [ "$wdir" != '/' ] ; do
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+ if [ -d "${wdir}" ]; then
+ wdir=$(cd "$wdir/.." || exit 1; pwd)
+ fi
+ # end of workaround
+ done
+ printf '%s' "$(cd "$basedir" || exit 1; pwd)"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ # Remove \r in case we run on Windows within Git Bash
+ # and check out the repository with auto CRLF management
+ # enabled. Otherwise, we may read lines that are delimited with
+ # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
+ # splitting rules.
+ tr -s '\r\n' ' ' < "$1"
+ fi
+}
+
+log() {
+ if [ "$MVNW_VERBOSE" = true ]; then
+ printf '%s\n' "$1"
+ fi
+}
+
+BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
+if [ -z "$BASE_DIR" ]; then
+ exit 1;
+fi
+
+MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
+log "$MAVEN_PROJECTBASEDIR"
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
+if [ -r "$wrapperJarPath" ]; then
+ log "Found $wrapperJarPath"
+else
+ log "Couldn't find $wrapperJarPath, downloading it ..."
+
+ if [ -n "$MVNW_REPOURL" ]; then
+ wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+ else
+ wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+ fi
+ while IFS="=" read -r key value; do
+ # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
+ safeValue=$(echo "$value" | tr -d '\r')
+ case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
+ esac
+ done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+ log "Downloading from: $wrapperUrl"
+
+ if $cygwin; then
+ wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
+ fi
+
+ if command -v wget > /dev/null; then
+ log "Found wget ... using wget"
+ [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+ else
+ wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+ fi
+ elif command -v curl > /dev/null; then
+ log "Found curl ... using curl"
+ [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+ else
+ curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+ fi
+ else
+ log "Falling back to using Java to download"
+ javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
+ javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
+ # For Cygwin, switch paths to Windows format before running javac
+ if $cygwin; then
+ javaSource=$(cygpath --path --windows "$javaSource")
+ javaClass=$(cygpath --path --windows "$javaClass")
+ fi
+ if [ -e "$javaSource" ]; then
+ if [ ! -e "$javaClass" ]; then
+ log " - Compiling MavenWrapperDownloader.java ..."
+ ("$JAVA_HOME/bin/javac" "$javaSource")
+ fi
+ if [ -e "$javaClass" ]; then
+ log " - Running MavenWrapperDownloader.java ..."
+ ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
+ fi
+ fi
+ fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+# If specified, validate the SHA-256 sum of the Maven wrapper jar file
+wrapperSha256Sum=""
+while IFS="=" read -r key value; do
+ case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
+ esac
+done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+if [ -n "$wrapperSha256Sum" ]; then
+ wrapperSha256Result=false
+ if command -v sha256sum > /dev/null; then
+ if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
+ wrapperSha256Result=true
+ fi
+ elif command -v shasum > /dev/null; then
+ if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
+ wrapperSha256Result=true
+ fi
+ else
+ echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
+ echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
+ exit 1
+ fi
+ if [ $wrapperSha256Result = false ]; then
+ echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
+ echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
+ echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
+ exit 1
+ fi
+fi
+
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
+ [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+ MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+LINE_SEPARATOR="
+"
+
+# shellcheck disable=SC2086 # safe args
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ $MAVEN_DEBUG_OPTS \
+ "-Dline.separator=$LINE_SEPARATOR" \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/mvnw.cmd b/mvnw.cmd
new file mode 100644
index 00000000..3cb089f4
--- /dev/null
+++ b/mvnw.cmd
@@ -0,0 +1,212 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Apache Maven Wrapper startup batch script, version 3.2.0
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+ IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Found %WRAPPER_JAR%
+ )
+) else (
+ if not "%MVNW_REPOURL%" == "" (
+ SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+ )
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
+ echo Downloading from: %WRAPPER_URL%
+ )
+
+ powershell -Command "&{"^
+ "$webclient = new-object System.Net.WebClient;"^
+ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+ "}"^
+ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
+ "}"
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Finished downloading %WRAPPER_JAR%
+ )
+)
+@REM End of extension
+
+@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
+SET WRAPPER_SHA_256_SUM=""
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+ IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
+)
+IF NOT %WRAPPER_SHA_256_SUM%=="" (
+ powershell -Command "&{"^
+ "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
+ "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
+ " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
+ " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
+ " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
+ " exit 1;"^
+ "}"^
+ "}"
+ if ERRORLEVEL 1 goto error
+)
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+@REM Do not remove the blank lines
+(set \n=^^^
+
+^
+
+)
+
+%MAVEN_JAVA_EXE% ^
+ %JVM_CONFIG_MAVEN_PROPS% ^
+ %MAVEN_OPTS% ^
+ %MAVEN_DEBUG_OPTS% ^
+ -Dline.separator=%\n% ^
+ -classpath %WRAPPER_JAR% ^
+ "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+ %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
+
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
+
+cmd /C exit /B %ERROR_CODE%
diff --git a/package-lock.json b/package-lock.json
index 41fed7e6..488f552a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,14 +1,17 @@
{
"name": "log4net",
- "version": "2.0.12",
+ "version": "3.0.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "log4net",
- "version": "2.0.12",
+ "version": "3.0.4",
"license": "Apache-2.0",
"devDependencies": {
+ "@antora/cli": "^3.2.0-alpha.4",
+ "@antora/site-generator-default": "^3.2.0-alpha.4",
+ "@asciidoctor/tabs": "^1.0.0-beta.6",
"cross-env": "^7.0.2",
"gulp-debug": "^4.0.0",
"gulp-rename": "^2.0.0",
@@ -22,6 +25,499 @@
"zarro": "^1.178.0"
}
},
+ "node_modules/@antora/asciidoc-loader": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/asciidoc-loader/-/asciidoc-loader-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-nxHlNCMrtzdhkNUItSQwItsusY2ZorZsmcywgr+dLf35aqrjdCH9xGT7ai09vjbuCNn6Die81Nwx5wMiO3YXog==",
+ "dev": true,
+ "dependencies": {
+ "@antora/logger": "3.2.0-alpha.6",
+ "@antora/user-require-helper": "~2.0",
+ "@asciidoctor/core": "~2.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/cli": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/cli/-/cli-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-9sVQUM9grAdBnJooM0eoOjZ4pYEAjsbvjzkqSyDjPtWl7ullY3xnPXD/DK8RACYBjMwSOXqURar4NZWV5EwbdQ==",
+ "dev": true,
+ "dependencies": {
+ "@antora/logger": "3.2.0-alpha.6",
+ "@antora/playbook-builder": "3.2.0-alpha.6",
+ "@antora/user-require-helper": "~2.0",
+ "commander": "~12.1"
+ },
+ "bin": {
+ "antora": "bin/antora"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/cli/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@antora/content-aggregator": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/content-aggregator/-/content-aggregator-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-8Sva2aJUl1ab6/DrSgE3Tuu3mvNSFAJdJQCDHC20kQJvZHjpzDccpCom3CdcdsPkFndBAH4K40OOIxftotQKZQ==",
+ "dev": true,
+ "dependencies": {
+ "@antora/expand-path-helper": "~2.0",
+ "@antora/logger": "3.2.0-alpha.6",
+ "@antora/user-require-helper": "~2.0",
+ "braces": "~3.0",
+ "cache-directory": "~2.0",
+ "fast-glob": "~3.3",
+ "hpagent": "~1.2",
+ "isomorphic-git": "~1.25",
+ "js-yaml": "~4.1",
+ "multi-progress": "~4.0",
+ "picomatch": "~4.0",
+ "progress": "~2.0",
+ "should-proxy": "~1.0",
+ "simple-get": "~4.0",
+ "vinyl": "~3.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/content-aggregator/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/@antora/content-aggregator/node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@antora/content-aggregator/node_modules/vinyl": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz",
+ "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==",
+ "dev": true,
+ "dependencies": {
+ "clone": "^2.1.2",
+ "clone-stats": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@antora/content-classifier": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/content-classifier/-/content-classifier-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-RAE4fmykoGIC+8oAr6rXLKfTzIwaPGmmtOjjm1qf0ZWxuE0NIdP1PLuQ9/Sz0/3Z5x8OwPJlNJeccA3R/zHpwQ==",
+ "dev": true,
+ "dependencies": {
+ "@antora/asciidoc-loader": "3.2.0-alpha.6",
+ "@antora/logger": "3.2.0-alpha.6",
+ "mime-types": "~2.1",
+ "vinyl": "~3.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/content-classifier/node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@antora/content-classifier/node_modules/vinyl": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz",
+ "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==",
+ "dev": true,
+ "dependencies": {
+ "clone": "^2.1.2",
+ "clone-stats": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@antora/document-converter": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/document-converter/-/document-converter-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-qDjGK/rg/zBTWjmIHd6S4YL7g/DNl3B5CRlHZGV0LC1qGmzvM6LltDUv4w9W342/9wGDmYu25GivOKQsuPqbTQ==",
+ "dev": true,
+ "dependencies": {
+ "@antora/asciidoc-loader": "3.2.0-alpha.6"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/expand-path-helper": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@antora/expand-path-helper/-/expand-path-helper-2.0.0.tgz",
+ "integrity": "sha512-CSMBGC+tI21VS2kGW3PV7T2kQTM5eT3f2GTPVLttwaNYbNxDve08en/huzszHJfxo11CcEs26Ostr0F2c1QqeA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/@antora/file-publisher": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/file-publisher/-/file-publisher-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-XsgPP3uPSYEmLr9yBhBJUF7AZglqsuuZAhYjqAVzIwYG+fWtmMxuiF3CE2I7k7POKaL+xfiA2YfgS+5Xm/wsTQ==",
+ "dev": true,
+ "dependencies": {
+ "@antora/expand-path-helper": "~2.0",
+ "@antora/user-require-helper": "~2.0",
+ "vinyl": "~3.0",
+ "yazl": "~2.5"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/file-publisher/node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@antora/file-publisher/node_modules/vinyl": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz",
+ "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==",
+ "dev": true,
+ "dependencies": {
+ "clone": "^2.1.2",
+ "clone-stats": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@antora/logger": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/logger/-/logger-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-8QZh+iHgqVZVWoS/oQ9w92kRyezQVm1j9UE5crVtsJK1bJc75RZOUQUBCCwxOKto+Ci8jCcZvdcpTMz023UkTg==",
+ "dev": true,
+ "dependencies": {
+ "@antora/expand-path-helper": "~2.0",
+ "pino": "~9.2",
+ "pino-pretty": "~11.2",
+ "sonic-boom": "~4.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/navigation-builder": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/navigation-builder/-/navigation-builder-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-rFpMCGeuaBJmGLkhM3t9NhMiJH2X3uIg48YCaYtJkxsgX6MPFxF+nS08RygvWke1RsBfe896L2pqVrcgs2M2Xw==",
+ "dev": true,
+ "dependencies": {
+ "@antora/asciidoc-loader": "3.2.0-alpha.6"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/page-composer": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/page-composer/-/page-composer-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-UA6s1m2qhyzX6WnWhXzLq/5MrGbB5/2PjPo+A1zUTzRfZmSIULjNzHDWj3KoYP8tQuUMbbyMnJmV4VV7ZhqD1w==",
+ "dev": true,
+ "dependencies": {
+ "@antora/logger": "3.2.0-alpha.6",
+ "handlebars": "~4.7",
+ "require-from-string": "~2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/playbook-builder": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/playbook-builder/-/playbook-builder-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-d2nVNl5PWxiotvkLwhYeEphgDO8yh8FkePOZHtLAxKkAiieQRf/nretHMQNE+B9/l7pPPb6E6V+SDeCxa6Jb+g==",
+ "dev": true,
+ "dependencies": {
+ "@iarna/toml": "~2.2",
+ "convict": "~6.2",
+ "js-yaml": "~4.1",
+ "json5": "~2.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/redirect-producer": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/redirect-producer/-/redirect-producer-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-PjfGPWak5oT/ehWJsbAsD5B/Yisl5DuB7gDPP5JWbK/4VrfepkpZodBolVMNs1G7ieThJDfkTZEG5K3fq1BVfg==",
+ "dev": true,
+ "dependencies": {
+ "vinyl": "~3.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/redirect-producer/node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@antora/redirect-producer/node_modules/vinyl": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz",
+ "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==",
+ "dev": true,
+ "dependencies": {
+ "clone": "^2.1.2",
+ "clone-stats": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@antora/site-generator": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/site-generator/-/site-generator-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-ECVq7XarGturr88oQ85AL8T8NE/UDfaNoUkns0cqN3bXAnBfWMRAqVh/LN5e5WmW6oCyXgmaH2eVlxhZ02PISA==",
+ "dev": true,
+ "dependencies": {
+ "@antora/asciidoc-loader": "3.2.0-alpha.6",
+ "@antora/content-aggregator": "3.2.0-alpha.6",
+ "@antora/content-classifier": "3.2.0-alpha.6",
+ "@antora/document-converter": "3.2.0-alpha.6",
+ "@antora/file-publisher": "3.2.0-alpha.6",
+ "@antora/logger": "3.2.0-alpha.6",
+ "@antora/navigation-builder": "3.2.0-alpha.6",
+ "@antora/page-composer": "3.2.0-alpha.6",
+ "@antora/playbook-builder": "3.2.0-alpha.6",
+ "@antora/redirect-producer": "3.2.0-alpha.6",
+ "@antora/site-mapper": "3.2.0-alpha.6",
+ "@antora/site-publisher": "3.2.0-alpha.6",
+ "@antora/ui-loader": "3.2.0-alpha.6",
+ "@antora/user-require-helper": "~2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/site-generator-default": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/site-generator-default/-/site-generator-default-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-CKa4042ltQ3ZuWtoDKPa6CAPlwtSRFZH4GCByofhjZ2Xpey3KzIaxose9ewUdLvvrzk4tP+Ub/gtQYp0sNqnrw==",
+ "dev": true,
+ "dependencies": {
+ "@antora/site-generator": "3.2.0-alpha.6"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/site-mapper": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/site-mapper/-/site-mapper-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-4ads+/5o2JcNWhxZZmbaaOMQdnD6EnjjaTmkFQj/VUCmlUo6p8TkjxW0xDEFBLztVDHMeoZ9R+czNcvPyoc8Fw==",
+ "dev": true,
+ "dependencies": {
+ "@antora/content-classifier": "3.2.0-alpha.6",
+ "vinyl": "~3.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/site-mapper/node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@antora/site-mapper/node_modules/vinyl": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz",
+ "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==",
+ "dev": true,
+ "dependencies": {
+ "clone": "^2.1.2",
+ "clone-stats": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@antora/site-publisher": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/site-publisher/-/site-publisher-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-Sh2iMuwmv1xvWcuHEVhU40odmxWXmnjPMzWDHcKMMZtiqVF/eZQyIbY3vuumdF5aIwyyqZxNTQQVRH15Z6RbOg==",
+ "dev": true,
+ "dependencies": {
+ "@antora/file-publisher": "3.2.0-alpha.6"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/ui-loader": {
+ "version": "3.2.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@antora/ui-loader/-/ui-loader-3.2.0-alpha.6.tgz",
+ "integrity": "sha512-PlIKJLGwxOr5apt+EJ10R8RGz66pjdEns1hPYEwLAorXyPPidGYy+hsMKcBWvI8PdL9OAgw82xI8I4TjW+C6VQ==",
+ "dev": true,
+ "dependencies": {
+ "@antora/expand-path-helper": "~2.0",
+ "braces": "~3.0",
+ "cache-directory": "~2.0",
+ "fast-glob": "~3.3",
+ "hpagent": "~1.2",
+ "js-yaml": "~4.1",
+ "picomatch": "~4.0",
+ "should-proxy": "~1.0",
+ "simple-get": "~4.0",
+ "vinyl": "~3.0",
+ "yauzl": "~3.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@antora/ui-loader/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/@antora/ui-loader/node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@antora/ui-loader/node_modules/vinyl": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz",
+ "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==",
+ "dev": true,
+ "dependencies": {
+ "clone": "^2.1.2",
+ "clone-stats": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0",
+ "replace-ext": "^2.0.0",
+ "teex": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/@antora/ui-loader/node_modules/yauzl": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.3.tgz",
+ "integrity": "sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "pend": "~1.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@antora/user-require-helper": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@antora/user-require-helper/-/user-require-helper-2.0.0.tgz",
+ "integrity": "sha512-5fMfBZfw4zLoFdDAPMQX6Frik90uvfD8rXOA4UpXPOUikkX4uT1Rk6m0/4oi8oS3fcjiIl0k/7Nc+eTxW5TcQQ==",
+ "dev": true,
+ "dependencies": {
+ "@antora/expand-path-helper": "~2.0"
+ },
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/@asciidoctor/core": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-2.2.8.tgz",
+ "integrity": "sha512-oozXk7ZO1RAd/KLFLkKOhqTcG4GO3CV44WwOFg2gMcCsqCUTarvMT7xERIoWW2WurKbB0/ce+98r01p8xPOlBw==",
+ "dev": true,
+ "dependencies": {
+ "asciidoctor-opal-runtime": "0.3.3",
+ "unxhr": "1.0.1"
+ },
+ "engines": {
+ "node": ">=8.11",
+ "npm": ">=5.0.0",
+ "yarn": ">=1.1.0"
+ }
+ },
+ "node_modules/@asciidoctor/tabs": {
+ "version": "1.0.0-beta.6",
+ "resolved": "https://registry.npmjs.org/@asciidoctor/tabs/-/tabs-1.0.0-beta.6.tgz",
+ "integrity": "sha512-gGZnW7UfRXnbiyKNd9PpGKtSuD8+DsqaaTSbQ1dHVkZ76NaolLhdQg8RW6/xqN3pX1vWZEcF4e81+Oe9rNRWxg==",
+ "dev": true,
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
"node_modules/@gulpjs/messages": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz",
@@ -43,6 +539,12 @@
"node": ">=10.13.0"
}
},
+ "node_modules/@iarna/toml": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
+ "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==",
+ "dev": true
+ },
"node_modules/@kwsites/file-exists": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
@@ -288,6 +790,18 @@
"node": ">=10.0.0"
}
},
+ "node_modules/abort-controller": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+ "dev": true,
+ "dependencies": {
+ "event-target-shim": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=6.5"
+ }
+ },
"node_modules/aggregate-error": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
@@ -405,6 +919,12 @@
"node": ">= 8"
}
},
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
"node_modules/arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
@@ -621,6 +1141,37 @@
"node": ">=8"
}
},
+ "node_modules/asciidoctor-opal-runtime": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/asciidoctor-opal-runtime/-/asciidoctor-opal-runtime-0.3.3.tgz",
+ "integrity": "sha512-/CEVNiOia8E5BMO9FLooo+Kv18K4+4JBFRJp8vUy/N5dMRAg+fRNV4HA+o6aoSC79jVU/aT5XvUpxSxSsTS8FQ==",
+ "dev": true,
+ "dependencies": {
+ "glob": "7.1.3",
+ "unxhr": "1.0.1"
+ },
+ "engines": {
+ "node": ">=8.11"
+ }
+ },
+ "node_modules/asciidoctor-opal-runtime/node_modules/glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/asn1": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
@@ -662,6 +1213,12 @@
"node": ">= 10.13.0"
}
},
+ "node_modules/async-lock": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz",
+ "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==",
+ "dev": true
+ },
"node_modules/async-settle": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz",
@@ -680,6 +1237,15 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"dev": true
},
+ "node_modules/atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -879,6 +1445,18 @@
"integrity": "sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==",
"dev": true
},
+ "node_modules/cache-directory": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cache-directory/-/cache-directory-2.0.0.tgz",
+ "integrity": "sha512-7YKEapH+2Uikde8hySyfobXBqPKULDyHNl/lhKm7cKf/GJFdG/tU/WpLrOg2y9aUrQrWUilYqawFIiGJPS6gDA==",
+ "dev": true,
+ "dependencies": {
+ "xdg-basedir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@@ -969,6 +1547,12 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/clean-git-ref": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz",
+ "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==",
+ "dev": true
+ },
"node_modules/clean-stack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
@@ -1069,6 +1653,12 @@
"color-support": "bin.js"
}
},
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -1099,6 +1689,19 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
},
+ "node_modules/convict": {
+ "version": "6.2.4",
+ "resolved": "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz",
+ "integrity": "sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==",
+ "dev": true,
+ "dependencies": {
+ "lodash.clonedeep": "^4.5.0",
+ "yargs-parser": "^20.2.7"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/copy-props": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz",
@@ -1127,6 +1730,18 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
+ "node_modules/crc-32": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+ "dev": true,
+ "bin": {
+ "crc32": "bin/crc32.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/cross-env": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.2.tgz",
@@ -1180,6 +1795,15 @@
"node": ">=0.10"
}
},
+ "node_modules/dateformat": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -1213,7 +1837,22 @@
"strip-dirs": "^2.0.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=4"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dev": true,
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/decompress-tar": {
@@ -1399,6 +2038,12 @@
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
"dev": true
},
+ "node_modules/diff3": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz",
+ "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==",
+ "dev": true
+ },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -1557,6 +2202,24 @@
"through": "^2.3.8"
}
},
+ "node_modules/event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
"node_modules/exec-step": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/exec-step/-/exec-step-0.14.0.tgz",
@@ -1633,6 +2296,12 @@
"node": ">= 0.10"
}
},
+ "node_modules/fast-copy": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz",
+ "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==",
+ "dev": true
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -1646,9 +2315,9 @@
"dev": true
},
"node_modules/fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
@@ -1658,7 +2327,7 @@
"micromatch": "^4.0.4"
},
"engines": {
- "node": ">=8"
+ "node": ">=8.6.0"
}
},
"node_modules/fast-json-stable-stringify": {
@@ -1676,6 +2345,21 @@
"fastest-levenshtein": "^1.0.7"
}
},
+ "node_modules/fast-redact": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
+ "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true
+ },
"node_modules/fastest-levenshtein": {
"version": "1.0.16",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
@@ -2502,16 +3186,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/gulp-zip/node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"node_modules/gulplog": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz",
@@ -2524,6 +3198,27 @@
"node": ">= 10.13.0"
}
},
+ "node_modules/handlebars": {
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.2",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
"node_modules/har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@@ -2640,6 +3335,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "dev": true
+ },
"node_modules/homedir-polyfill": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
@@ -2658,6 +3359,15 @@
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
+ "node_modules/hpagent": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz",
+ "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -3154,12 +3864,81 @@
"node": ">=0.10.0"
}
},
+ "node_modules/isomorphic-git": {
+ "version": "1.25.10",
+ "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.25.10.tgz",
+ "integrity": "sha512-IxGiaKBwAdcgBXwIcxJU6rHLk+NrzYaaPKXXQffcA0GW3IUrQXdUPDXDo+hkGVcYruuz/7JlGBiuaeTCgIgivQ==",
+ "dev": true,
+ "dependencies": {
+ "async-lock": "^1.4.1",
+ "clean-git-ref": "^2.0.1",
+ "crc-32": "^1.2.0",
+ "diff3": "0.0.3",
+ "ignore": "^5.1.4",
+ "minimisted": "^2.0.0",
+ "pako": "^1.0.10",
+ "pify": "^4.0.1",
+ "readable-stream": "^3.4.0",
+ "sha.js": "^2.4.9",
+ "simple-get": "^4.0.1"
+ },
+ "bin": {
+ "isogit": "cli.cjs"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/isomorphic-git/node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/isomorphic-git/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
+ "node_modules/joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
"node_modules/jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
@@ -3190,6 +3969,18 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"dev": true
},
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/jsprim": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
@@ -3292,6 +4083,12 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
+ "node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
+ "dev": true
+ },
"node_modules/lodash.defaultsdeep": {
"version": "4.6.1",
"resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
@@ -3405,6 +4202,18 @@
"node": ">= 0.6"
}
},
+ "node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -3423,12 +4232,30 @@
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true
},
+ "node_modules/minimisted": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz",
+ "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
+ "node_modules/multi-progress": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/multi-progress/-/multi-progress-4.0.0.tgz",
+ "integrity": "sha512-9zcjyOou3FFCKPXsmkbC3ethv51SFPoA4dJD6TscIp2pUmy26kBDZW6h9XofPELrzseSkuD7r0V+emGEeo39Pg==",
+ "dev": true,
+ "peerDependencies": {
+ "progress": "^2.0.0"
+ }
+ },
"node_modules/multimatch": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
@@ -3454,6 +4281,12 @@
"node": ">= 10.13.0"
}
},
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
"node_modules/nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@@ -3833,6 +4666,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -3965,87 +4807,288 @@
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"dev": true,
"dependencies": {
- "pify": "^3.0.0"
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pause-stream": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "dev": true,
+ "dependencies": {
+ "through": "~2.3"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true
+ },
+ "node_modules/performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pidtree": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
+ "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
+ "dev": true,
+ "bin": {
+ "pidtree": "bin/pidtree.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pino": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-9.2.0.tgz",
+ "integrity": "sha512-g3/hpwfujK5a4oVbaefoJxezLzsDgLcNJeITvC6yrfwYeT9la+edCK42j5QpEQSQCZgTKapXvnQIdgZwvRaZug==",
+ "dev": true,
+ "dependencies": {
+ "atomic-sleep": "^1.0.0",
+ "fast-redact": "^3.1.1",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^1.2.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^3.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^3.0.0"
+ },
+ "bin": {
+ "pino": "bin.js"
+ }
+ },
+ "node_modules/pino-abstract-transport": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz",
+ "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^4.0.0",
+ "split2": "^4.0.0"
+ }
+ },
+ "node_modules/pino-abstract-transport/node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/pino-abstract-transport/node_modules/readable-stream": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
+ "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
+ "dev": true,
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
},
"engines": {
- "node": ">=4"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
- "node_modules/pause-stream": {
- "version": "0.0.11",
- "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
- "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "node_modules/pino-abstract-transport/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/pino-abstract-transport/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"dependencies": {
- "through": "~2.3"
+ "safe-buffer": "~5.2.0"
}
},
- "node_modules/pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
- "dev": true
- },
- "node_modules/performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "node_modules/pino-pretty": {
+ "version": "11.2.2",
+ "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-11.2.2.tgz",
+ "integrity": "sha512-2FnyGir8nAJAqD3srROdrF1J5BIcMT4nwj7hHSc60El6Uxlym00UbCCd8pYIterstVBFlMyF1yFV8XdGIPbj4A==",
"dev": true,
- "engines": {
- "node": ">=8.6"
+ "dependencies": {
+ "colorette": "^2.0.7",
+ "dateformat": "^4.6.3",
+ "fast-copy": "^3.0.2",
+ "fast-safe-stringify": "^2.1.1",
+ "help-me": "^5.0.0",
+ "joycon": "^3.1.1",
+ "minimist": "^1.2.6",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^1.0.0",
+ "pump": "^3.0.0",
+ "readable-stream": "^4.0.0",
+ "secure-json-parse": "^2.4.0",
+ "sonic-boom": "^4.0.1",
+ "strip-json-comments": "^3.1.1"
},
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
+ "bin": {
+ "pino-pretty": "bin.js"
}
},
- "node_modules/pidtree": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
- "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
+ "node_modules/pino-pretty/node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"dev": true,
- "bin": {
- "pidtree": "bin/pidtree.js"
- },
- "engines": {
- "node": ">=0.10"
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
}
},
- "node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "node_modules/pino-pretty/node_modules/readable-stream": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
+ "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
"dev": true,
+ "dependencies": {
+ "abort-controller": "^3.0.0",
+ "buffer": "^6.0.3",
+ "events": "^3.3.0",
+ "process": "^0.11.10",
+ "string_decoder": "^1.3.0"
+ },
"engines": {
- "node": ">=4"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
- "node_modules/pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "node_modules/pino-pretty/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
- "node_modules/pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "node_modules/pino-pretty/node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"dependencies": {
- "pinkie": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "safe-buffer": "~5.2.0"
}
},
+ "node_modules/pino-std-serializers": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz",
+ "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==",
+ "dev": true
+ },
"node_modules/plugin-error": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
@@ -4085,12 +5128,36 @@
"node": ">=6"
}
},
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
+ "node_modules/process-warning": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
+ "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==",
+ "dev": true
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/promise-polyfill": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz",
@@ -4109,6 +5176,16 @@
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
"dev": true
},
+ "node_modules/pump": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
+ "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -4153,6 +5230,12 @@
"integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
"dev": true
},
+ "node_modules/quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
+ "dev": true
+ },
"node_modules/read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -4200,6 +5283,15 @@
"integrity": "sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw=",
"dev": true
},
+ "node_modules/real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 12.13.0"
+ }
+ },
"node_modules/rechoir": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
@@ -4286,6 +5378,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/resolve": {
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@@ -4498,6 +5599,15 @@
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
+ "node_modules/safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -4510,6 +5620,12 @@
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true
},
+ "node_modules/secure-json-parse": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz",
+ "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==",
+ "dev": true
+ },
"node_modules/seek-bzip": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
@@ -4550,6 +5666,19 @@
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"dev": true
},
+ "node_modules/sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "bin": {
+ "sha.js": "bin.js"
+ }
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -4577,6 +5706,12 @@
"integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
"dev": true
},
+ "node_modules/should-proxy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/should-proxy/-/should-proxy-1.0.4.tgz",
+ "integrity": "sha512-RPQhIndEIVUCjkfkQ6rs6sOR6pkxJWCNdxtfG5pP0RVgUYbK5911kLTF0TNcCC0G3YCGd492rMollFT2aTd9iQ==",
+ "dev": true
+ },
"node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -4600,6 +5735,51 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/simple-get": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
+ "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "decompress-response": "^6.0.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
"node_modules/simple-git": {
"version": "3.22.0",
"resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.22.0.tgz",
@@ -4624,6 +5804,24 @@
"node": ">=8"
}
},
+ "node_modules/sonic-boom": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz",
+ "integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==",
+ "dev": true,
+ "dependencies": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/sparkles": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz",
@@ -4677,6 +5875,15 @@
"node": "*"
}
},
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.x"
+ }
+ },
"node_modules/sshpk": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
@@ -4931,6 +6138,18 @@
"is-natural-number": "^4.0.1"
}
},
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -5047,6 +6266,15 @@
"b4a": "^1.6.4"
}
},
+ "node_modules/thread-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz",
+ "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==",
+ "dev": true,
+ "dependencies": {
+ "real-require": "^0.2.0"
+ }
+ },
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -5164,6 +6392,19 @@
"node": ">=14.17"
}
},
+ "node_modules/uglify-js": {
+ "version": "3.19.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
+ "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/unbox-primitive": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
@@ -5267,6 +6508,15 @@
"integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==",
"dev": true
},
+ "node_modules/unxhr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.0.1.tgz",
+ "integrity": "sha512-MAhukhVHyaLGDjyDYhy8gVjWJyhTECCdNsLwlMoGFoNJ3o79fpQhtQuzmAE4IxCMDwraF4cW8ZjpAV0m9CRQbg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.11"
+ }
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -5577,6 +6827,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
"node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
@@ -5654,6 +6910,15 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
},
+ "node_modules/xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/xml2js": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
diff --git a/package.json b/package.json
index 45124499..57f6fa34 100644
--- a/package.json
+++ b/package.json
@@ -42,6 +42,9 @@
"typescript": "^5.3.3",
"which": "^2.0.2",
"yafs": "^1.36.0",
- "zarro": "^1.178.0"
+ "zarro": "^1.178.0",
+ "@antora/cli": "^3.2.0-alpha.4",
+ "@antora/site-generator-default": "^3.2.0-alpha.4",
+ "@asciidoctor/tabs": "^1.0.0-beta.6"
}
}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index eeb68544..9e0067d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,35 +1,54 @@
+
-
+ ~ 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.
+ -->
+
+
4.0.0
- log4net
- apache-log4net
+
+
+ org.apache.logging
+ logging-parent
+ 11.0.0
+
+
pom
- 3.0.4
+ org.apache.logging.log4net
+ apache-log4net
+ ${revision}
+
Apache log4netLogging framework for Microsoft .NET Framework.
- https://logging.apache.org/log4net/
+ https://logging.apache.org/log4net2004
+
+
+ scm:git:https://github.com/apache/logging-log4net
+ scm:git:https://github.com/apache/logging-log4net
+ https://github.com/apache/logging-log4net
+
+
- Github
+ GitHub Issueshttps://github.com/apache/logging-log4net/issues
+
logging commits: all git commits of the logging projects including log4net
@@ -39,157 +58,131 @@
https://mail-archives.apache.org/mod_mbox/logging-commits/
-
-
- Apache License, Version 2.0
- https://www.apache.org/licenses/LICENSE-2.0.txt
- repo
-
-
-
- scm:git:https://github.com/apache/logging-log4net
- scm:git:https://github.com/apache/logging-log4net
- https://github.com/apache/logging-log4net
-
-
- Apache Software Foundation
- https://www.apache.org
-
+
+
+ GitHub Actions
+ https://github.com/apache/logging-log4net/actions
+
+
+
+
+
+ 0.10.0-SNAPSHOT
+
+
+ 2024-05-09T11:40:45Z
+
+
+ true
+ true
+ true
+
+
+
+
+
+
+
+ org.apache.logging.log4j
+ log4j-changelog
+ ${project.version}
+
+
+
+ org.apache.logging.log4j
+ log4j-docgen
+ ${project.version}
+
+
+
+ org.apache.logging.log4j
+ log4j-docgen-asciidoctor-extension
+ ${project.version}
+
+
+
+
+
+
+
- org.apache.rat
- apache-rat-plugin
- 0.11
+ org.codehaus.mojo
+ flatten-maven-plugin
+ ${flatten-maven-plugin.version}
+
+
+ flatten-bom
+
+ flatten
+
+ process-resources
+ false
+
+
+
+
- org.apache.maven.plugins
- maven-site-plugin
- 3.4
-
- ${basedir}/src/site/site.vm
-
+ org.codehaus.mojo
+ xml-maven-plugin
+
+
+ validate-changelog
+
+
+
+ src/changelog
+
+ **/*.xml
+
+ true
+
+
+
+
+
-
-
-
-
+
- org.apache.maven.plugins
- maven-site-plugin
- 3.4
+ com.diffplug.spotless
+ spotless-maven-plugin
- ${basedir}/src/site/site.vm
+
+
+
+ **/.idea/*
+ src/changelog/**/*.xml
+ **/bin/**/*.xml
+ **/*.y*ml
+
+
+
-
+
org.apache.ratapache-rat-plugin
- 0.12
+ true${basedir}/rat.excludesFile
-
- org.apache.maven.plugins
- maven-project-info-reports-plugin
- 2.8.1
-
-
-
- cim
- scm
- license
- project-team
-
-
-
-
-
-
-
- Davyd McColl
- fluffynuts
-
-
- Jan Friedrich
- freeandnil
-
-
- Curt Arnold
- carnold
-
-
- Stefan Bodewig
- bodewig
-
-
- Nicko Cadell
- nicko
-
-
- Niall Daley
- niall
-
-
- Gert Driesen
- drieseng
-
-
- Ron Grabowski
- rgrabowski
-
-
- Dominik Psenner
- dpsenner
-
-
-
-
- Erik Mavrinac
-
-
- Julian Biddle
-
-
- Daniel Cazzulino
-
-
- Aspi Havewala
-
-
- Rick Hobbs
-
-
- Lance Nehring
-
-
- Angelika Schnagl
-
-
- Edward Smit
-
-
- Douglas de la Torre
-
-
- Pavlos Touboulidis
-
-
- Thomas Voss
-
-
- Jarrod Alexander
-
-
-
-
-
-
- logging.site
- file:///${user.dir}/target/site-deploy
-
-
+
\ No newline at end of file
diff --git a/rat.excludesFile b/rat.excludesFile
index 9527f4be..cae188f8 100644
--- a/rat.excludesFile
+++ b/rat.excludesFile
@@ -1,5 +1,6 @@
rat.excludesFile
.editorconfig
+.gitattributes
**/*.suo
**/*.sln
**/*.user
@@ -23,9 +24,13 @@ rat.excludesFile
**/*.snk
**/*.readme
**/*.json
+**/*.globalconfig
src/.idea/**
src/integration-testing/**
build/**
build-tools/**
doc/**
-src/site/**
\ No newline at end of file
+src/site/**
+site.legacy/**
+NOTICE
+LICENSE
\ No newline at end of file
diff --git a/src/site/apt/roadmap.apt b/site.legacy/apt/roadmap.apt
similarity index 100%
rename from src/site/apt/roadmap.apt
rename to site.legacy/apt/roadmap.apt
diff --git a/src/site/resources/css/bootstrap.css b/site.legacy/resources/css/bootstrap.css
similarity index 100%
rename from src/site/resources/css/bootstrap.css
rename to site.legacy/resources/css/bootstrap.css
diff --git a/src/site/resources/css/bootstrap.min.css b/site.legacy/resources/css/bootstrap.min.css
similarity index 100%
rename from src/site/resources/css/bootstrap.min.css
rename to site.legacy/resources/css/bootstrap.min.css
diff --git a/src/site/resources/css/site.css b/site.legacy/resources/css/site.css
similarity index 100%
rename from src/site/resources/css/site.css
rename to site.legacy/resources/css/site.css
diff --git a/src/site/resources/doap_log4net.rdf b/site.legacy/resources/doap_log4net.rdf
similarity index 100%
rename from src/site/resources/doap_log4net.rdf
rename to site.legacy/resources/doap_log4net.rdf
diff --git a/src/site/resources/images/collapsed.gif b/site.legacy/resources/images/collapsed.gif
similarity index 100%
rename from src/site/resources/images/collapsed.gif
rename to site.legacy/resources/images/collapsed.gif
diff --git a/src/site/resources/images/expanded.gif b/site.legacy/resources/images/expanded.gif
similarity index 100%
rename from src/site/resources/images/expanded.gif
rename to site.legacy/resources/images/expanded.gif
diff --git a/src/site/resources/images/ls-logo.jpg b/site.legacy/resources/images/ls-logo.jpg
similarity index 100%
rename from src/site/resources/images/ls-logo.jpg
rename to site.legacy/resources/images/ls-logo.jpg
diff --git a/src/site/resources/images/maven.png b/site.legacy/resources/images/maven.png
similarity index 100%
rename from src/site/resources/images/maven.png
rename to site.legacy/resources/images/maven.png
diff --git a/src/site/resources/img/glyphicons-halflings-white.png b/site.legacy/resources/img/glyphicons-halflings-white.png
similarity index 100%
rename from src/site/resources/img/glyphicons-halflings-white.png
rename to site.legacy/resources/img/glyphicons-halflings-white.png
diff --git a/src/site/resources/img/glyphicons-halflings.png b/site.legacy/resources/img/glyphicons-halflings.png
similarity index 100%
rename from src/site/resources/img/glyphicons-halflings.png
rename to site.legacy/resources/img/glyphicons-halflings.png
diff --git a/src/site/resources/js/bootstrap.js b/site.legacy/resources/js/bootstrap.js
similarity index 100%
rename from src/site/resources/js/bootstrap.js
rename to site.legacy/resources/js/bootstrap.js
diff --git a/src/site/resources/js/bootstrap.min.js b/site.legacy/resources/js/bootstrap.min.js
similarity index 100%
rename from src/site/resources/js/bootstrap.min.js
rename to site.legacy/resources/js/bootstrap.min.js
diff --git a/src/site/resources/js/jquery.js b/site.legacy/resources/js/jquery.js
similarity index 100%
rename from src/site/resources/js/jquery.js
rename to site.legacy/resources/js/jquery.js
diff --git a/src/site/resources/js/jquery.min.js b/site.legacy/resources/js/jquery.min.js
similarity index 100%
rename from src/site/resources/js/jquery.min.js
rename to site.legacy/resources/js/jquery.min.js
diff --git a/src/site/resources/js/prettify.js b/site.legacy/resources/js/prettify.js
similarity index 100%
rename from src/site/resources/js/prettify.js
rename to site.legacy/resources/js/prettify.js
diff --git a/src/site/resources/js/prettify.min.js b/site.legacy/resources/js/prettify.min.js
similarity index 100%
rename from src/site/resources/js/prettify.min.js
rename to site.legacy/resources/js/prettify.min.js
diff --git a/src/site/resources/js/site.js b/site.legacy/resources/js/site.js
similarity index 100%
rename from src/site/resources/js/site.js
rename to site.legacy/resources/js/site.js
diff --git a/src/site/site.vm b/site.legacy/site.vm
similarity index 100%
rename from src/site/site.vm
rename to site.legacy/site.vm
diff --git a/src/site/site.xml b/site.legacy/site.xml
similarity index 100%
rename from src/site/site.xml
rename to site.legacy/site.xml
diff --git a/src/site/xdoc/history.xml b/site.legacy/xdoc/history.xml
similarity index 100%
rename from src/site/xdoc/history.xml
rename to site.legacy/xdoc/history.xml
diff --git a/src/site/xdoc/index.xml b/site.legacy/xdoc/index.xml
similarity index 100%
rename from src/site/xdoc/index.xml
rename to site.legacy/xdoc/index.xml
diff --git a/src/site/xdoc/release/building.xml b/site.legacy/xdoc/release/building.xml
similarity index 100%
rename from src/site/xdoc/release/building.xml
rename to site.legacy/xdoc/release/building.xml
diff --git a/src/site/xdoc/release/config-examples.xml b/site.legacy/xdoc/release/config-examples.xml
similarity index 100%
rename from src/site/xdoc/release/config-examples.xml
rename to site.legacy/xdoc/release/config-examples.xml
diff --git a/src/site/xdoc/release/download.xml b/site.legacy/xdoc/release/download.xml
similarity index 100%
rename from src/site/xdoc/release/download.xml
rename to site.legacy/xdoc/release/download.xml
diff --git a/src/site/xdoc/release/example-apps.xml b/site.legacy/xdoc/release/example-apps.xml
similarity index 100%
rename from src/site/xdoc/release/example-apps.xml
rename to site.legacy/xdoc/release/example-apps.xml
diff --git a/src/site/xdoc/release/faq.xml b/site.legacy/xdoc/release/faq.xml
similarity index 100%
rename from src/site/xdoc/release/faq.xml
rename to site.legacy/xdoc/release/faq.xml
diff --git a/src/site/xdoc/release/features.xml b/site.legacy/xdoc/release/features.xml
similarity index 100%
rename from src/site/xdoc/release/features.xml
rename to site.legacy/xdoc/release/features.xml
diff --git a/src/site/xdoc/release/framework-support.xml b/site.legacy/xdoc/release/framework-support.xml
similarity index 100%
rename from src/site/xdoc/release/framework-support.xml
rename to site.legacy/xdoc/release/framework-support.xml
diff --git a/src/site/xdoc/release/manual/configuration.xml b/site.legacy/xdoc/release/manual/configuration.xml
similarity index 100%
rename from src/site/xdoc/release/manual/configuration.xml
rename to site.legacy/xdoc/release/manual/configuration.xml
diff --git a/src/site/xdoc/release/manual/contexts.xml b/site.legacy/xdoc/release/manual/contexts.xml
similarity index 100%
rename from src/site/xdoc/release/manual/contexts.xml
rename to site.legacy/xdoc/release/manual/contexts.xml
diff --git a/src/site/xdoc/release/manual/installation.xml b/site.legacy/xdoc/release/manual/installation.xml
similarity index 100%
rename from src/site/xdoc/release/manual/installation.xml
rename to site.legacy/xdoc/release/manual/installation.xml
diff --git a/src/site/xdoc/release/manual/internals.xml b/site.legacy/xdoc/release/manual/internals.xml
similarity index 100%
rename from src/site/xdoc/release/manual/internals.xml
rename to site.legacy/xdoc/release/manual/internals.xml
diff --git a/src/site/xdoc/release/manual/introduction.xml b/site.legacy/xdoc/release/manual/introduction.xml
similarity index 100%
rename from src/site/xdoc/release/manual/introduction.xml
rename to site.legacy/xdoc/release/manual/introduction.xml
diff --git a/src/site/xdoc/release/manual/plugins.xml b/site.legacy/xdoc/release/manual/plugins.xml
similarity index 100%
rename from src/site/xdoc/release/manual/plugins.xml
rename to site.legacy/xdoc/release/manual/plugins.xml
diff --git a/src/site/xdoc/release/manual/repositories.xml b/site.legacy/xdoc/release/manual/repositories.xml
similarity index 100%
rename from src/site/xdoc/release/manual/repositories.xml
rename to site.legacy/xdoc/release/manual/repositories.xml
diff --git a/src/site/xdoc/release/release-notes.xml b/site.legacy/xdoc/release/release-notes.xml
similarity index 100%
rename from src/site/xdoc/release/release-notes.xml
rename to site.legacy/xdoc/release/release-notes.xml
diff --git a/src/site/xdoc/release/release-review-instructions.xml b/site.legacy/xdoc/release/release-review-instructions.xml
similarity index 100%
rename from src/site/xdoc/release/release-review-instructions.xml
rename to site.legacy/xdoc/release/release-review-instructions.xml
diff --git a/src/changelog/.changelog.adoc.ftl b/src/changelog/.changelog.adoc.ftl
new file mode 100644
index 00000000..e63407d1
--- /dev/null
+++ b/src/changelog/.changelog.adoc.ftl
@@ -0,0 +1,27 @@
+<#--
+ ~ 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.
+ -->
+<#if entriesByType?size gt 0>
+<#list entriesByType as entryType, entries>
+
+[#release-notes-${release.version?replace("[^a-zA-Z0-9]", "-", "r")}-${entryType?lower_case}]
+=== ${entryType?capitalize}
+
+ <#list entries as entry>
+ * ${entry.description.text?replace("\\s+", " ", "r")}<#if entry.issues?has_content> (<#list entry.issues as issue>${issue.link}[${issue.id}]<#if issue?has_next>, #if>#list>)#if>
+ #list>
+#list>
+#if>
diff --git a/src/changelog/.index.adoc.ftl b/src/changelog/.index.adoc.ftl
new file mode 100644
index 00000000..c08d82f9
--- /dev/null
+++ b/src/changelog/.index.adoc.ftl
@@ -0,0 +1,44 @@
+////
+ 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.
+////
+
+////
+ ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
+ ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
+ ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
+ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
+ ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
+
+ IF THIS FILE IS CALLED `index.adoc`, IT IS AUTO-GENERATED, DO NOT EDIT IT!
+
+ Release notes `index.adoc` is generated from `src/changelog/.index.adoc.ftl`.
+ Auto-generation happens during `generate-sources` phase of Maven.
+ Hence, you must always
+
+ 1. Edit `.index.adoc.ftl`
+ 2. Run `./mvnw generate-sources`
+ 3. Commit both `.index.adoc.ftl` and the generated `.index.adoc`
+////
+
+// Release notes index does not look nice with a deep sectioning, override it:
+:page-toclevels: 1
+
+[#release-notes]
+= Release notes
+<#list releases as release><#if release.changelogEntryCount gt 0>
+
+include::_release-notes/${release.version}.adoc[]
+#if>#list>
\ No newline at end of file
diff --git a/src/changelog/2.x/.release-notes.adoc.ftl b/src/changelog/2.x/.release-notes.adoc.ftl
new file mode 100644
index 00000000..e30cd4e6
--- /dev/null
+++ b/src/changelog/2.x/.release-notes.adoc.ftl
@@ -0,0 +1,41 @@
+////
+ 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.
+////
+
+////
+ ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
+ ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
+ ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
+ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
+ ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
+
+ 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>
+
+<#include "../.changelog.adoc.ftl">
\ No newline at end of file
diff --git a/src/changelog/2.x/.release.xml b/src/changelog/2.x/.release.xml
new file mode 100644
index 00000000..71f705ec
--- /dev/null
+++ b/src/changelog/2.x/.release.xml
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/src/changelog/2.x/2.x-and-older.xml b/src/changelog/2.x/2.x-and-older.xml
new file mode 100644
index 00000000..8b455e02
--- /dev/null
+++ b/src/changelog/2.x/2.x-and-older.xml
@@ -0,0 +1,8 @@
+
+
+
+ release notes for older releases can be found here
+
diff --git a/src/changelog/3.0.0/.release-notes.adoc.ftl b/src/changelog/3.0.0/.release-notes.adoc.ftl
new file mode 100644
index 00000000..94b14261
--- /dev/null
+++ b/src/changelog/3.0.0/.release-notes.adoc.ftl
@@ -0,0 +1,98 @@
+////
+ 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.
+////
+
+////
+ ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
+ ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
+ ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
+ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
+ ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
+
+ 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>
+
+[#release-notes-3-0-0-breaking-changes]
+=== Breaking changes
+
+[IMPORTANT]
+====
+Starting with 3.0.0 we only support the following target frameworks
+
+* net462
+* netstandard2.0
+
+The reasoning for this change can be found in https://github.com/apache/logging-log4net/issues/111[#111 - Dropping support for older runtimes]
+====
+
+[#release-notes-3-0-0-removed-obsolete]
+==== Removed obsolete classes and members
+
+[#release-notes-3-0-0-removed-obsolete-1.2.14]
+===== since 1.2.14 (2015)
+
+* log4net.Appender.BufferingAppenderSkeleton.OnlyFixPartialEventData
+* log4net.Appender.ColoredConsoleAppender.ctor(ILayout)
+* log4net.Appender.ColoredConsoleAppender.ctor(ILayout, bool)
+* log4net.Appender.ConsoleAppender.ctor(ILayout)
+* log4net.Appender.ConsoleAppender.ctor(ILayout, bool)
+* log4net.Appender.DebugAppender.ctor(ILayout)
+* log4net.Appender.EventLogAppender.ctor(ILayout)
+* log4net.Appender.FileAppender.ctor(ILayout, string)
+* log4net.Appender.FileAppender.ctor(ILayout, string, bool)
+* log4net.Appender.MemoryAppender.OnlyFixPartialEventData
+* log4net.Appender.SmtpAppender.LocationInfo
+* log4net.Appender.TextWriterAppender.ctor(ILayout, Stream)
+* log4net.Appender.TextWriterAppender.ctor(ILayout, TextWriter)
+* log4net.Appender.TraceAppender.ctor(ILayout)
+* log4net.Config.DOMConfigurator
+* log4net.Config.AliasDomainAttribute
+* log4net.Config.DomainAttribute
+* log4net.Config.DOMConfiguratorAttribute
+* log4net.Core.LoggerManager.GetLoggerRepository
+* log4net.Core.LoggerManager.CreateDomain
+* log4net.Core.LoggingEventData.TimeStamp
+* log4net.Core.LoggingEvent.GetExceptionStrRep
+* log4net.Core.LoggingEvent.FixVolatileData
+* log4net.LogManager.GetLoggerRepository
+* log4net.LogManager.CreateDomain
+
+[#release-notes-3-0-0-removed-obsolete-2.0.6]
+===== since 2.0.6 (2016)
+
+* log4net.Util.SystemInfo.ProcessStartTime
+
+[#release-notes-3-0-0-sealed]
+==== Sealed classes - the following classes are now sealed
+
+* log4net.Config.AliasRepositoryAttribute
+* log4net.Config.RepositoryAttribute
+* log4net.Config.XmlConfiguratorAttribute
+
+<#include "../.changelog.adoc.ftl">
\ No newline at end of file
diff --git a/src/changelog/3.0.0/.release.xml b/src/changelog/3.0.0/.release.xml
new file mode 100644
index 00000000..addfd973
--- /dev/null
+++ b/src/changelog/3.0.0/.release.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/src/changelog/3.0.0/109-dotnet-test-run.xml b/src/changelog/3.0.0/109-dotnet-test-run.xml
new file mode 100644
index 00000000..36eea130
--- /dev/null
+++ b/src/changelog/3.0.0/109-dotnet-test-run.xml
@@ -0,0 +1,8 @@
+
+
+
+ Fix dotnet (ie not netfx) test run (by @mobilebilly)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/111-drop-legacy-runtimes.xml b/src/changelog/3.0.0/111-drop-legacy-runtimes.xml
new file mode 100644
index 00000000..8a145492
--- /dev/null
+++ b/src/changelog/3.0.0/111-drop-legacy-runtimes.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ Dropping support for older runtimes (by @fluffynuts and @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/124-eventlist.xml b/src/changelog/3.0.0/124-eventlist.xml
new file mode 100644
index 00000000..9484d278
--- /dev/null
+++ b/src/changelog/3.0.0/124-eventlist.xml
@@ -0,0 +1,8 @@
+
+
+
+ log4net.Appender.MemoryAppender.m_eventsList (protected field) is now List<LoggingEvent> (instead of System.Collections.ArrayList)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/124-innerhashtable.xml b/src/changelog/3.0.0/124-innerhashtable.xml
new file mode 100644
index 00000000..86fb605a
--- /dev/null
+++ b/src/changelog/3.0.0/124-innerhashtable.xml
@@ -0,0 +1,8 @@
+
+
+
+ log4net.Util.ReadOnlyPropertiesDictionary.InnerHashtable is now Dictionary<string, object?> (instead of System.Collections.Hashtable)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/124-nullable-annotations.xml b/src/changelog/3.0.0/124-nullable-annotations.xml
new file mode 100644
index 00000000..d69263fd
--- /dev/null
+++ b/src/changelog/3.0.0/124-nullable-annotations.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+ Add support for nullable annotations (by @erikmav)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/125-remove-deprecated.xml b/src/changelog/3.0.0/125-remove-deprecated.xml
new file mode 100644
index 00000000..47a940ab
--- /dev/null
+++ b/src/changelog/3.0.0/125-remove-deprecated.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ Remove deprecated code for 3.0 (by @erikmav)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/127-add-docker.xml b/src/changelog/3.0.0/127-add-docker.xml
new file mode 100644
index 00000000..06fda1ce
--- /dev/null
+++ b/src/changelog/3.0.0/127-add-docker.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ Enable building log4net with docker container (by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/154-remotingappender-removed.xml b/src/changelog/3.0.0/154-remotingappender-removed.xml
new file mode 100644
index 00000000..0f7cfbc3
--- /dev/null
+++ b/src/changelog/3.0.0/154-remotingappender-removed.xml
@@ -0,0 +1,8 @@
+
+
+
+ log4net.Appender.RemotingAppender
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/156-regression-logger-reverse.xml b/src/changelog/3.0.0/156-regression-logger-reverse.xml
new file mode 100644
index 00000000..7fb69647
--- /dev/null
+++ b/src/changelog/3.0.0/156-regression-logger-reverse.xml
@@ -0,0 +1,8 @@
+
+
+
+ Regression: Creating nested loggers in reverse order fails in 3.0.0-preview.1 (by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/157-emittednoappenderwarning-internal.xml b/src/changelog/3.0.0/157-emittednoappenderwarning-internal.xml
new file mode 100644
index 00000000..322607a8
--- /dev/null
+++ b/src/changelog/3.0.0/157-emittednoappenderwarning-internal.xml
@@ -0,0 +1,8 @@
+
+
+
+ log4net.Repository.Hierarchy.Hierarchy.EmittedNoAppenderWarning is now internal
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/158-netsendappender-removed.xml b/src/changelog/3.0.0/158-netsendappender-removed.xml
new file mode 100644
index 00000000..a5f693c3
--- /dev/null
+++ b/src/changelog/3.0.0/158-netsendappender-removed.xml
@@ -0,0 +1,8 @@
+
+
+
+ log4net.Appender.NetSendAppender
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/168-console-preamble.xml b/src/changelog/3.0.0/168-console-preamble.xml
new file mode 100644
index 00000000..e22ecc98
--- /dev/null
+++ b/src/changelog/3.0.0/168-console-preamble.xml
@@ -0,0 +1,8 @@
+
+
+
+ ColoredConsoleAppender writes UTF-8 preamble to the console on initialization (reported by @RoboBurned, fixed by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/169-nullreference-compare-level.xml b/src/changelog/3.0.0/169-nullreference-compare-level.xml
new file mode 100644
index 00000000..f6502b06
--- /dev/null
+++ b/src/changelog/3.0.0/169-nullreference-compare-level.xml
@@ -0,0 +1,8 @@
+
+
+
+ System.NullReferenceException when comparing with a null Level (by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/175-serialization-removed.xml b/src/changelog/3.0.0/175-serialization-removed.xml
new file mode 100644
index 00000000..e4d6e508
--- /dev/null
+++ b/src/changelog/3.0.0/175-serialization-removed.xml
@@ -0,0 +1,8 @@
+
+
+
+ Serializable Support (for .netstandard)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.0/179-culture-rollingfileappender.xml b/src/changelog/3.0.0/179-culture-rollingfileappender.xml
new file mode 100644
index 00000000..a24dc5ac
--- /dev/null
+++ b/src/changelog/3.0.0/179-culture-rollingfileappender.xml
@@ -0,0 +1,8 @@
+
+
+
+ Culture-Specific String Comparisons Cause RollingFileAppender Failure in log4net on NET 5+ (reported by @stianeklund)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.1/.release-notes.adoc.ftl b/src/changelog/3.0.1/.release-notes.adoc.ftl
new file mode 100644
index 00000000..e30cd4e6
--- /dev/null
+++ b/src/changelog/3.0.1/.release-notes.adoc.ftl
@@ -0,0 +1,41 @@
+////
+ 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.
+////
+
+////
+ ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
+ ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
+ ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
+ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
+ ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
+
+ 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>
+
+<#include "../.changelog.adoc.ftl">
\ No newline at end of file
diff --git a/src/changelog/3.0.1/.release.xml b/src/changelog/3.0.1/.release.xml
new file mode 100644
index 00000000..c637ce9e
--- /dev/null
+++ b/src/changelog/3.0.1/.release.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/src/changelog/3.0.1/176-added-source-link.xml b/src/changelog/3.0.1/176-added-source-link.xml
new file mode 100644
index 00000000..19671ba6
--- /dev/null
+++ b/src/changelog/3.0.1/176-added-source-link.xml
@@ -0,0 +1,8 @@
+
+
+
+ added source link (by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.1/177-use-managedthreadid-for-long-running-tasks.xml b/src/changelog/3.0.1/177-use-managedthreadid-for-long-running-tasks.xml
new file mode 100644
index 00000000..79b5675b
--- /dev/null
+++ b/src/changelog/3.0.1/177-use-managedthreadid-for-long-running-tasks.xml
@@ -0,0 +1,9 @@
+
+
+
+ use ManagedThreadId for long running tasks reported by @Audela-220,
+ fixed by @FreeAndNil in https://github.com/apache/logging-log4net/pull/180[#180]
+
diff --git a/src/changelog/3.0.1/181-automate-version-bumps.xml b/src/changelog/3.0.1/181-automate-version-bumps.xml
new file mode 100644
index 00000000..b0a35b60
--- /dev/null
+++ b/src/changelog/3.0.1/181-automate-version-bumps.xml
@@ -0,0 +1,8 @@
+
+
+
+ automate version bumps (by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.1/183-log4net.Util.PatternString-not-working-in-3.0.0.xml b/src/changelog/3.0.1/183-log4net.Util.PatternString-not-working-in-3.0.0.xml
new file mode 100644
index 00000000..49054c79
--- /dev/null
+++ b/src/changelog/3.0.1/183-log4net.Util.PatternString-not-working-in-3.0.0.xml
@@ -0,0 +1,9 @@
+
+
+
+ log4net.Util.PatternString not working in 3.0.0 (Unable to set property [file] on object [log4net.Appender.FileAppender]), reported by @sc-mk,
+ fixed by @FreeAndNil in https://github.com/apache/logging-log4net/pull/184[#184]
+
diff --git a/src/changelog/3.0.2/.release-notes.adoc.ftl b/src/changelog/3.0.2/.release-notes.adoc.ftl
new file mode 100644
index 00000000..a708d2cb
--- /dev/null
+++ b/src/changelog/3.0.2/.release-notes.adoc.ftl
@@ -0,0 +1,47 @@
+////
+ 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.
+////
+
+////
+ ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
+ ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
+ ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
+ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
+ ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
+
+ 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>
+
+[#release-notes-3-0-2-known-issues]
+=== Known issues
+
+* MDC was accidentally renamed into Mdc - this will be reverted in 3.0.3
+* NDC was accidentally renamed into Ndc - this will be reverted in 3.0.3
+
+<#include "../.changelog.adoc.ftl">
\ No newline at end of file
diff --git a/src/changelog/3.0.2/.release.xml b/src/changelog/3.0.2/.release.xml
new file mode 100644
index 00000000..b5a8a85f
--- /dev/null
+++ b/src/changelog/3.0.2/.release.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/src/changelog/3.0.2/189-separate-review-instructions.xml b/src/changelog/3.0.2/189-separate-review-instructions.xml
new file mode 100644
index 00000000..deeac463
--- /dev/null
+++ b/src/changelog/3.0.2/189-separate-review-instructions.xml
@@ -0,0 +1,8 @@
+
+
+
+ separate review instructions for log4net (by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.2/194-objectdisposedexception-in-telnetappender.xml b/src/changelog/3.0.2/194-objectdisposedexception-in-telnetappender.xml
new file mode 100644
index 00000000..21412943
--- /dev/null
+++ b/src/changelog/3.0.2/194-objectdisposedexception-in-telnetappender.xml
@@ -0,0 +1,9 @@
+
+
+
+ ObjectDisposedException in TelnetAppender (3.0.1) reported by @VianneyTremelo,
+ fixed by @FreeAndNil in https://github.com/apache/logging-log4net/pull/195[#195]
+
diff --git a/src/changelog/3.0.2/196-more-modern-coding-style.xml b/src/changelog/3.0.2/196-more-modern-coding-style.xml
new file mode 100644
index 00000000..7dba546f
--- /dev/null
+++ b/src/changelog/3.0.2/196-more-modern-coding-style.xml
@@ -0,0 +1,8 @@
+
+
+
+ more modern coding style (by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.2/197-indexoutfrangeexception-when-creating-child-loggers-multithreaded.xml b/src/changelog/3.0.2/197-indexoutfrangeexception-when-creating-child-loggers-multithreaded.xml
new file mode 100644
index 00000000..a3b85d44
--- /dev/null
+++ b/src/changelog/3.0.2/197-indexoutfrangeexception-when-creating-child-loggers-multithreaded.xml
@@ -0,0 +1,9 @@
+
+
+
+ IndexOutOfRangeException when creating child loggers multithreaded, reported by @FreeAndNil,
+ fixed by @FreeAndNil in https://github.com/apache/logging-log4net/pull/198[#198]
+
diff --git a/src/changelog/3.0.3/.release-notes.adoc.ftl b/src/changelog/3.0.3/.release-notes.adoc.ftl
new file mode 100644
index 00000000..85eb1e0e
--- /dev/null
+++ b/src/changelog/3.0.3/.release-notes.adoc.ftl
@@ -0,0 +1,41 @@
+////
+ 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.
+////
+
+////
+ ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
+ ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
+ ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
+ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
+ ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
+
+ 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>
+
+<#include "../.changelog.adoc.ftl">
diff --git a/src/changelog/3.0.3/.release.xml b/src/changelog/3.0.3/.release.xml
new file mode 100644
index 00000000..32a5f023
--- /dev/null
+++ b/src/changelog/3.0.3/.release.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/src/changelog/3.0.3/196-fix-mdc.xml b/src/changelog/3.0.3/196-fix-mdc.xml
new file mode 100644
index 00000000..7c2e49b1
--- /dev/null
+++ b/src/changelog/3.0.3/196-fix-mdc.xml
@@ -0,0 +1,8 @@
+
+
+
+ MDC was accidentally renamed into Mdc in 3.0.2 - this change was reverted
+
diff --git a/src/changelog/3.0.3/196-fix-ndc.xml b/src/changelog/3.0.3/196-fix-ndc.xml
new file mode 100644
index 00000000..550479a9
--- /dev/null
+++ b/src/changelog/3.0.3/196-fix-ndc.xml
@@ -0,0 +1,8 @@
+
+
+
+ NDC was accidentally renamed into Ndc in 3.0.2 - this change was reverted
+
diff --git a/src/changelog/3.0.3/199-fix-empty-username-linux.xml b/src/changelog/3.0.3/199-fix-empty-username-linux.xml
new file mode 100644
index 00000000..ec19569d
--- /dev/null
+++ b/src/changelog/3.0.3/199-fix-empty-username-linux.xml
@@ -0,0 +1,8 @@
+
+
+
+ Fix empty string received by .NET 8 users on Linux on userName (by @gdziadkiewicz)
+
diff --git a/src/changelog/3.0.3/200-bump-nunit.xml b/src/changelog/3.0.3/200-bump-nunit.xml
new file mode 100644
index 00000000..54f0b26e
--- /dev/null
+++ b/src/changelog/3.0.3/200-bump-nunit.xml
@@ -0,0 +1,8 @@
+
+
+
+ Bumped NUnit to 4.2.2 (by @FreeAndNil)
+
diff --git a/src/changelog/3.0.3/201-enable-ca.xml b/src/changelog/3.0.3/201-enable-ca.xml
new file mode 100644
index 00000000..d0faca23
--- /dev/null
+++ b/src/changelog/3.0.3/201-enable-ca.xml
@@ -0,0 +1,8 @@
+
+
+
+ Enable Microsoft.CodeAnalysis.NetAnalyzers (by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.3/202-file-scoped-namespaces.xml b/src/changelog/3.0.3/202-file-scoped-namespaces.xml
new file mode 100644
index 00000000..888b2648
--- /dev/null
+++ b/src/changelog/3.0.3/202-file-scoped-namespaces.xml
@@ -0,0 +1,8 @@
+
+
+
+ file scoped namespaces and CA warnings fixed in examples (by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.3/203-raw-strings-in-tests.xml b/src/changelog/3.0.3/203-raw-strings-in-tests.xml
new file mode 100644
index 00000000..5d8c0194
--- /dev/null
+++ b/src/changelog/3.0.3/203-raw-strings-in-tests.xml
@@ -0,0 +1,8 @@
+
+
+
+ use raw strings for config files in unit tests (by @FreeAndNil)
+
\ No newline at end of file
diff --git a/src/changelog/3.0.3/205-rollpverrenamefiles-virtual.xml b/src/changelog/3.0.3/205-rollpverrenamefiles-virtual.xml
new file mode 100644
index 00000000..45ec4fc1
--- /dev/null
+++ b/src/changelog/3.0.3/205-rollpverrenamefiles-virtual.xml
@@ -0,0 +1,9 @@
+
+
+
+ use raw strings for config files in unit tests (reported by @FerdinandStapenhorst,
+ implemented by @FreeAndNil in https://github.com/apache/logging-log4net/pull/206[#206]
+
\ No newline at end of file
diff --git a/src/log4net.Tests/Appender/Internal/SimpleTelnetClient.cs b/src/log4net.Tests/Appender/Internal/SimpleTelnetClient.cs
index 2678673a..7d5b822b 100644
--- a/src/log4net.Tests/Appender/Internal/SimpleTelnetClient.cs
+++ b/src/log4net.Tests/Appender/Internal/SimpleTelnetClient.cs
@@ -1,3 +1,24 @@
+/*
+ *
+ * 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.
+ *
+*/
+
using System;
using System.Net;
using System.Net.Sockets;
diff --git a/src/site/antora/antora.tmpl.yml b/src/site/antora/antora.tmpl.yml
new file mode 100644
index 00000000..f57633a7
--- /dev/null
+++ b/src/site/antora/antora.tmpl.yml
@@ -0,0 +1,50 @@
+#
+# 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.
+#
+
+#
+# ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
+# ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
+# ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
+# ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
+# ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
+#
+# THIS FILE IS USED AS A TEMPLATE TO AUTO-GENERATE `antora.yml`!
+#
+# The actual `antora.yml` that is used in `target/generated-site/antora` is auto-generated from `.antora.yml`.
+# Auto-generation happens during `pre-site` phase of Maven.
+# Hence, you must always
+#
+# 1. Edit `.antora.yml`
+# 2. Edit `antora.yml` to match the fields in `.antora.yml` and fill Maven property placeholders with dummy values
+#
+
+name: ROOT
+title: Home
+version: ~
+start_page: index.adoc
+asciidoc:
+ attributes:
+ project-github-url: "${scm.url}"
+ project-version: "${project.version}"
+ project-name: "log4net"
+ project-id: "log4net"
+ java-target-version: "${maven.compiler.target}"
+ java-compiler-version: "${minimalJavaBuildVersion}"
+ logging-services-url: "https://logging.apache.org"
+ freemarker-link: "https://freemarker.apache.org[FreeMarker]"
+nav:
+ - modules/ROOT/nav.adoc
diff --git a/src/site/antora/antora.yml b/src/site/antora/antora.yml
new file mode 100644
index 00000000..8b840681
--- /dev/null
+++ b/src/site/antora/antora.yml
@@ -0,0 +1,50 @@
+#
+# 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.
+#
+
+#
+# ██ ██ █████ ██████ ███ ██ ██ ███ ██ ██████ ██
+# ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██
+# ██ █ ██ ███████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ███ ██
+# ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
+# ███ ███ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██████ ██
+#
+# THIS FILE IS A STUB!
+#
+# The actual `antora.yml` that is used in `target/generated-site/antora` is auto-generated from `antora.tmpl.yml`.
+# Auto-generation happens during `pre-site` phase of Maven.
+# Hence, you must always
+#
+# 1. Edit `antora.tmpl.yml`
+# 2. Edit `antora.yml` to match the fields in `antora.tmpl.yml` and fill Maven property placeholders with dummy values
+#
+
+name: ROOT
+title: Home
+version: ~
+start_page: index.adoc
+asciidoc:
+ attributes:
+ project-github-url: "https://github.com/apache/logging-log4j-tools"
+ project-version: "1.2.3"
+ project-name: "Log4j Tools"
+ project-id: "log4j-tools"
+ java-target-version: "8"
+ java-compiler-version: "[17,18)"
+ logging-services-url: "https://logging.apache.org"
+ freemarker-link: "https://freemarker.apache.org[FreeMarker]"
+nav:
+ - modules/ROOT/nav.adoc
diff --git a/src/site/antora/modules/ROOT/nav.adoc b/src/site/antora/modules/ROOT/nav.adoc
new file mode 100644
index 00000000..62bd12f3
--- /dev/null
+++ b/src/site/antora/modules/ROOT/nav.adoc
@@ -0,0 +1,29 @@
+////
+ 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.
+////
+
+* xref:download.adoc[]
+* xref:development.adoc[]
+* xref:manual/index.adoc[]
+** xref:manual/appenders.adoc[]
+** xref:manual/configuration.adoc[]
+*** xref:manual/configuration-examples.adoc[]
+** xref:manual/filters.adoc[]
+** xref:manual/layouts.adoc[]
+* xref:features.adoc[]
+* xref:release-notes.adoc[]
+* {logging-services-url}/support.html[Support]
+* {logging-services-url}/security.html[Security]
diff --git a/src/site/antora/modules/ROOT/pages/development.adoc b/src/site/antora/modules/ROOT/pages/development.adoc
new file mode 100644
index 00000000..67aea4bd
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/development.adoc
@@ -0,0 +1,83 @@
+////
+ 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.
+////
+
+[#development]
+= Development
+
+{project-name} uses {project-github-url}[GitHub] for source code management.
+
+[#building]
+== Building log4net
+
+Log4net provides support for the following targets
+
+* net462
+* netstandard2.0
+
+[#windows]
+=== Windows
+* install Visual Studio Build Tools (at least VS 2022)
+* install dotnet (v8+) and the .NET SDK (current latest)
+* in the project folder
++
+[source,powershell]
+----
+dotnet test ./src/log4net.sln
+----
+
+[#docker]
+=== Docker
+* install docker (if you haven't already)
+** https://docs.docker.com/engine/install/
+* in logging/log4net run
++
+[source,bash]
+----
+docker build -t log4net-builder .
+docker run -it log4net-builder
+----
+** this will
+*** install all dependencies in the container
+*** build src/log4net.sln
+* inside the container run
++
+[source,bash]
+----
+dotnet test /logging-log4net/src/log4net.sln
+----
+
+[#linux-macos]
+=== Linux / MacOS
+- install the dotnet SDK - v8 or better
+- install Mono (you're going to need it to target certain versions of .NET)
+
+[#site]
+== Site
+You can build and view the website as follows:
+
+[source,bash/powershell]
+----
+./mvnw -N site
+----
+
+You can view the generated website with a browser by pointing it to `target/site` directory.
+
+[#release-instructions]
+== Release instructions
+
+{project-name} employs the CI/CD foundation provided by the {logging-services-url}/logging-parent[`logging-parent`].
+You can simply use its release instructions.
diff --git a/src/site/antora/modules/ROOT/pages/download.adoc b/src/site/antora/modules/ROOT/pages/download.adoc
new file mode 100644
index 00000000..9fa57ea7
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/download.adoc
@@ -0,0 +1,30 @@
+////
+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.
+////
+
+[#download]
+= Download
+
+You can manually download all published log4net distributions, verify them, and see their licensing information by following the instructions in the https://logging.apache.org/download.html[Download page] of https://logging.apache.org[Logging Services].
+
+[TIP]
+====
+* Are you looking for **the log4net installation instructions**?
+Proceed to xref:manual/installation.adoc[].
+* Are you looking for the list of changes associated with a particular release?
+Proceed to xref:release-notes.adoc[].
+====
+
diff --git a/src/site/antora/modules/ROOT/pages/features.adoc b/src/site/antora/modules/ROOT/pages/features.adoc
new file mode 100644
index 00000000..ebc3521f
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/features.adoc
@@ -0,0 +1,147 @@
+////
+ 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.
+////
+
+[#features]
+= Features
+
+[#overview]
+== Overview
+log4net is a tool to help the programmer output log statements to a variety of output targets.
+In case of problems with an application, it is helpful to enable logging so that the problem can be located.
+With log4net it is possible to enable logging at runtime without modifying the application binary.
+The log4net package is designed so that log statements can remain in shipped code without incurring a high performance cost.
+It follows that the speed of logging (or rather not logging) is crucial.
+
+At the same time, log output can be so voluminous that it quickly becomes overwhelming.
+One of the distinctive features of log4net is the notion of hierarchical loggers.
+Using these loggers it is possible to selectively control which log statements are output at arbitrary granularity.
+
+log4net is designed with two distinct goals in mind: speed and flexibility
+
+[#featurelist]
+== Features
+* Support for multiple frameworks
+* Output to multiple logging targets
+* Hierarchical logging architecture
+* XML Configuration
+* Dynamic Configuration
+* Logging Context
+* Proven architecture
+* Modular and extensible design
+* High performance with flexibility
+
+[#frameworks]
+== Support for multiple frameworks
+log4net has specific builds for the following frameworks:
+
+* .NET Core 8 or higher - using netstandard-2.0
+* Microsoft .NET Framework 4.6.2 or higher
+
+[#appenders]
+== Output to multiple logging targets
+log4net ships with the following appenders
+[cols="Type,Description"]
+|===
+|Type |Description
+
+|AdoNetAppender
+|Writes logging events to a database using either prepared statements or stored procedures.
+
+|AnsiColorTerminalAppender
+|Writes color highlighted logging events to a an ANSI terminal window.
+
+|AspNetTraceAppender
+|Writes logging events to the ASP trace context. These can then be rendered at the end of the ASP page or on the ASP trace page.
+
+|ColoredConsoleAppender
+|Writes color highlighted logging events to the application's Windows Console.
+
+|ConsoleAppender
+|Writes logging events to the application's Console.
+The events may go to either the standard our stream or the standard error stream.
+
+|DebugAppender
+|Writes logging events to the .net debugger (https://web.archive.org/web/20240930165834/https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.debug?view=net-8.0[System.Diagnostics.Debug]).
+
+|EventLogAppender
+|Writes logging events to the Windows Event Log.
+
+|FileAppender
+|Writes logging events to a file in the file system.
+
+|LocalSyslogAppender
+|Writes logging events to the local https://datatracker.ietf.org/doc/html/rfc3164[syslog] service (UNIX only).
+
+|MemoryAppender
+|Stores logging events in an in memory buffer.
+
+|OutputDebugStringAppender
+|Writes logging events to the debugger (using https://web.archive.org/web/20241118170546/https://learn.microsoft.com/en-us/windows/win32/api/debugapi/nf-debugapi-outputdebugstringw[OutputDebugString]).
+If the application has no debugger, the system debugger displays the string.
+If the application has no debugger and the system debugger is not active, the message is ignored.
+
+|RemoteSyslogAppender
+|Writes logging events to a remote https://datatracker.ietf.org/doc/html/rfc3164[syslog] service using UDP networking.
+
+|RollingFileAppender
+|Writes logging events to a file in the file system.
+The RollingFileAppender can be configured to log to multiple files based upon date or file size constraints.
+
+|SmtpAppender
+|Sends logging events to an email address.
+
+|SmtpPickupDirAppender
+|Sends logging events to an email address but writes the emails to a configurable directory rather than sending them directly via SMTP.
+
+|TelnetAppender
+|*Clients* connect via Telnet to receive logging events.
+
+|TraceAppender
+|Writes logging events to the .NET trace system (https://web.archive.org/web/20240907024634/https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.trace?view=net-8.0[System.Diagnostics.Trace]).
+
+|UdpAppender
+|Sends logging events as connectionless UDP datagrams to a remote host or a multicast group using a UdpClient.
+
+|ForwardingAppender
+|Can be used to wrap another appender, for example to attach additional filters.
+
+|===
+
+[#hierarchy]
+== Hierarchical logging architecture
+Hierarchical logging is an ideal fit with component based development.
+Each component has its own of logger.
+When individually tested, the properties of these loggers may be set as the developer requires.
+When combined with other components, the loggers inherit the properties determined by the integrator of the components.
+One can selectively elevate logging priorities on one component without affecting the other components.
+This is useful when you need a detailed trace from just a single component without crowding the trace file with messages from other components.
+All this can be done through configuration files - no code changes are required.
+
+[#xml-config]
+== XML Configuration
+log4net is configured using an XML configuration file.
+The configuration information can be embedded within other XML configuration files (such as the application's .config file) or in a separate file.
+The configuration is easily readable and updateable while retaining the flexibility to express all configurations.
+
+Alternatively log4net can be configured programmatically.
+
+[#dynamic-config]
+== Dynamic Configuration
+log4net can monitor its configuration file for changes and dynamically apply changes made by the configurator.
+The logging levels, appenders, layouts, and just about everything else can be adjusted at runtime.
+In many cases it is possible to diagnose application issues without terminating the process in question.
+This can a very valuable tool in investigating issues with deployed applications.
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/index.adoc b/src/site/antora/modules/ROOT/pages/index.adoc
new file mode 100644
index 00000000..fe105b06
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/index.adoc
@@ -0,0 +1,22 @@
+////
+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.
+////
+
+[#log4net]
+= log4net
+
+The Apache log4net library is a tool to help the programmer output log statements to a variety of output targets.
+For more information on log4net see the xref:features.adoc[] document.
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/appenders.adoc b/src/site/antora/modules/ROOT/pages/manual/appenders.adoc
new file mode 100644
index 00000000..da47121e
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/appenders.adoc
@@ -0,0 +1,85 @@
+////
+ 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.
+////
+[#appenders]
+= Appenders
+
+Appenders are responsible for delivering log events to their destination.
+Every Appender must implement the `IAppender` interface.
+
+While not strictly required by the log4net architecture, most appenders inherit from `AppenderSkeleton` and:
+
+* delegate the filtering of log events to an implementation of `IFilter`.
+See xref:manual/filters.adoc[] for more information.
+* delegate the formatting of log events to an implementation of `ILayout`.
+See xref:manual/layouts.adoc[] for more information.
+* only directly handle the writing of log event data to the target destination.
+
+Appenders always have a name so that they can be referenced from a
+xref:manual/configuration.adoc#configuring-loggers[logger configuration].
+
+[#file-appenders]
+== File appenders
+
+File appenders write logs to the filesystem.
+They can be further split into:
+
+Single file appenders:::
+//See xref:manual/appenders/file.adoc[] for details.
+
+Rolling file appenders:::
+//See xref:manual/appenders/rolling-file.adoc[] for details.
+
+[#database-appenders]
+=== Database appenders
+
+The appenders write log events directly to a database.
+
+//xref:manual/appenders/database.adoc#JdbcAppender[JDBC appender]::
+Sends log events to a JDBC driver
+
+//xref:manual/appenders/database.adoc#NoSqlAppender[NoSQL appender]::
+Store log events to a document-oriented database
+
+//See xref:manual/appenders/database.adoc[] for details.
+
+[#network-appenders]
+=== Network appenders
+
+These appenders use simple network protocols to transmit log events to a remote host.
+The supported network protocols are:
+
+`UDP`::
+`TCP`::
+//These are handled by the xref:manual/appenders/network.adoc#SocketAppender[Socket Appender].
+
+`HTTP`::
+//This is handled by the xref:manual/appenders/network.adoc#HttpAppender[HTTP Appender].
+
+`SMTP`::
+//This is handled by the xref:manual/appenders/network.adoc#HttpAppender[SMTP Appender].
+
+//See xref:manual/appenders/network.adoc[] for details.
+
+[#delegating-appenders]
+=== Delegating appenders
+
+Delegating appenders are intended to decorate other appenders:
+
+//xref:manual/appenders/delegating.adoc#RoutingAppender[Routing appender]::
+Dynamically choose a different appender for each log event
+
+// See xref:manual/appenders/delegating.adoc[] for details.
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration-examples.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration-examples.adoc
new file mode 100644
index 00000000..ae4641ce
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration-examples.adoc
@@ -0,0 +1,234 @@
+////
+ 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]
+= Configuration
+
+Using a configuration file is the most popular and recommended approach for configuring log4net.
+In this page we will examine the composition of a configuration file and how log4net uses it.
+
+[source,csharp]
+----
+using Animals.Carnivora;
+// Import log4net classes.
+using log4net;
+using log4net.Config;
+
+namespace SampleApp;
+
+private static class MyApp
+{
+ // Define a static logger variable so that it references the Logger instance named "MyApp".
+ private static readonly ILog logger = LogManager.GetLogger(typeof(MyApp));
+
+ private static void Main(string[] args)
+ {
+ // Set up a simple configuration that logs on the console.
+ BasicConfigurator.Configure();
+
+ logger.Info("Entering application.");
+ Dog dog = new();
+ bar.Bark();
+ logger.Info("Exiting application.");
+ }
+}
+----
+
+MyApp begins by importing log4net related namespaces.
+It then defines a static logger variable with the name MyApp which happens to be the fully qualified name of the class.
+
+MyApp uses the following Dog class:
+
+[source,csharp]
+----
+
+// Import log4net classes
+using log4net;
+
+namespace Animals.Carnivora;
+
+internal sealed class Dog
+{
+ private static readonly ILog logger = LogManager.GetLogger(typeof(Dog));
+
+ internal void Bark() => logger.Debug("Woof!");
+}
+----
+
+The invocation of the BasicConfigurator.Configure() method creates a rather simple log4net setup.
+This method is hardwired to add to the root logger a ConsoleAppender.
+The output will be formatted using a PatternLayout set to the following pattern:
+
+[source,log]
+----
+%timestamp [%thread] %level %logger %ndc - %message%newline
+----
+
+Note that by default, the root logger is assigned to Level.DEBUG.
+
+The output of MyApp is:
+
+[source,log]
+----
+2024-12-21 14:07:41,508 [main] INFO SampleApp.MyApp - Entering application.
+2024-12-21 14:07:41,517 [main] DEBUG Animals.Carnivora.Dog - Woof!
+2024-12-21 14:07:41,529 [main] INFO SampleApp.MyApp - Exiting application.
+----
+
+As a side note, let me mention that in log4net child loggers link only to their existing ancestors.
+In particular, the logger named Animals.Carnivora.Dog is linked directly to the root logger, thereby circumventing the unused Animals or Animals.Carnivora loggers.
+This significantly increases performance and reduces log4net's memory footprint.
+
+The MyApp class configures log4net by invoking BasicConfigurator.Configure() method.
+Other classes only need to import the log4net namespace, retrieve the loggers they wish to use, and log away.
+
+The previous example always outputs the same log information.
+Fortunately, it is easy to modify MyApp so that the log output can be controlled at run-time.
+Here is a slightly modified version.
+
+[source,csharp]
+----
+using Animals.Carnivora;
+// Import log4net classes.
+using log4net;
+using log4net.Config;
+
+namespace SampleApp;
+
+private static class MyApp
+{
+ private static readonly ILog logger = LogManager.GetLogger(typeof(MyApp));
+
+ private static void Main(string[] args)
+ {
+ // BasicConfigurator replaced with XmlConfigurator.
+ XmlConfigurator.Configure();
+
+ logger.Info("Entering application.");
+ Dog dog = new();
+ bar.Bark();
+ logger.Info("Exiting application.");
+ }
+}
+----
+
+This version of MyApp instructs the XmlConfigurator to parse a configuration file and set up logging accordingly.
+
+Here is a sample configuration file that results in exactly same output as the previous BasicConfigurator based example.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+Suppose we are no longer interested in seeing the output of any component belonging to the Animals.Carnivora namespace.
+
+The following configuration file shows one possible way of achieving this.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+The output of MyApp configured with this file is shown below.
+
+[source,log]
+----
+2024-12-21 14:07:41,508 [main] INFO SampleApp.MyApp - Entering application.
+2024-12-21 14:07:41,529 [main] INFO SampleApp.MyApp - Exiting application.
+----
+
+As the logger Animals.Carnivora.Dog does not have an assigned level, it inherits its level from Animals.Carnivora, which was set to WARN in the configuration file.
+The log statement from the Dog.Bark method has the level DEBUG, lower than the logger level WARN.
+Consequently, Bark() method's log request is suppressed.
+
+Here is another configuration file that uses multiple appenders.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+Calling the enhanced MyApp with the this configuration file will output the following on the console.
+
+[source,log]
+----
+INFO [main] (MyApp.cs:17) - Entering application.
+DEBUG [main] (Dog.cs:10) - Woof!
+INFO [main] (MyApp.cs:20) - Exiting application.
+----
+
+In addition, as the root logger has been allocated a second appender, output will also be directed to the example.log file.
+This file will be rolled over when it reaches 100KB.
+When roll-over occurs, the old version of example.log is automatically moved to example.log.1.
+
+Note that to obtain these different logging behaviors we did not need to recompile code.
+We could just as easily have logged to an email address or redirected all Animals.Carnivora output to an remote syslog server.
+
+For more examples of configuring appenders using the XmlConfigurator see the Example Appender Configuration #TODO document.
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration.adoc
new file mode 100644
index 00000000..ae4641ce
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration.adoc
@@ -0,0 +1,234 @@
+////
+ 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]
+= Configuration
+
+Using a configuration file is the most popular and recommended approach for configuring log4net.
+In this page we will examine the composition of a configuration file and how log4net uses it.
+
+[source,csharp]
+----
+using Animals.Carnivora;
+// Import log4net classes.
+using log4net;
+using log4net.Config;
+
+namespace SampleApp;
+
+private static class MyApp
+{
+ // Define a static logger variable so that it references the Logger instance named "MyApp".
+ private static readonly ILog logger = LogManager.GetLogger(typeof(MyApp));
+
+ private static void Main(string[] args)
+ {
+ // Set up a simple configuration that logs on the console.
+ BasicConfigurator.Configure();
+
+ logger.Info("Entering application.");
+ Dog dog = new();
+ bar.Bark();
+ logger.Info("Exiting application.");
+ }
+}
+----
+
+MyApp begins by importing log4net related namespaces.
+It then defines a static logger variable with the name MyApp which happens to be the fully qualified name of the class.
+
+MyApp uses the following Dog class:
+
+[source,csharp]
+----
+
+// Import log4net classes
+using log4net;
+
+namespace Animals.Carnivora;
+
+internal sealed class Dog
+{
+ private static readonly ILog logger = LogManager.GetLogger(typeof(Dog));
+
+ internal void Bark() => logger.Debug("Woof!");
+}
+----
+
+The invocation of the BasicConfigurator.Configure() method creates a rather simple log4net setup.
+This method is hardwired to add to the root logger a ConsoleAppender.
+The output will be formatted using a PatternLayout set to the following pattern:
+
+[source,log]
+----
+%timestamp [%thread] %level %logger %ndc - %message%newline
+----
+
+Note that by default, the root logger is assigned to Level.DEBUG.
+
+The output of MyApp is:
+
+[source,log]
+----
+2024-12-21 14:07:41,508 [main] INFO SampleApp.MyApp - Entering application.
+2024-12-21 14:07:41,517 [main] DEBUG Animals.Carnivora.Dog - Woof!
+2024-12-21 14:07:41,529 [main] INFO SampleApp.MyApp - Exiting application.
+----
+
+As a side note, let me mention that in log4net child loggers link only to their existing ancestors.
+In particular, the logger named Animals.Carnivora.Dog is linked directly to the root logger, thereby circumventing the unused Animals or Animals.Carnivora loggers.
+This significantly increases performance and reduces log4net's memory footprint.
+
+The MyApp class configures log4net by invoking BasicConfigurator.Configure() method.
+Other classes only need to import the log4net namespace, retrieve the loggers they wish to use, and log away.
+
+The previous example always outputs the same log information.
+Fortunately, it is easy to modify MyApp so that the log output can be controlled at run-time.
+Here is a slightly modified version.
+
+[source,csharp]
+----
+using Animals.Carnivora;
+// Import log4net classes.
+using log4net;
+using log4net.Config;
+
+namespace SampleApp;
+
+private static class MyApp
+{
+ private static readonly ILog logger = LogManager.GetLogger(typeof(MyApp));
+
+ private static void Main(string[] args)
+ {
+ // BasicConfigurator replaced with XmlConfigurator.
+ XmlConfigurator.Configure();
+
+ logger.Info("Entering application.");
+ Dog dog = new();
+ bar.Bark();
+ logger.Info("Exiting application.");
+ }
+}
+----
+
+This version of MyApp instructs the XmlConfigurator to parse a configuration file and set up logging accordingly.
+
+Here is a sample configuration file that results in exactly same output as the previous BasicConfigurator based example.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+Suppose we are no longer interested in seeing the output of any component belonging to the Animals.Carnivora namespace.
+
+The following configuration file shows one possible way of achieving this.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+The output of MyApp configured with this file is shown below.
+
+[source,log]
+----
+2024-12-21 14:07:41,508 [main] INFO SampleApp.MyApp - Entering application.
+2024-12-21 14:07:41,529 [main] INFO SampleApp.MyApp - Exiting application.
+----
+
+As the logger Animals.Carnivora.Dog does not have an assigned level, it inherits its level from Animals.Carnivora, which was set to WARN in the configuration file.
+The log statement from the Dog.Bark method has the level DEBUG, lower than the logger level WARN.
+Consequently, Bark() method's log request is suppressed.
+
+Here is another configuration file that uses multiple appenders.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+Calling the enhanced MyApp with the this configuration file will output the following on the console.
+
+[source,log]
+----
+INFO [main] (MyApp.cs:17) - Entering application.
+DEBUG [main] (Dog.cs:10) - Woof!
+INFO [main] (MyApp.cs:20) - Exiting application.
+----
+
+In addition, as the root logger has been allocated a second appender, output will also be directed to the example.log file.
+This file will be rolled over when it reaches 100KB.
+When roll-over occurs, the old version of example.log is automatically moved to example.log.1.
+
+Note that to obtain these different logging behaviors we did not need to recompile code.
+We could just as easily have logged to an email address or redirected all Animals.Carnivora output to an remote syslog server.
+
+For more examples of configuring appenders using the XmlConfigurator see the Example Appender Configuration #TODO document.
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/filters.adoc b/src/site/antora/modules/ROOT/pages/manual/filters.adoc
new file mode 100644
index 00000000..2ebd3b2a
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/filters.adoc
@@ -0,0 +1,1506 @@
+////
+ 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.
+////
+
+[id=filters]
+= Filters
+
+Filters are Log4j plugins that evaluate the parameters of a logging call or a log event and return one of three results:
+
+ACCEPT:: The filter accepts the log event.
+This effectively causes other filters in the same filtering stage to be skipped.
+
+DENY:: The filter drops the log event.
+
+NEUTRAL:: Log4j behaves as if the filter was not present.
+It is evaluated by the next filter in the filter chain.
+
+////
+ Filters can be used at each level of the
+ xref:manual/architecture.adoc#architecture-diagram[logging pipeline]:
+
+ * the global configuration element can contain a xref:manual/configuration.adoc#global-filters[global filter].
+ * each xref:manual/configuration.adoc#configuring-loggers[logger] configuration element can contain a xref:manual/configuration.adoc#logger-elements-filters[logger filter].
+ * each xref:manual/configuration.adoc#configuring-appenderrefs[appender reference] configuration element can contain an xref:manual/configuration.adoc#appenderrefs-elements-filters[appender reference filter].
+ * each xref:manual/appenders.adoc[appender] configuration element can contain an xref:manual/appenders.adoc[appender filter].
+
+ Additionally, the following configuration attributes take part in the filtering process:
+
+ * the xref:manual/configuration.adoc#logger-attributes-level[`level` attribute] of logger configuration elements.
+ * the xref:manual/configuration.adoc#appenderref-attributes-level[`level` attribute] of appender reference configuration elements.
+
+ [#filtering-process]
+ == Filtering process
+
+ Due to the interaction of many elements,
+ the filtering process in Log4j is quite complex and can be divided in four stages:
+
+ . <>
+ . <>
+ . <>
+ . <>
+
+ [IMPORTANT]
+ ====
+ For performance reasons, log events should be filtered at the earliest possible stage.
+ This reduces the cost of disabled log events:
+ e.g., log event creation, population of context data, formatting, transfer through an asynchronous barrier.
+ ====
+
+ [#logger-stage]
+ === 1. `Logger` stage
+
+ [plantuml]
+ ....
+ @startuml
+ start
+ group Logger
+
+ :A Logger method;
+
+ switch (Apply global filter)
+ case (DENY)
+ #pink:Discard;
+ detach
+ case (ACCEPT)
+ case (NEUTRAL)
+ if (Is less severe than logger level?) then (yes)
+ #pink:Discard;
+ detach
+ else (no)
+ ' The label improves spacing
+ label a1
+ endif
+ endswitch
+ end group
+ :Create LogEvent;
+ stop
+ ....
+
+ The parameters of the logging call are passed to the global filter.
+ If the global filter returns:
+
+ DENY:: The log message is immediately discarded.
+ NEUTRAL:: If the level of the log message is less severe than the configured logger threshold, the message is discarded.
+ Otherwise, a
+ link:../javadoc/log4j-core/org/apache/logging/log4j/core/LogEvent.html[`LogEvent`] is created and processing continues.
+ ACCEPT:: A `LogEvent` is created and processing continues in the next stage.
+
+ [IMPORTANT]
+ ====
+ This is the only stage, which differentiates between an `ACCEPT` and `NEUTRAL` filter result.
+ ====
+
+ [TIP]
+ ====
+ Filtering logging calls at this stage provides the best performance:
+
+ * this stage precedes the creation of log events, therefore operations like the
+ {log4j2-url}/manual/thread-context.html[injection of context data],
+ xref:manual/layouts.adoc#LocationInformation[computation of location information]
+ will not be performed for disabled log statements.
+ * this stage precedes the asynchronous calls performed by either
+ xref:manual/async.adoc[asynchronous loggers]
+ or
+ xref:manual/appenders/delegating.adoc#AsyncAppender[asynchronous appenders].
+ ====
+
+ [#logger-config-stage]
+ === 2. `LoggerConfig` stage
+
+ [plantuml]
+ ....
+ @startuml
+ start
+ :LogEvent;
+
+ group LoggerConfig
+ repeat
+
+ :LoggerConfig#log();
+
+ if (Apply logger filter) then (DENY)
+ #pink:Discard;
+ detach
+ else (not DENY)
+ ' The label improves spacing
+ label a1
+ endif
+ repeat while (Go to parent logger?) is (yes)
+ -> no;
+ end group
+ stop
+ @enduml
+ ....
+
+ In this stage, log events are evaluated by all the
+ xref:manual/configuration.adoc#logger-elements-filters[logger filters]
+ that stand on the path from the logger to an appender.
+ Due to the
+ xref:manual/configuration.adoc#logger-attributes-additivity[additivity of logger configurations],
+ this means that a log event must also pass the filters of all the parent loggers,
+ until it reaches the logger that references the chosen appender.
+
+ [#appender-control-stage]
+ === 3. `AppenderControl` stage
+
+ [plantuml]
+ ....
+ @startuml
+ start
+ :LogEvent;
+
+ group AppenderControl
+
+ :AppenderControl#callAppender();
+
+ if (Is less severe then appender reference level?) then (yes)
+ #pink:Discard;
+ detach
+ else (no)
+ ' The label improves spacing
+ label a2
+ endif
+ if (Apply appender reference filter) then (DENY)
+ #pink:Discard;
+ detach
+ else (not DENY)
+ ' The label improves spacing
+ label a1
+ endif
+ end group
+ stop
+ @enduml
+ ....
+
+ To pass this stage, log events must satisfy both conditions:
+
+ * the log event must be at least as severe as the
+ xref:manual/configuration.adoc#appenderref-attributes-level[`level` attribute]
+ of the appender reference.
+ * the xref:manual/configuration.adoc#appenderrefs-elements-filters[appender reference filter] must return `ACCEPT` or `NEUTRAL`,
+
+ [#appender-stage]
+ === 4. `Appender` stage (optional)
+
+ [plantuml]
+ ....
+ @startuml
+ start
+ :LogEvent;
+
+ group Appender
+
+ if (Apply appender filter) then (DENY)
+ #pink:Discard;
+ detach
+ else (not DENY)
+ ' The label improves spacing
+ label a1
+ endif
+ end group
+ #palegreen:Appender#append();
+ @enduml
+ ....
+
+ If the appender implements
+ link:../javadoc/log4j-core/org/apache/logging/log4j/core/filter/Filterable.html[`Filterable`]
+ an additional filtering stage is available.
+ When log events reach such an appender,
+ the filter attached to an appender is evaluated and if the result is `DENY`,
+ the log event is discarded.
+
+ All standard appenders implement `Filterable`.
+
+ [NOTE]
+ ====
+ Some appenders like the
+ xref:manual/appenders/delegating.adoc#AsyncAppender[asynchronous appender]
+ use appender references to transfer log events to other appenders.
+ In such a case, the filtering process goes back to the <>.
+ ====
+
+ [TIP]
+ ====
+ Users migrating from Log4j 1 often replace the `threshold` property of a Log4j 1 appender with a <> on the equivalent Log4j 2 appender.
+
+ Using the `level` property of appender references will give a better performance.
+ ====
+
+ [WARNING]
+ ====
+ Configuring filters at this stage is a measure of last resort,
+ since it adds a large overhead to disabled log events.
+ You should rather configure the filtering in one of the previous stages.
+ ====
+
+ [#example-configuration-file]
+ === Example configuration file
+
+ The following example configuration file employs filters at all possible stages to explain their evaluation order:
+
+ [tabs]
+ ====
+ XML::
+ +
+ [source,xml]
+ ----
+ include::example$manual/filters/filters.xml[lines=1;18..-1]
+ ----
+
+ JSON::
+ +
+ [source,json]
+ ----
+ include::example$manual/filters/filters.json[]
+ ----
+
+ YAML::
+ +
+ [source,yaml]
+ ----
+ include::example$manual/filters/filters.yaml[lines=17..-1]
+ ----
+
+ Properties::
+ +
+ [source,properties]
+ ----
+ include::example$manual/filters/filters.properties[lines=17..-1]
+ ----
+ ====
+
+ <1> Global filter
+ <2> Logger `level` attribute. This setting is **ignored** unless the global filter returns `NEUTRAL`.
+ <3> Filter of the `org.example` logger
+ <4> Filter of the root logger (it is the parent of the `org.example` logger)
+ <5> Appender reference `level` attribute
+ <6> Filter of the appender reference
+ <7> Filter of the appender
+
+ [#common-configuration]
+ == Common configuration
+
+ [#common-configuration-attributes]
+ === Common configuration attributes
+
+ The default behavior of filters is in line with the `filter()` methods of functional interfaces, such as
+ https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/util/Optional.html#filter(java.util.function.Predicate)[`Optional.filter()`]
+ or
+ https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/util/stream/Stream.html#filter(java.util.function.Predicate)[`Stream.filter()`]:
+ filters pass matching events to the next filter and drop those that do not match.
+
+ To allow for a larger spectrum of behaviors,
+ all standard filters, except `CompositeFilter` and `DenyAllFilter`, accept the following configuration attributes:
+
+ .Common filter configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ |Attribute |Type | Default value |Description
+
+ | [[onMatch]]onMatch
+ | link:../javadoc/log4j-core/org/apache/logging/log4j/core/Filter.Result.html[`Result`]
+ | link:../javadoc/log4j-core/org/apache/logging/log4j/core/Filter.Result.html#NEUTRAL[`NEUTRAL`]
+ | Result returned if the condition matches.
+
+ | [[onMismatch]]onMismatch
+ | link:../javadoc/log4j-core/org/apache/logging/log4j/core/Filter.Result.html[`Result`]
+ | link:../javadoc/log4j-core/org/apache/logging/log4j/core/Filter.Result.html#DENY[`DENY`]
+ | Result returned if the condition does not match.
+
+ |===
+
+ [#CompositeFilter]
+ === Composing filters
+
+ Filters usually test for a single condition.
+ To express a more complex filtering logic, Log4j provides a
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-CompositeFilter[`Filters`]
+ plugin.
+ This plugin can contain a sequence of filters and has no other configuration option.
+
+ The `Filters` plugin sequentially evaluates each sub-filter and:
+
+ * if the sub-filter returns `ACCEPT` (resp. `DENY`), the `Filters` plugin returns `ACCEPT` (resp. `DENY`).
+ * if the sub-filter return `NEUTRAL`, the `Filters` plugin evaluates the next sub-filter in the chain.
+ * if the last sub-filter returns `NEUTRAL`, the `Filters` plugin returns `NEUTRAL`.
+
+ The `Filters` plugin together with the ternary logic of filters, can be used to express most boolean operators.
+ In the following examples `A` and `B` are two filters.
+
+ `NOT A`::
+ You can invert the functionality of filter `A` by swapping the `onMatch` and `onMismatch`:
+ +
+ [source,xml]
+ ----
+
+ ----
+
+ `A AND B`::
+ To select the events that match both `A` and `B` you can use:
+ +
+ [source,xml]
+ ----
+
+
+
+
+ ----
+
+ `A OR B`::
+ To select the events that match `A` or `B` we can replace `NEUTRAL` with `ACCEPT` in the `onMatch` attribute:
+ +
+ [source,xml]
+ ----
+
+
+
+
+ ----
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-CompositeFilter[📖 Plugin reference for `Filters`]
+
+ [#collection]
+ == Collection
+
+ Log4j Core provides the following filters out-of-the-box.
+
+ [#timestamp-filters]
+ === Timestamp filters
+
+ Timestamp filters use the timestamp of log events to decide whether to accept them or not.
+
+ [#BurstFilter]
+ ==== `BurstFilter`
+
+ The `BurstFilter` limits the rate of log events.
+ The rate limit is only applied to log events less severe than a configured log level.
+
+ Besides the <>,
+ the `BurstFilter` supports the following parameters:
+
+ .`BurstFilter` -- configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ |Attribute | Type | Default value | Description
+
+ | level
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html[`Level`]
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html#WARN[`WARN`]
+ | The rate limit only applies to log events less severe than this level.
+ Events at least as severe as this level will always match.
+
+ | rate
+ | `float`
+ | `10`
+ | The average number of events per second to allow.
+
+ | maxBurst
+ | `long`
+ | `10 × rate`
+ | The maximum number of events that can be logged at once, without incurring in rate limiting.
+
+ |===
+
+ [NOTE]
+ ====
+ The `BurstFilter` uses the _sliding window log_ algorithm with a window `window` of `maxBurst / rate` seconds.
+
+ The filter maintains a list of recently logged events.
+ If in the interval of time of duration `window` preceding the current log event,
+ more than `maxBurst` events have already been logged, rate limiting is applied.
+
+ To control the size of the log files only the `rate` attribute needs to be taken into account.
+ The `maxBurst` attribute controls the temporal spacing between log events:
+ lower values of `maxBurst` will give more evenly spaced log events,
+ while higher values will allow for peaks of activity followed by an absence of log events.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-BurstFilter[📖 Plugin reference for `BurstFilter`]
+
+ [#TimeFilter]
+ ==== `TimeFilter`
+
+ The `TimeFilter` only matches log events emitted during a certain time of the day.
+
+ Besides the <>,
+ the `TimeFilter` supports the following parameters:
+
+ .`TimeFilter` -- configuration attributes
+ [cols="1m,2,1,4"]
+ |===
+ | Attribute | Type | Default value | Description
+
+ | start
+ | https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/time/LocalTime.html[`LocalTime`] in `HH:mm:ss` format
+ | https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/time/LocalTime.html#MIN[`LocalTime.MIN`]
+ | The beginning of the time slot.
+
+ | start
+ | https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/time/LocalTime.html[`LocalTime`] in `HH:mm:ss` format
+ | https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/time/LocalTime.html#MAX[`LocalTime.MAX`]
+ | The end of the time slot.
+
+ | timezone
+ | https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/time/ZoneId.html[`ZoneId`]
+ | https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/time/ZoneId.html#systemDefault()[`ZoneId.systemDefault()`]
+ | The timezone to use when comparing `start` and `end` to the event timestamp.
+
+ |===
+
+ As a simple application of this filter,
+ if you want to forward messages to your console during work hours and to your e-mail account after work hours,
+ you can use a configuration snippet like:
+
+ [tabs]
+ ====
+ XML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/TimeFilter.xml[`log4j2.xml`]
+ [source,xml,indent=0]
+ ----
+ include::example$manual/filters/TimeFilter.xml[tag=filter]
+ ----
+
+ JSON::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/TimeFilter.json[`log4j2.json`]
+ [source,json,indent=0]
+ ----
+ include::example$manual/filters/TimeFilter.json[tag=filter]
+ ----
+
+ YAML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/TimeFilter.yaml[`log4j2.yaml`]
+ [source,yaml,indent=0]
+ ----
+ include::example$manual/filters/TimeFilter.yaml[tag=filter]
+ ----
+
+ Properties::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/TimeFilter.properties[`log4j2.properties`]
+ [source,properties,indent=0]
+ ----
+ include::example$manual/filters/TimeFilter.properties[tag=filter]
+ ----
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-TimeFilter[📖 Plugin reference for `TimeFilter`]
+
+ [#level-filters]
+ === Level filters
+
+ The following filters allow you to filter log events based on their xref:manual/customloglevels.adoc[levels].
+
+ [#LevelMatchFilter]
+ ==== `LevelMatchFilter`
+
+ The `LevelMatchFilter` matches log events that have exactly a certain log level.
+
+ Besides the <>,
+ the `LevelMatchFilter` supports the following parameter:
+
+ .`LevelMatchFilter` -- configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ | Attribute | Type | Default value | Description
+
+ | level
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html[`Level`]
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html#ERROR[`ERROR`]
+ | The filter only matches log events of this level.
+
+ |===
+
+ [TIP]
+ ====
+ If you wish to use a different log file for each log level, you should also use a
+ xref:manual/appenders/delegating.adoc#RoutingAppender[`Routing` appender] together with the
+ xref:manual/lookups.adoc#EventLookup[`${event:Level}` lookup].
+ Such a solution will ensure that:
+
+ * you don't forget any log level (Log4j supports xref:manual/customloglevels.adoc[custom levels]).
+ * you don't need to configure an appender for each level separately.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-LevelMatchFilter[📖 Plugin reference for `LevelMatchFilter`]
+
+ [#LevelRangeFilter]
+ ==== `LevelRangeFilter`
+
+ The `LevelRangeFilter` matches log events with a log level within a configured range.
+
+ Besides the <>,
+ the `LevelRangeFilter` supports the following parameter:
+
+ .`LevelRangeFilter` -- configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ | Attribute | Type | Default value | Description
+
+ | minLevel
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html[`Level`]
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html#OFF[`OFF`]
+ | The filter only matches log events at most as severe as this level.
+
+ | maxLevel
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html[`Level`]
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html#ALL[`ALL`]
+ | The filter only matches log events at least as severe as this level.
+
+ |===
+
+ [TIP]
+ ====
+ Make sure not to invert the bounds of the range.
+ Starting from the smallest level,
+ {log4j2-url}/manual/customloglevels.html[the Log4j API defines]: `OFF`,
+ `FATAL`, `ERROR`, `WARN`, `INFO`, `DEBUG`, `TRACE` and `ALL`.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-LevelRangeFilter[📖 Plugin reference for `LevelRangeFilter`]
+
+ [#ThresholdFilter]
+ ==== `ThresholdFilter`
+
+ The `ThresholdFilter` matches log events at least as severe as a configured level.
+
+ Besides the <>,
+ the `ThresholdFilter` supports the following parameter:
+
+ .`ThresholdFilter`—configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ | Attribute | Type | Default value | Description
+
+ | level
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html[`Level`]
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html#OFF[`OFF`]
+ | The filter only matches log events at least as severe as this level.
+
+ |===
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-ThresholdFilter[📖 Plugin reference for `ThresholdFilter`]
+
+ [#DynamicThresholdFilter]
+ ==== `DynamicThresholdFilter`
+
+ The `DynamicThresholdFilter` is a variant of <>,
+ which uses a different threshold for each log event.
+ The effective threshold to use is determined by querying the
+ {log4j2-url}/manual/thread-context.html[context data]
+ of the log event.
+ For each log event:
+
+ . The filter retrieves the value of `key` in the context data map.
+ . The filter checks the list of nested
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-util-KeyValuePair[`KeyValuePair`]
+ configuration elements to decide which level to apply.
+
+ Besides the <>,
+ the `DynamicThresholdFilter` supports the following parameters:
+
+ .`DynamicThresholdFilter`—configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ | Attribute | Type | Default value | Description
+
+ | key
+ | `String`
+ |
+ | The key to a value in the context map of the log event.
+
+ **Required**
+
+ | defaultThreshold
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html[`Level`]
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Level.html#ERROR[`ERROR`]
+ | Threshold to apply to log events that don't have a corresponding `KeyValuePair`.
+
+ |===
+
+ .`DynamicThresholdFilter`—nested elements
+ [cols="1m,1,4"]
+ |===
+ | Type | Multiplicity | Description
+
+ | xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-util-KeyValuePair[`KeyValuePair`]
+ | One or more
+ | Associates a log level with the context map value associated with `key`.
+
+ |===
+
+ For example, if `loginId` contains the login of the current user,
+ you can use this configuration to apply different thresholds to different users:
+
+ [tabs]
+ ====
+ XML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/DynamicThresholdFilter.xml[`log4j2.xml`]
+ [source,xml,indent=0]
+ ----
+ include::example$manual/filters/DynamicThresholdFilter.xml[tag=filter]
+ ----
+
+ JSON::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/DynamicThresholdFilter.json[`log4j2.json`]
+ [source,json,indent=0]
+ ----
+ include::example$manual/filters/DynamicThresholdFilter.json[tag=filter]
+ ----
+
+ YAML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/DynamicThresholdFilter.yaml[`log4j2.yaml`]
+ [source,yaml,indent=0]
+ ----
+ include::example$manual/filters/DynamicThresholdFilter.yaml[tag=filter]
+ ----
+
+ Properties::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/DynamicThresholdFilter.properties[`log4j2.properties`]
+ [source,properties,indent=0]
+ ----
+ include::example$manual/filters/DynamicThresholdFilter.properties[tag=filter]
+ ----
+ ====
+
+ <1> If the `loginId` is `alice` a threshold level of `DEBUG` will be used.
+ <2> If the `loginId` is `bob` a threshold level of `INFO` will be used.
+ <3> For all the other values of `loginId` a threshold level of `ERROR` will be used.
+
+ [TIP]
+ ====
+ You can use Log4j Core's
+ xref:manual/configuration.adoc#configuration-attribute-monitorInterval[automatic reconfiguration feature]
+ to modify the ``KeyValuePair``s without restarting your application.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-DynamicThresholdFilter[📖 Plugin reference for `DynamicThresholdFilter`]
+
+ [#marker-filters]
+ === Marker filters
+
+ The following filters use the
+ {log4j2-url}/manual/markers.html[log event marker]
+ to filter log events.
+
+ [#NoMarkerFilter]
+ ==== `NoMarkerFilter`
+
+ The `NoMarkerFilter` matches log events that do not have any markers.
+
+ This filter does not have any additional configuration attribute,
+ except the <>.
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-NoMarkerFilter[📖 Plugin reference for `NoMarkerFilter`]
+
+ [#MarkerFilter]
+ ==== `MarkerFilter`
+
+ The `MarkerFilter` matches log events marked with a specific marker or **any** of its descendants.
+
+ Besides the <>,
+ the `MarkerFilter` supports the following parameter:
+
+ .`MarkerFilter`—configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ |Attribute | Type | Default value | Description
+
+ | marker
+ | link:../javadoc/log4j-api/org/apache/logging/log4j/Marker.html[`Marker`]
+ |
+ | The filter only matches log events of marker with the given marker or one of its descendants.
+
+ **Required**
+
+ |===
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-MarkerFilter[📖 Plugin reference for `MarkerFilter`]
+
+ [#message-filters]
+ === Message filters
+
+ Message filters allow filtering log events based on the
+ {log4j2-url}/manual/messages.html[`Message`]
+ contained in the log event.
+
+ include::partial$manual/log-event.adoc[]
+
+ [#RegexFilter]
+ ==== `RegexFilter`
+
+ The `RegexFilter` matches a regular expression against messages.
+ Besides the <>, the `RegexFilter` supports the following parameters:
+
+ .`RegexFilter` configuration attributes
+ [%header,cols="1m,1,1,4"]
+ |===
+ |Attribute
+ | Type
+ | Default value
+ | Description
+
+ | regex
+ | https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/util/regex/Pattern.html[`Pattern`]
+ |
+ | The regular expression used to match log messages.
+
+ **Required**
+
+ | useRawMsg
+ | `boolean`
+ | `false`
+ | If `true`, for
+ {log4j2-url}/manual/messages.html#ParameterizedMessage[`ParameterizedMessage`],
+ {log4j2-url}/manual/messages.html#StringFormattedMessage[`StringFormattedMessage`],
+ and
+ {log4j2-url}/messages.html#MessageFormatMessage[`MessageFormatMessage`],
+ the message format pattern; for
+ {log4j2-url}/manual/messages.html#StructuredDataMessage[`StructuredDataMessage`],
+ the message field will be used as the match target.
+ |===
+
+ [WARNING]
+ ====
+ * This filter only matches if the **whole** log message matches the regular expression.
+
+ * Setting `useRawMsg` to `false` decreases performance, since it forces the formatting of all log messages, including the disabled ones.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-RegexFilter[📖 Plugin reference for `RegexFilter`]
+
+ [#StringMatchFilter]
+ ==== `StringMatchFilter`
+
+ The `StringMatchFilter` matches a log event, if its message contains the given string.
+
+ Besides the <>,
+ the `StringMatchFilter` supports the following parameters:
+
+ .`StringMatchFilter`—configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ | Attribute | Type | Default value | Description
+
+ | text
+ | `String`
+ |
+ | The text to look for.
+
+ **Required**
+
+ |===
+
+ [WARNING]
+ ====
+ This filter decreases performance, since it forces the formatting of all log messages, including the disabled ones.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-StringMatchFilter[📖 Plugin reference for `StringMatchFilter`]
+
+ [#map-filters]
+ === Map filters
+
+ The following filters match log events based on the content of one of these map structures:
+
+ * The map contained in a
+ {log4j2-url}/manual/messages.html#MapMessage[`MapMessage`] object.
+ See
+ link:../javadoc/log4j-api/org/apache/logging/log4j/message/MapMessage.html#getData()[`MapMessage.getData()`]
+ for details.
+ * The context data map contained in a
+ link:../javadoc/log4j-core/org/apache/logging/log4j/core/LogEvent.html[`LogEvent`].
+ See
+ link:../javadoc/log4j-core/org/apache/logging/log4j/core/LogEvent.html#getContextData()[`LogEvent.getContextData()`]
+ for details.
+
+ [#configuration-map]
+ ==== Configuration map
+
+ These filters are configured with a configuration map of type `Map`,
+ which,
+ depending on the filter,
+ is encoded as either JSON:
+
+ [source,json]
+ ----
+ include::example$manual/filters/configs.json[]
+ ----
+
+ or as a sequence of
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-util-KeyValuePair[`KeyValuePair`]
+ plugins:
+
+ [source,xml,indent=0]
+ ----
+ include::example$manual/filters/ContextMapFilter.xml[tag=kvp]
+ ----
+
+ The configuration map associates to each key a list of allowed values for that key.
+ In the example above the allowed values for the `loginId` key are either `alice` or `bob`.
+ The only allowed value for the `clientId` key is `1234`.
+
+ The map filters can work in two matching modes:
+
+ [[matching-mode-and]]
+ AND::
+ A map structure matches
+ if the value associated with **each** key
+ that appears in the configuration map is one of the allowed values.
+
+ [[matching-mode-or]]
+ OR::
+ A map structure matches
+ if the value associated with **at least one** key
+ that appears in the configuration map is one of the allowed values.
+
+ [#MapFilter]
+ ==== `MapFilter`
+
+ The `MapFilter` allows filtering based on the contents of all
+ {log4j2-url}/manual/messages.html#collection-structured[structured ``Message``s].
+
+ This filter encodes the <> introduced above as a list of
+ `KeyValuePair` elements.
+
+ Besides the <>,
+ the `MapFilter` supports the following parameters:
+
+ .`MapFilter` -- configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ | Attribute | Type | Default value | Description
+
+ | operator
+ | _enumeration_
+ | `AND`
+ a| Determines the matching mode of the filter.
+ Can be:
+
+ * <>
+ * <>
+
+ |===
+
+ .`MapFilter` -- nested elements
+ [cols="1m,1,4"]
+ |===
+ | Type | Multiplicity | Description
+
+ | xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-util-KeyValuePair[`KeyValuePair`]
+ | One or more
+ | Adds a value as allowed value for a key.
+ See <> for more details.
+
+ |===
+
+ For example,
+ if you want to filter all ``MapMessage``s
+ that have an `eventType` key with value `authentication` **and** an `eventId` key with value either `login` **or** `logout`,
+ you can use the following configuration:
+
+ [tabs]
+ ====
+ XML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/MapFilter.xml[`log4j2.xml`]
+ [source,xml,indent=0]
+ ----
+ include::example$manual/filters/MapFilter.xml[tag=filter]
+ ----
+
+ JSON::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/MapFilter.json[`log4j2.json`]
+ [source,json,indent=0]
+ ----
+ include::example$manual/filters/MapFilter.json[tag=filter]
+ ----
+
+ YAML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/MapFilter.yaml[`log4j2.yaml`]
+ [source,yaml,indent=0]
+ ----
+ include::example$manual/filters/MapFilter.yaml[tag=filter]
+ ----
+
+ Properties::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/MapFilter.yaml[`log4j2.properties`]
+ [source,properties,indent=0]
+ ----
+ include::example$manual/filters/MapFilter.properties[tag=filter]
+ ----
+ ====
+
+ [TIP]
+ ====
+ You can use Log4j Core's
+ xref:manual/configuration.adoc#configuration-attribute-monitorInterval[automatic reconfiguration feature]
+ to modify the ``KeyValuePair``s without restarting your application.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-MapFilter[📖 Plugin reference for `MapFilter`]
+
+ [#StructuredDataFilter]
+ ==== `StructuredDataFilter`
+
+ The `StructuredDataFilter` is a variant of <> that only matches
+ {log4j2-url}/manual/messages.html#StructuredDataMessage[`StructureDataMessage`]s.
+
+ In addition to matching the map structure contained in a `StructuredDataMessage`
+ (which corresponds to https://datatracker.ietf.org/doc/html/rfc5424#section-6.3.3[RFC 5424 `SD-PARAM` elements])
+ it provides the following virtual keys:
+
+ .`StructuredDataFilter` -- virtual keys
+ [cols="1m,1,4"]
+ |===
+ | Key | RFC5424 field | Description
+
+ | id
+ | https://datatracker.ietf.org/doc/html/rfc5424#section-6.3.2[`SD-ID`]
+ | The
+ link:../javadoc/log4j-api/org/apache/logging/log4j/message/StructuredDataMessage.html#getId()[`id` field]
+ of the `StructuredDataMessage`.
+
+ | id.name
+ |
+ | The
+ link:../javadoc/log4j-api/org/apache/logging/log4j/message/StructuredDataId.html#getName()[`name` field]
+ of the `StructuredDataId` element.
+
+ | type
+ | https://datatracker.ietf.org/doc/html/rfc5424#section-6.2.7[`MSGID`]
+ | The
+ link:../javadoc/log4j-api/org/apache/logging/log4j/message/StructuredDataMessage.html#getType()[`type` field]
+ of a `StructuredDataMessage`.
+
+ | message
+ | https://datatracker.ietf.org/doc/html/rfc5424#section-6.4[`MSG`]
+ | The result of a
+ link:../javadoc/log4j-api/org/apache/logging/log4j/message/Message.html#getFormat()[`Message.getFormat()`] method call.
+
+ |===
+
+ The `StructuredDataFilter` encodes the <> introduced above as a list of
+ `KeyValuePair` and supports the following parameters,
+ besides the <>:
+
+ .`StructuredDataFilter`—configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ | Attribute | Type | Default value | Description
+
+ | operator
+ | _enumeration_
+ | `AND`
+ a| Determines the matching mode of the filter.
+ Can be:
+
+ * <>
+ * <>
+
+ |===
+
+ .`StructuredDataFilter` -- nested elements
+ [cols="1m,1,4"]
+ |===
+ | Type | Multiplicity | Description
+
+ | xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-util-KeyValuePair[`KeyValuePair`]
+ | One or more
+ | Adds a value as allowed value for a key.
+ See <> for more details.
+
+ |===
+
+ If you want
+ to match all log messages with an `SD-ID` equal to `authentication` and the value of the `userId` `SD-PARAM` equal to either `alice` or `bob`,
+ you can use the following configuration:
+
+ [tabs]
+ ====
+ XML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/StructuredDataFilter.xml[`log4j2.xml`]
+ [source,xml,indent=0]
+ ----
+ include::example$manual/filters/StructuredDataFilter.xml[tag=filter]
+ ----
+
+ JSON::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/StructuredDataFilter.json[`log4j2.json`]
+ [source,json,indent=0]
+ ----
+ include::example$manual/filters/StructuredDataFilter.json[tag=filter]
+ ----
+
+ YAML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/StructuredDataFilter.yaml[`log4j2.yaml`]
+ [source,yaml,indent=0]
+ ----
+ include::example$manual/filters/StructuredDataFilter.yaml[tag=filter]
+ ----
+
+ Properties::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/StructuredDataFilter.yaml[`log4j2.properties`]
+ [source,properties,indent=0]
+ ----
+ include::example$manual/filters/StructuredDataFilter.properties[tag=filter]
+ ----
+ ====
+
+ [TIP]
+ ====
+ You can use Log4j Core's
+ xref:manual/configuration.adoc#configuration-attribute-monitorInterval[automatic reconfiguration feature]
+ to modify the ``KeyValuePair``s without restarting your application.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-StructuredDataFilter[📖 Plugin reference for `StructuredDataFilter`]
+
+ [#ThreadContextMapFilter]
+ ==== `ContextMapFilter`
+
+ The `ContextMapFilter` works in the same way as the <> above,
+ except it checks the
+ {log4j2-url}/manual/thread-context.html[context map data]
+ of the log event instead of the log message.
+
+ This filter also encodes the <> introduced above as a list of
+ `KeyValuePair` elements.
+
+ Besides the <>,
+ the `ContextMapFilter` supports the following parameters:
+
+ .`ContextMapFilter` -- configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ | Attribute | Type | Default value | Description
+
+ | operator
+ | _enumeration_
+ | `AND`
+ a| Determines the matching mode of the filter.
+ Can be:
+
+ * <>
+ * <>
+
+ |===
+
+ .`ContextMapFilter` -- nested elements
+ [cols="1m,1,4"]
+ |===
+ | Type | Multiplicity | Description
+
+ | xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-util-KeyValuePair[`KeyValuePair`]
+ | One or more
+ | Adds a value as allowed value for a key.
+ See <> for more details.
+
+ |===
+
+ For example,
+ if the `clientId` and `userId` keys in the context data map identify your client and his end users,
+ you can filter the log events generated by users `alice` and `bob` of client `1234` using this configuration:
+
+ [tabs]
+ ====
+ XML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ContextMapFilter.xml[`log4j2.xml`]
+ [source,xml,indent=0]
+ ----
+ include::example$manual/filters/ContextMapFilter.xml[tag=filter]
+ ----
+
+ JSON::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ContextMapFilter.json[`log4j2.json`]
+ [source,json,indent=0]
+ ----
+ include::example$manual/filters/ContextMapFilter.json[tag=filter]
+ ----
+
+ YAML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ContextMapFilter.yaml[`log4j2.yaml`]
+ [source,yaml,indent=0]
+ ----
+ include::example$manual/filters/ContextMapFilter.yaml[tag=filter]
+ ----
+
+ Properties::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ContextMapFilter.yaml[`log4j2.properties`]
+ [source,properties,indent=0]
+ ----
+ include::example$manual/filters/ContextMapFilter.properties[tag=filter]
+ ----
+ ====
+
+ [TIP]
+ ====
+ You can use Log4j Core's
+ xref:manual/configuration.adoc#configuration-attribute-monitorInterval[automatic reconfiguration feature]
+ to modify the ``KeyValuePair``s without restarting your application.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-ThreadContextMapFilter[📖 Plugin reference for `ContextMapFilter`]
+
+ [#MutableThreadContextMapFilter]
+ ==== `MutableContextMapFilter`
+
+ The `MutableContextMapFilter` is an alternative version of <> that also uses the
+ {log4j2-url}/manual/thread-context.html[context data map]
+ to filter messages, but externalizes the <>, so it can be kept in a separate location.
+
+ This filter encodes the <> as JSON.
+ The configuration map must be stored in an **external** location and will be regularly polled for changes.
+
+ Besides the <>,
+ the `MutableContextMapFilter` supports the following parameters:
+
+ .`MutableContextMapFilter` -- configuration attributes
+ [cols="1m,1,1,4"]
+ |===
+ | Attribute | Type | Default value | Description
+
+ | configLocation
+ | https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/nio/file/Path.html[`Path`]
+ or
+ https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/net/URI.html[`URI`]
+ |
+ | The location of the JSON <>.
+
+ **Required**
+
+ | pollInterval
+ | `long`
+ | `0`
+ |
+ Determines the polling interval used by Log4j to check for changes to the configuration map.
+
+ If set to `0`, polling is disabled.
+
+ |===
+
+ [WARNING]
+ ====
+ Unlike other map filters that have a configurable matching mode,
+ this filter always uses the <> matching mode.
+ ====
+
+ To use this filter, you need to:
+
+ . Create a JSON configuration map and place it at a known location (e.g. `++https://server.example/configs.json++`):
+ +
+ [source,json]
+ ----
+ include::example$manual/filters/configs2.json[]
+ ----
+ +
+ <1> The filter will match all events for client `1234` regardless of the `userId`.
+ <2> The filter will match all events for the `root` account regardless of the `clientId`.
+
+ . Reference the configuration map location in your configuration file:
+ +
+ [tabs]
+ ====
+ XML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/MutableContextMapFilter.xml[`log4j2.xml`]
+ [source,xml,indent=0]
+ ----
+ include::example$manual/filters/MutableContextMapFilter.xml[tag=filter]
+ ----
+
+ JSON::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/MutableContextMapFilter.json[`log4j2.json`]
+ [source,json,indent=0]
+ ----
+ include::example$manual/filters/MutableContextMapFilter.json[tag=filter]
+ ----
+
+ YAML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/MutableContextMapFilter.yaml[`log4j2.yaml`]
+ [source,yaml,indent=0]
+ ----
+ include::example$manual/filters/MutableContextMapFilter.yaml[tag=filter]
+ ----
+
+ Properties::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/MutableContextMapFilter.yaml[`log4j2.properties`]
+ [source,properties,indent=0]
+ ----
+ include::example$manual/filters/MutableContextMapFilter.properties[tag=filter]
+ ----
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-MutableThreadContextMapFilter[📖 Plugin reference for `MutableContextMapFilter`]
+
+ [#other-filters]
+ === Other filters
+
+ [#deny-filter]
+ ==== `DenyFilter`
+
+ The `DenyFilter` always returns `DENY`.
+ It does not support **any** configuration attribute, even the common configuration attributes.
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-DenyAllFilter[📖 Plugin reference for `DenyAllFilter`]
+
+ [#ScriptFilter]
+ ==== `ScriptFilter`
+
+ The `ScriptFilter` executes a script that must return `true` if the event matches and `false` otherwise.
+
+ Besides the <>,
+ it accepts a single nested element:
+
+ .`ScriptFilter` -- nested elements
+ [cols="3,1,4"]
+ |===
+ | Type | Multiplicity | Description
+
+ |
+ xref:manual/scripts.adoc#Script[`Script`],
+ xref:manual/scripts.adoc#ScriptFile[`ScriptFile`]
+ or
+ xref:manual/scripts.adoc#ScriptRef[`ScriptRef`]
+ | one
+ | A reference to the script to execute.
+
+ See xref:manual/scripts.adoc[Scripts] for more details about scripting.
+ |===
+
+ .Additional runtime dependencies are required to use `ScripFilter`
+ [%collapsible]
+ =====
+ include::partial$components/log4j-script.adoc[]
+ =====
+
+ The bindings available to the script depend
+ on whether the `ScriptFilter` is used as a global filter in the <> or in the remaining stages.
+ For global filters, the following bindings are available:
+
+ .Script Bindings -- global filter
+ [cols="1m,1,4"]
+ |===
+ | Binding name | Type | Description
+
+ | logger
+ | link:../javadoc/log4j-core/org/apache/logging/log4j/core/Logger.html[`Logger`]
+ | The logger used in the log statement.
+
+ | level
+ | {log4j2-url}/manual/customloglevels.html[`Level`]
+ | The level used in the log statement.
+
+ | marker
+ | {log4j2-url}/manual/markers.html[`Marker`]
+ | The marker used in the log statement.
+
+ | message
+ | {log4j2-url}/manual/messages.html[`Message`]
+ a| The message used in the log event if the user directly supplied one.
+ Otherwise:
+
+ * If the logging statement contained an `Object` argument, it is wrapped in a
+ {log4j2-url}/manual/messages.html#ObjectMessage[`ObjectMessage`].
+ * If the logging statement contained a format `String`, it is wrapped in a
+ {log4j2-url}/manual/messages.html#SimpleMessage[`SimpleMessage`].
+
+ | parameters
+ | `Object[]`
+ | The parameters passed to the logging call.
+ Some logging calls include the parameters as part of `message`.
+
+ | throwable
+ | `Throwable`
+ | The `Throwable` passed to the logging call, if any.
+ Some logging calls include the `Throwable` as part of `message`.
+
+ | substitutor
+ | link:../javadoc/log4j-core/org/apache/logging/log4j/core/lookup/StrSubstitutor.html[`StrSubstitutor`]
+ | The `StrSubstitutor` used to replace lookup variables.
+
+ |===
+
+ For the remaining filters, only these bindings are available:
+
+ .Script Bindings -- internal filter
+ [cols="1m,1,4"]
+ |===
+ | Binding name | Type | Description
+
+ | logEvent
+ | link:../javadoc/log4j-core/org/apache/logging/log4j/core/LogEvent.html[`LogEvent`]
+ | The log event being processed.
+
+ | substitutor
+ | link:../javadoc/log4j-core/org/apache/logging/log4j/core/lookup/StrSubstitutor.html[`StrSubstitutor`]
+ | The `StrSubstitutor` used to replace lookup variables.
+
+
+ |===
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-filter-ScriptFilter[📖 Plugin reference for `ScriptFilter`]
+
+ As an example, if you wish to match only log events that contain a certain exception,
+ you can use a simple Groovy script:
+
+ .`scripts/local.groovy`
+ [source,groovy]
+ ----
+ include::example$manual/filters/local.groovy[lines=17..-1]
+ ----
+
+ You can then integrate the script in a Log4j configuration:
+
+ [tabs]
+ ====
+ XML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ScriptFilter.xml[`log4j2.xml`]
+ [source,xml,indent=0]
+ ----
+ include::example$manual/filters/ScriptFilter.xml[tag=local]
+ ----
+
+ JSON::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ScriptFilter.json[`log4j2.json`]
+ [source,json,indent=0]
+ ----
+ include::example$manual/filters/ScriptFilter.json[tag=local]
+ ----
+
+ YAML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ScriptFilter.yaml[`log4j2.yaml`]
+ [source,yaml,indent=0]
+ ----
+ include::example$manual/filters/ScriptFilter.yaml[tag=local]
+ ----
+
+ Properties::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ScriptFilter.yaml[`log4j2.properties`]
+ [source,properties,indent=0]
+ ----
+ include::example$manual/filters/ScriptFilter.properties[tag=local]
+ ----
+ ====
+
+ Writing an equivalent **global** script is a little bit more complex,
+ since you need to take into account all the places where a throwable can be passed as a parameter.
+ The script becomes:
+
+ .`scripts/global.groovy`
+ [source,groovy]
+ ----
+ include::example$manual/filters/global.groovy[lines=17..-1]
+ ----
+
+ You can use it as a global filter:
+
+ [tabs]
+ ====
+ XML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ScriptFilter.xml[`log4j2.xml`]
+ [source,xml,indent=0]
+ ----
+ include::example$manual/filters/ScriptFilter.xml[tag=global]
+ ----
+
+ JSON::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ScriptFilter.json[`log4j2.json`]
+ [source,json,indent=0]
+ ----
+ include::example$manual/filters/ScriptFilter.json[tag=global]
+ ----
+
+ YAML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ScriptFilter.yaml[`log4j2.yaml`]
+ [source,yaml,indent=0]
+ ----
+ include::example$manual/filters/ScriptFilter.yaml[tag=global]
+ ----
+
+ Properties::
+ +
+ .Snippet from an example {antora-examples-url}/manual/filters/ScriptFilter.yaml[`log4j2.properties`]
+ [source,properties,indent=0]
+ ----
+ include::example$manual/filters/ScriptFilter.properties[tag=global]
+ ----
+ ====
+
+ [#extending]
+ == Extending
+
+ Filters are xref:manual/plugins.adoc[plugins] implementing link:../javadoc/log4j-core/org/apache/logging/log4j/core/Filter.html[the `Filter` interface].
+ This section will guide you on how to create custom ones.
+
+ [NOTE]
+ ====
+ While <> should address most common use cases, you might find yourself needing to implement a custom one.
+ If this is the case, we really appreciate it if you can *share your use case in a {logging-services-url}/support.html[user support channel]*.
+ ====
+
+ [#extending-plugins]
+ === Plugin preliminaries
+
+ include::partial$manual/plugin-preliminaries.adoc[]
+
+ [#extending-filters]
+ === Extending filters
+
+ Filters are xref:manual/plugins.adoc[plugins]
+ implementing link:../javadoc/log4j-core/org/apache/logging/log4j/core/Filter.html[the `Filter`
+ interface].
+ We recommend users
+ to extend from link:../javadoc/log4j-core/org/apache/logging/log4j/core/filter/AbstractFilter.html[`AbstractFilter`],
+ which provides implementation convenience.
+ While annotating your filter with `@Plugin`, you need to make sure that
+
+ * It has a unique `name` attribute across all available `Filter` plugins
+ * The `category` attribute is set to link:../javadoc/log4j-core/org/apache/logging/log4j/core/config/Node.html#CATEGORY[`Node.CATEGORY`]
+
+ You can check out the following files for examples:
+
+ * {project-github-url}/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/MarkerFilter.java[`MarkerFilter.java`] – <> matching on markers associated with the effective `LogEvent` in the context
+ * {project-github-url}/log4j-core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java[`RegexFilter.java`] – <> matching on the message associated with the effective `LogEvent` in the context
+////
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/index.adoc b/src/site/antora/modules/ROOT/pages/manual/index.adoc
new file mode 100644
index 00000000..4163c7d9
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/index.adoc
@@ -0,0 +1,71 @@
+////
+ 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.
+////
+= Manual
+
+log4net is a tool to help the programmer output log statements to a variety of output targets.
+
+In case of problems with an application, it is helpful to enable logging so that the problem can be located.
+With log4net it is possible to enable logging at runtime without modifying the application binary.
+The log4net package is designed so that log statements can remain in _production_ code without incurring a high performance cost.
+It follows that the speed of logging (or rather not logging) is crucial.
+
+At the same time, log output can be so voluminous that it quickly becomes overwhelming.
+One of the distinctive features of log4net (and common to all of
+the log4x libraries) is the notion of _hierarchical loggers_.
+Using these loggers it is possible to selectively control
+which log statements are output at arbitrary granularity.
+
+log4net is designed with two distinct goals in mind: speed and flexibility.
+There is a tight balance between these two requirements.
+
+== What are the prerequisites for log4net?
+
+log4net runs on net462 or higher and any framework supporting netstandard2.0.
+
+== Is there example code for using log4net?
+
+You can find many examples in https://github.com/apache/logging-log4net/tree/master/examples[log4net/examples].
+
+== What does log4net offer?
+
+log4net offers numerous features, including:
+
+* log4net is optimized for speed
+* log4net is based on a named logger hierarchy
+* log4net is thread-safe
+* Logging behavior can be set at runtime using a configuration file (xml)
+* log4net is designed to handle exceptions from the start
+* log4net can direct its output to many sinks including: a file, the console, Syslog/EventLog or even e-mail
+* log4net categorizes logging into levels: DEBUG, INFO, WARN, ERROR and FATAL.
+* The format of the log output can be easily changed by implementing a new layout class
+* The target of the log output as well as the writing strategy can be altered by writing a new appender class
+* log4net supports multiple output appenders per logger
+
+See xref:features.adoc[]
+
+////
+
+== How to learn more?
+
+ * xref:manual/getting-started.adoc[How can I get started with Log4j?]
+ * xref:manual/installation.adoc[How can I install Log4j?]
+ * xref:manual/configuration.adoc[How can I configure Log4j?]
+ * xref:manual/api.adoc[How can I use Log4j API?]
+ * xref:manual/performance.adoc[How can I tune my Log4j setup for performance?]
+ * xref:manual/plugins.adoc[What are Log4j plugins] and xref:manual/extending.adoc[how can I use them to extend Log4j?]
+
+////
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/installation.adoc b/src/site/antora/modules/ROOT/pages/manual/installation.adoc
new file mode 100644
index 00000000..1eee866a
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/installation.adoc
@@ -0,0 +1,35 @@
+////
+ 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.
+////
+
+[#install]
+= Install Apache log4net
+
+The preferred way to install log4net is to use our https://www.nuget.org/packages/log4net[nuget package].
+
+Just add the following lines in your project file.
+[source,xml]
+----
+
+
+
+----
+Now you can use log4net. See our https://github.com/apache/logging-log4net/tree/master/examples[examples].
+
+[source,powershell]
+----
+dotnet add package log4net
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/layouts.adoc b/src/site/antora/modules/ROOT/pages/manual/layouts.adoc
new file mode 100644
index 00000000..d0d659f9
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/layouts.adoc
@@ -0,0 +1,563 @@
+////
+ 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.
+////
+
+= Layouts
+
+An xref:manual/appenders.adoc[appender] uses a *layout* to encode a link:../javadoc/log4j-core/org/apache/logging/log4j/core/LogEvent.html[`LogEvent`] into a form that meets the needs of whatever will be consuming the log event.
+This page will try to answer following questions:
+
+* <>
+* <>
+* <>
+
+[#concerns]
+== Common concerns
+
+This section introduces you to some common concerns shared by almost all <> that you need to be aware of while using them.
+
+////
+ [#structured-logging]
+ === Structured logging
+
+ include::partial$manual/structured-logging.adoc[]
+
+ Log4j strives to provide top of the class support for structured logging.
+ To create an end-to-end experience, it provides several {log4j2-url}/manual/messages.html#collection-structured[structured message types] along with layouts supporting structured logging.
+
+ We recommend xref:manual/json-template-layout.adoc[] for structured logging purposes.
+
+ [#charset]
+ === Character encoding
+
+ All <> produce `String` that eventually get converted into a `byte` using the
+ https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/nio/charset/Charset.html[`Charset`]
+ configured.
+ While doing so, unless an explicit encoding configuration is stated, they use `UTF-8` by default.
+ If you want all your log events to be formatted in a certain character encoding that is different from what the employed layout defaults to, make sure to configure the layout's character encoding as needed.
+
+ [#LocationInformation]
+ === Location information
+
+ include::partial$manual/layouts-location-information.adoc[]
+
+ [#collection]
+ == Collection
+
+ Log4j bundles predefined layouts to assist in several common deployment use cases.
+ Let's start with shortcuts to most used ones:
+
+ * Are you looking for a production-grade *JSON layout ready to be deployed to a log ingestion system* such as Elasticsearch or Google Cloud?
+ Refer to xref:manual/json-template-layout.adoc[].
+
+ * Are you looking for a layout that encodes log events in a *human-readable format suitable for tests and local development*?
+ Refer to xref:manual/pattern-layout.adoc[].
+
+ Following sections explain all predefined layouts in detail.
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-Layout[📖 Plugin reference for all `Layout` implementations]
+
+ [#csv-layouts]
+ === [[CSVLayouts]] CSV Layouts
+
+ There are two layouts performing https://en.wikipedia.org/wiki/Comma-separated_values[Comma Separated Value (CSV)] encoding:
+
+ [#csv-layout-parameter]
+ ==== CSV Parameter Layout
+
+ `CsvParameterLayout` encodes *only* the parameters of the message of a log event.
+ Generated CSV records will be composed of fields denoting the message parameters.
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-layout-CsvParameterLayout[📖 Plugin reference for `CsvParameterLayout`]
+
+ .Click here for examples
+ [%collapsible]
+ ====
+ Given the following statement
+
+ [source,java]
+ ----
+ LOGGER.info("Record1 {} {}", "arg1", "arg2");
+ LOGGER.error("Record2 {} {} {}", "arg3", "arg4", "arg5", throwable);
+ ----
+
+ `CsvParameterLayout` will output
+
+ [source,text]
+ ----
+ arg1,arg2
+ arg3,arg4,arg5
+ ----
+
+ The same can be achieved using link:../javadoc/log4j-api/org/apache/logging/log4j/message/ObjectArrayMessage.html[`ObjectArrayMessage`] as follows:
+
+ [source,java]
+ ----
+ LOGGER.info(new ObjectArrayMessage("arg1", "arg2"));
+ LOGGER.info(new ObjectArrayMessage("arg3", "arg4", "arg5"));
+ ----
+ ====
+
+ [#csv-layout-log-event]
+ ==== CSV Log Event Layout
+
+ `CsvLogEventLayout` encodes the complete log event, including the formatted message.
+ Generated CSV records will be composed of following fields in the given order:
+
+ . Time (in nanoseconds)
+ . Time (in milliseconds)
+ . Level
+ . Thread ID
+ . Thread name
+ . Thread priority
+ . Message (formatted, hence including parameters)
+ . Logger FQCN
+ . Logger name
+ . Marker
+ . Throwable
+ . Source
+ . Thread context map
+ . Thread context stack
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-layout-CsvLogEventLayout[📖 Plugin reference for `CsvLogEventLayout`]
+
+ .Click here for examples
+ [%collapsible]
+ ====
+ Given the following statement
+
+ [source,java]
+ ----
+ LOGGER.debug("one={}, two={}, three={}", 1, 2, 3);
+ ----
+
+ `CsvLogEventLayout` will output
+
+ [source,text]
+ ----
+ 0,1441617184044,DEBUG,main,"one=1, two=2, three=3",org.apache.logging.log4j.spi.AbstractLogger,,,,org.apache.logging.log4j.core.layout.CsvLogEventLayoutTest.testLayout(CsvLogEventLayoutTest.java:98),{},[]
+ ----
+ ====
+
+ [#csv-layout-config]
+ ==== Configuration
+
+ Both `CsvParameterLayout` and `CsvLogEventLayout` are configured with the following parameters:
+
+ [%header,cols="1m,1m,4"]
+ |===
+ |Parameter
+ |Type
+ |Description
+
+ |format
+ |String
+ |A predefined format name (`Default`, `Excel`, `MySQL`, `RFC4180`, `TDF`, etc.) accepted by https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html[`CSVFormat`]
+
+ |delimiter
+ |Character
+ |The field delimiter character
+
+ |escape
+ |Character
+ |The escape character
+
+ |quote
+ |Character
+ |The quote character
+
+ |quoteMode
+ |String
+ |A quote mode name (`ALL`, `ALL_NONE_NULL`, `MINIMAL`, `NON_NUMERIC`, `NONE`, etc.) accepted by https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/QuoteMode.html[`QuoteMode`]
+
+ |nullString
+ |String
+ |The string to denote `null` values
+
+ |recordSeparator
+ |String
+ |The record separator string
+
+ |charset
+ |Charset
+ |The character encoding
+
+ |header
+ |String
+ |The header to include when the stream is opened
+
+ |footer
+ |String
+ |The footer to include when the stream is closed
+ |===
+
+ Additional runtime dependencies are required for using CSV layouts:
+
+ include::partial$features/layout-csv.adoc[]
+
+ [#HTMLLayout]
+ === HTML Layout
+
+ `HtmlLayout` generates an HTML page, and adds each log event to a row in a table.
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-layout-HtmlLayout[📖 Plugin reference for `HtmlLayout`]
+
+ It is configured with the following parameters:
+
+ [%header,cols="1m,1m,4"]
+ |===
+ |Parameter
+ |Type
+ |Description
+
+ |charset
+ |String
+ |The character encoding
+
+ |contentType
+ |String
+ |The `Content-Type` header value (defaults to `text/html`)
+
+ |datePattern
+ |String
+ |The date format of the log event.
+ The default is `JVM_ELAPSE_TIME`, which outputs the milliseconds since JVM started.
+ For other valid values, refer to xref:manual/pattern-layout.adoc#converter-date[the `date` conversion specifier of Pattern Layout].
+
+ |fontName
+ |String
+ |The `font-family` (defaults to `arial,sans-serif`)
+
+ |fontSize
+ |String
+ |The `font size` (defaults to `small`)
+
+ |locationInfo
+ |boolean
+ |If `true`, the <> be included (defaults to `false`)
+
+ |timezone
+ |String
+ |The time zone ID of the log event.
+ If not specified, this layout uses the
+ https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/util/TimeZone.html#getDefault()[`TimeZone.getDefault()`]
+ as the default.
+ You can use time zone IDs supported by
+ https://docs.oracle.com/en/java/javase/{java-target-version}/docs/api/java.base/java/util/TimeZone.html#getTimeZone(java.lang.String)[`TimeZone.getTimeZone(String)`].
+
+ |title
+ |String
+ |The HTML page title
+ |===
+
+ [#JSONTemplateLayout]
+ === JSON Template Layout
+
+ `JsonTemplateLayout` is a customizable, efficient, and garbage-free JSON generating layout.
+ It encodes ``LogEvent``s according to the structure described by the JSON template provided.
+
+ For instance, given the following event template stored in `MyLayout.json` in your classpath:
+
+ [source,json]
+ ----
+ {
+ "instant": { // <1>
+ "$resolver": "timestamp",
+ "pattern": {
+ "format": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
+ "timeZone": "UTC"
+ }
+ },
+ "someConstant": 1, // <2>
+ "message": { // <3>
+ "$resolver": "message",
+ "stringified": true
+ }
+ }
+ ----
+ <1> Using the `timestamp` event template resolver to populate the `instant` field
+ <2> Passing a constant that will be rendered as is
+ <3> Using the `message` event template resolver to populate the `message` field
+
+ in combination with the below layout configuration:
+
+ [tabs]
+ ====
+ XML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/json-template-layout/usage/log4j2.xml[`log4j2.xml`]
+ [source,xml]
+ ----
+ include::example$manual/json-template-layout/usage/log4j2.xml[lines=26..26,indent=0]
+ ----
+
+ JSON::
+ +
+ .Snippet from an example {antora-examples-url}/manual/json-template-layout/usage/log4j2.json[`log4j2.json`]
+ [source,json]
+ ----
+ include::example$manual/json-template-layout/usage/log4j2.json[lines=6..8,indent=0]
+ ----
+
+ YAML::
+ +
+ .Snippet from an example {antora-examples-url}/manual/json-template-layout/usage/log4j2.yaml[`log4j2.yaml`]
+ [source,xml]
+ ----
+ include::example$manual/json-template-layout/usage/log4j2.yaml[lines=22..23,indent=0]
+ ----
+
+ Properties::
+ +
+ .Snippet from an example {antora-examples-url}/manual/json-template-layout/usage/log4j2.properties[`log4j2.properties`]
+ [source,xml]
+ ----
+ include::example$manual/json-template-layout/usage/log4j2.properties[lines=19..20,indent=0]
+ ----
+ ====
+
+ JSON Template Layout generates JSON as follows:
+
+ [source,json]
+ ----
+ {"instant":"2017-05-25T19:56:23.370Z","someConstant":1,"message":"Hello, error!"} //<1>
+ ----
+ <1> JSON pretty-printing is not supported for performance reasons.
+
+ Good news is JSON Template Layout is perfectly production-ready without any configuration!
+ It bundles several predefined event templates modeling popular JSON-based log formats.
+
+ Read more on xref:manual/json-template-layout.adoc[]...
+
+ [#MessageLayout]
+ === Message Layout
+
+ `MessageLayout` is a special layout that extracts the
+ {log4j2-url}/manual/messages.html[`Message`]
+ contained in a log event.
+ It is currently only useful with the
+ xref:manual/appenders/database.adoc#JdbcAppender[JDBC Appender].
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-layout-MessageLayout[{plugin-reference-marker} Plugin reference for `MessageLayout`]
+
+ [id=pattern-layout]
+ === [[PatternLayout]] Pattern Layout
+
+ `PatternLayout` is a customizable, efficient, garbage-free, and human-readable string generating layout using a user-provided pattern.
+ It is analogous to `String#format()` with specialized directives on injecting certain properties of a `LogEvent`.
+
+ [IMPORTANT]
+ ====
+ Pattern Layout is not intended for _structural logging_ purposes.
+ For production environments, you are strongly advised to use xref:manual/json-template-layout.adoc[] producing JSON output ready to be delivered to log ingestion systems such as Elasticsearch or Google Cloud Logging.
+ ====
+
+ A conversion pattern is composed of literal text and format control expressions.
+ For instance, given the `%-5p [%t]: %m%n` pattern, following statements
+
+ [source,java]
+ ----
+ LOGGER.debug("Message 1");
+ LOGGER.warn("Message 2");
+ ----
+
+ will yield the output
+
+ [source,text]
+ ----
+ DEBUG [main]: Message 1
+ WARN [main]: Message 2
+ ----
+
+ Read more on xref:manual/pattern-layout.adoc[]...
+
+ [#RFC5424Layout]
+ === RFC 5424 Layout
+
+ `Rfc5424` Layout encodes log events according to https://datatracker.ietf.org/doc/html/rfc5424#section-6[the Syslog message format described in RFC 5424].
+
+ [NOTE]
+ ====
+ RFC 5424 obsoletes RFC 3164, implemented by <>.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-layout-Rfc5424Layout[📖 Plugin reference for `Rfc5424Layout`]
+
+ RFC 5424 Layout is configured with the following parameters:
+
+ [%header,cols="1m,1m,4"]
+ |===
+ |Parameter
+ |Type
+ |Description
+
+ |appName
+ |String
+ |The `APP-NAME` field as described in RFC 5424
+
+ |charset
+ |String
+ |The character encoding (defaults to `UTF-8`)
+
+ |enterpriseNumber
+ |integer
+ |
+ The `enterpriseId` parameter as described in RFC 5424.
+ If missing, `32473` will be used, which is https://www.rfc-editor.org/rfc/rfc5612.html#section-2[reserved for documentation use].
+
+ |exceptionPattern
+ |String
+ |An xref:manual/pattern-layout.adoc#converter-exception[`exception` conversion specifier of Pattern Layout].
+ The default is to not include the `Throwable` from the event, if any, in the output.
+
+ |facility
+ |String
+ |The name of link:../javadoc/log4j-core/org/apache/logging/log4j/core/net/Facility.html[`Facility`] as described in RFC 5424.
+ The matching is case-insensitive.
+ It defaults to `LOCAL0`.
+
+ |id
+ |String
+ |The default _Structured Data ID_ to use when formatting according to RFC 5424.
+ If the log event contains a {log4j2-url}/manual/messages.html#StructuredDataMessage[`StructuredDataMessage`], the ID from that message will be used instead.
+
+ |includeMDC
+ |boolean
+ |Indicates whether data from the {log4j2-url}/manual/thread-context.html[] map will be included in the RFC 5424 Syslog record (defaults to `true`)
+
+ |loggerFields
+ |link:../javadoc/log4j-core/org/apache/logging/log4j/core/util/KeyValuePair.html[KeyValuePair[\]]
+ |Allows arbitrary {log4j2-url}/manual/thread-context.html[] map entries.
+ To use, include a `LoggerFields` nested element, containing one or more `KeyValuePair` elements.
+ Each `KeyValuePair` must have `key` and `value` attributes associating them with a thread context map entry.
+ The `value` attribute can be an arbitrary xref:manual/pattern-layout.adoc[] pattern.
+
+ |mdcExcludes
+ |String
+ |A comma-separated list of {log4j2-url}/manual/thread-context.html[] map (aka, MDC) keys that should be excluded.
+ This is mutually exclusive with `mdcIncludes`.
+ This attribute only applies to RFC 5424 Syslog records.
+
+ |mdcIncludes
+ |String
+ |A comma-separated list of {log4j2-url}/manual/thread-context.html[] map (aka, MDC) keys that should be included.
+ Any keys in the thread context map not found in the list will be excluded.
+ This option is mutually exclusive with `mdcExcludes`.
+ This attribute only applies to RFC 5424 Syslog records.
+
+ |mdcId
+ |String
+ |The ID to use for the {log4j2-url}/manual/thread-context.html[] map (aka, MDC) Structured Data Element.
+ It defaults to `mdc`.
+ This attribute only applies to RFC 5424 Syslog records.
+
+ |mdcPrefix
+ |String
+ |A string to be prepended to each {log4j2-url}/manual/thread-context.html[] map (aka, MDC) key to distinguish it from event attributes.
+ It defaults to `mdc:`.
+ This attribute only applies to RFC 5424 Syslog records.
+
+ |mdcRequired
+ |String
+ |A comma-separated list of {log4j2-url}/manual/thread-context.html[`ThreadContext`] map (aka, MDC) keys that must be present.
+ If a key is not present, a
+ {log4j2-url}/javadoc/log4j-api/org/apache/logging/log4j/LoggingException.html[`LoggingException`]
+ will be thrown.
+ This attribute only applies to RFC 5424 Syslog records.
+
+ |messageId
+ |String
+ |The default value to be used in the `MSGID` field of RFC 5424 Syslog records
+
+ |newLine
+ |boolean
+ |If `true`, a `\n` character will be appended to the end of the Syslog record (defaults to `false`)
+
+ |newLineEscape
+ |String
+ |The string that should be used to replace newlines within the message text
+ |===
+
+ RFC 5424 Layout has specialized handling for {log4j2-url}/manual/messages.html#StructuredDataMessage[`StructuredDataMessage`]s.
+ By combining two, users can have complete control on how their message is encoded in a way compliant with RFC 5424, while RFC 5424 Layout will make sure the rest of the information attached to the log event is properly injected.
+
+ [#SyslogLayout]
+ === Syslog Layout
+
+ `SyslogLayout` encodes log events according to https://datatracker.ietf.org/doc/html/rfc3164#section-4.1[the syslog message format described in RFC 3164].
+ This matches the same format used by {logging-services-url}/log4j/1.x[Log4j 1].
+
+ [IMPORTANT]
+ ====
+ RFC 3164, implemented by Syslog Layout, is obsoleted by RFC 5424, implemented by <>.
+ ====
+
+ xref:plugin-reference.adoc#org-apache-logging-log4j_log4j-core_org-apache-logging-log4j-core-layout-SyslogLayout[📖 Plugin reference for `SyslogLayout`]
+
+ Syslog Layout is configured with the following parameters:
+
+ [%header,cols="1m,1m,4"]
+ |===
+ |Parameter
+ |Type
+ |Description
+
+ |charset
+ |String
+ |The character encoding (defaults to `UTF-8`)
+
+ |facility
+ |String
+ |The name of link:../javadoc/log4j-core/org/apache/logging/log4j/core/net/Facility.html[`Facility`] as described in RFC 5424.
+ The matching is case-insensitive.
+ It defaults to `LOCAL0`.
+
+ |newLine
+ |boolean
+ |If `true`, a `\n` character will be appended to the end of the Syslog record (defaults to `false`)
+
+ |newLineEscape
+ |String
+ |The string that should be used to replace newlines within the message text
+ |===
+
+ [#extending]
+ == Extending
+
+ Layouts are xref:manual/plugins.adoc[plugins] implementing link:../javadoc/log4j-core/org/apache/logging/log4j/core/Layout.html[the `Layout` interface].
+ This section will guide you on how to create custom ones.
+
+ [NOTE]
+ ====
+ While <> should address most common use cases, you might find yourself needing to implement a custom one.
+ If this is the case, we really appreciate it if you can *share your use case in a {logging-services-url}/support.html[user support channel]*.
+ ====
+
+ [#extending-plugins]
+ === Plugin preliminaries
+
+ include::partial$manual/plugin-preliminaries.adoc[]
+
+ [#extending-layouts]
+ === Extending layouts
+
+ Layouts are xref:manual/plugins.adoc[plugins] implementing link:../javadoc/log4j-core/org/apache/logging/log4j/core/Layout.html[the `Layout` interface].
+ If your layout is a `String`-based one, we recommend you to extend your plugin class from link:../javadoc/log4j-core/org/apache/logging/log4j/core/layout/AbstractStringLayout.html[`AbstractStringLayout`], which contains convenience for some of the boilerplate code shared by `String`-based layouts.
+ You can check out following files for examples:
+
+ * {project-github-url}/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/SyslogLayout.java[`SyslogLayout.java`] – simple, single-file, extending from `AbstractStringLayout`
+ * {project-github-url}/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayout.java[`JsonTemplateLayout.java`] – advanced, using plugins for composing several of its features, contains _recycler_ concept for xref:manual/garbagefree.adoc[garbage-free] operation, extends from link:../javadoc/log4j-core/org/apache/logging/log4j/core/StringLayout.html[`StringLayout`]
+////
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/release-notes.adoc b/src/site/antora/modules/ROOT/pages/release-notes.adoc
new file mode 100644
index 00000000..a2bfd86d
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/release-notes.adoc
@@ -0,0 +1,21 @@
+////
+ 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.
+////
+
+= Release notes
+
+This file is a stub.
+Its content will be auto-generated during build.