diff --git a/.editorconfig b/.editorconfig
index f9451f42f..e50b5f2f1 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 5541bf15e..513b8c11d 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 0906a46a3..a2d863547 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 000000000..45a03401e
--- /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 000000000..cb28b0e37
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 000000000..08ea486aa
--- /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 000000000..6b2a2c3b1
--- /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 000000000..af46563a2
--- /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 000000000..3cb089f47
--- /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 41fed7e61..ec1473049 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,14 +1,17 @@
{
"name": "log4net",
- "version": "2.0.12",
+ "version": "3.0.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "log4net",
- "version": "2.0.12",
+ "version": "3.0.5",
"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 6fef98ab0..487a08938 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 3477dbb62..9e0067d44 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.5
+ 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 9527f4be6..cae188f86 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 000000000..e63407d19
--- /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 000000000..c08d82f9b
--- /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 000000000..e30cd4e6e
--- /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 000000000..71f705ec9
--- /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 000000000..8b455e020
--- /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 000000000..94b14261a
--- /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 000000000..addfd973a
--- /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 000000000..36eea1305
--- /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 000000000..8a1454920
--- /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 000000000..9484d278a
--- /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 000000000..86fb605a6
--- /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 000000000..d69263fd1
--- /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 000000000..47a940ab3
--- /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 000000000..06fda1cec
--- /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 000000000..0f7cfbc33
--- /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 000000000..7fb696473
--- /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 000000000..322607a8b
--- /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 000000000..a5f693c30
--- /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 000000000..e22ecc98c
--- /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 000000000..f6502b064
--- /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 000000000..e4d6e5083
--- /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 000000000..a24dc5ac3
--- /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 000000000..e30cd4e6e
--- /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 000000000..c637ce9ea
--- /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 000000000..19671ba6a
--- /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 000000000..79b5675b8
--- /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 000000000..b0a35b604
--- /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 000000000..49054c797
--- /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 000000000..a708d2cb7
--- /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 000000000..b5a8a85f4
--- /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 000000000..deeac4631
--- /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 000000000..214129430
--- /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 000000000..7dba546fa
--- /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 000000000..a3b85d44d
--- /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 000000000..85eb1e0e8
--- /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 000000000..32a5f023d
--- /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 000000000..7c2e49b10
--- /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 000000000..550479a9f
--- /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 000000000..ec19569d2
--- /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 000000000..54f0b26e7
--- /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 000000000..d0faca231
--- /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 000000000..888b2648b
--- /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 000000000..5d8c01940
--- /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-rolloverrenamefiles-virtual.xml b/src/changelog/3.0.3/205-rolloverrenamefiles-virtual.xml
new file mode 100644
index 000000000..45ec4fc1e
--- /dev/null
+++ b/src/changelog/3.0.3/205-rolloverrenamefiles-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/changelog/3.0.4/.release-notes.adoc.ftl b/src/changelog/3.0.4/.release-notes.adoc.ftl
new file mode 100644
index 000000000..85eb1e0e8
--- /dev/null
+++ b/src/changelog/3.0.4/.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.4/.release.xml b/src/changelog/3.0.4/.release.xml
new file mode 100644
index 000000000..a911feae4
--- /dev/null
+++ b/src/changelog/3.0.4/.release.xml
@@ -0,0 +1,6 @@
+
+
diff --git a/src/changelog/3.0.4/106-enable-automatic-test-runs-on-commit.xml b/src/changelog/3.0.4/106-enable-automatic-test-runs-on-commit.xml
new file mode 100644
index 000000000..546ab088e
--- /dev/null
+++ b/src/changelog/3.0.4/106-enable-automatic-test-runs-on-commit.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ Enable automatic test runs on commit
+ (implemented by @gdziadkiewicz in https://github.com/apache/logging-log4net/pull/204[#204])
+
diff --git a/src/changelog/3.0.4/215-keep-old-working-ubuntu-image-version.xml b/src/changelog/3.0.4/215-keep-old-working-ubuntu-image-version.xml
new file mode 100644
index 000000000..9f10f3dab
--- /dev/null
+++ b/src/changelog/3.0.4/215-keep-old-working-ubuntu-image-version.xml
@@ -0,0 +1,8 @@
+
+
+
+ Keep old, working ubuntu image version (by @gdziadkiewicz)
+
diff --git a/src/changelog/3.0.4/216-breaking-change-to-FileAppender-in-3.0.2.xml b/src/changelog/3.0.4/216-breaking-change-to-FileAppender-in-3.0.2.xml
new file mode 100644
index 000000000..14301f76e
--- /dev/null
+++ b/src/changelog/3.0.4/216-breaking-change-to-FileAppender-in-3.0.2.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ fixed SetQWForFiles method name in FileAppender from https://github.com/apache/logging-log4net/pull/196[#196]
+ by @sketchturner in https://github.com/apache/logging-log4net/pull/217[#217]
+ (fixes https://github.com/apache/logging-log4net/issues/216[#216] reported by @sketchturner)
+
diff --git a/src/changelog/3.0.4/225-xmllayoutschemalog4j-changed-xml-start element-for-exceptions-since-v3.0.0.xml b/src/changelog/3.0.4/225-xmllayoutschemalog4j-changed-xml-start element-for-exceptions-since-v3.0.0.xml
new file mode 100644
index 000000000..6fb8e14cf
--- /dev/null
+++ b/src/changelog/3.0.4/225-xmllayoutschemalog4j-changed-xml-start element-for-exceptions-since-v3.0.0.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ XmlLayoutSchemaLog4J: Changed XML start element for exceptions since v3.0.0
+ (reported by @sita-martin, fixed in https://github.com/apache/logging-log4net/pull/226[#226] by @FreeAndNil)
+
diff --git a/src/changelog/3.0.4/227-provide-path-of-expected-.config-file-in-error-message.xml b/src/changelog/3.0.4/227-provide-path-of-expected-.config-file-in-error-message.xml
new file mode 100644
index 000000000..ce29aa90e
--- /dev/null
+++ b/src/changelog/3.0.4/227-provide-path-of-expected-.config-file-in-error-message.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ Provide path of expected .config file in error message
+ (requested by @FrankNuessle, implemented by @FreeAndNil in https://github.com/apache/logging-log4net/pull/228[#228])
+
diff --git a/src/log4net.Tests/Appender/Internal/SimpleTelnetClient.cs b/src/log4net.Tests/Appender/Internal/SimpleTelnetClient.cs
index 2678673a2..7d5b822b2 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/log4net/Appender/AdoNetAppender.cs b/src/log4net/Appender/AdoNetAppender.cs
index 436f1e12a..4453e39e2 100644
--- a/src/log4net/Appender/AdoNetAppender.cs
+++ b/src/log4net/Appender/AdoNetAppender.cs
@@ -66,51 +66,69 @@ namespace log4net.Appender;
///
/// An example of a SQL Server table that could be logged to:
///
-/// CREATE TABLE [dbo].[Log] (
-/// [ID] [int] IDENTITY (1, 1) NOT NULL ,
-/// [Date] [datetime] NOT NULL ,
-/// [Thread] [varchar] (255) NOT NULL ,
-/// [Level] [varchar] (20) NOT NULL ,
-/// [Logger] [varchar] (255) NOT NULL ,
-/// [Message] [varchar] (4000) NOT NULL
-/// ) ON [PRIMARY]
+/// create table dbo.Log
+/// (
+/// Id bigint identity (1, 1) not null,
+/// LogDate datetime not null,
+/// Thread nvarchar(255) not null,
+/// LogLevel nvarchar(50) not null,
+/// Logger nvarchar(255) not null,
+/// LogMessage nvarchar(2000) not null,
+/// Exception nvarchar(2000) null,
+/// constraint Log_PKEY primary key (Id)
+/// ) with (data_compression = page)
///
///
///
/// An example configuration to log to the above table:
///
-///
-///
-///
-///
+///
+///
+///
+///
+///
///
-///
-///
-///
+///
+///
+///
///
///
-///
-///
-///
-///
+///
+///
+///
+///
+///
+///
///
///
-///
-///
-///
-///
+///
+///
+///
+///
+///
+///
///
///
-///
-///
-///
-///
+///
+///
+///
+///
+///
+///
///
///
-///
-///
-///
-///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
///
///
///
diff --git a/src/site/antora/antora.tmpl.yml b/src/site/antora/antora.tmpl.yml
new file mode 100644
index 000000000..f57633a72
--- /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 000000000..8b8406812
--- /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 000000000..8f0507514
--- /dev/null
+++ b/src/site/antora/modules/ROOT/nav.adoc
@@ -0,0 +1,52 @@
+////
+ 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/introduction.adoc[]
+** xref:manual/appenders.adoc[]
+** xref:manual/configuration.adoc[]
+*** xref:manual/configuration/examples.adoc[]
+**** xref:manual/configuration/adonetappender.adoc[]
+**** xref:manual/configuration/bufferingforwardingappender.adoc[]
+**** xref:manual/configuration/coloredconsoleappender.adoc[]
+**** xref:manual/configuration/consoleappender.adoc[]
+**** xref:manual/configuration/eventlogappender.adoc[]
+**** xref:manual/configuration/fileappender.adoc[]
+**** xref:manual/configuration/rollingfileappender.adoc[]
+**** xref:manual/configuration/forwardingappender.adoc[]
+**** xref:manual/configuration/localsyslogappender.adoc[]
+**** xref:manual/configuration/managedcoloredconsoleappender.adoc[]
+**** xref:manual/configuration/memoryappender.adoc[]
+**** xref:manual/configuration/outputdebugstringappender.adoc[]
+**** xref:manual/configuration/remotesyslogappender.adoc[]
+**** xref:manual/configuration/smtpappender.adoc[]
+**** xref:manual/configuration/smtppickupdirappender.adoc[]
+**** xref:manual/configuration/traceappender.adoc[]
+**** xref:manual/configuration/udpappender.adoc[]
+** xref:manual/examples.adoc[]
+** xref:manual/faq.adoc[]
+** xref:manual/filters.adoc[]
+** xref:manual/layouts.adoc[]
+** xref:manual/installation.adoc[]
+** xref:manual/supported-frameworks.adoc[]
+* xref:features.adoc[]
+* xref:release-notes.adoc[]
+* xref:release-review.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 000000000..67aea4bd2
--- /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 000000000..9fa57ea77
--- /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 000000000..ebc3521f0
--- /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 000000000..1f6481746
--- /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 library to 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 000000000..3f53704d7
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/appenders.adoc
@@ -0,0 +1,167 @@
+////
+ 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].
+
+[#appenders-list]
+== List of appenders
+
+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.
+
+|BufferingForwardingAppender
+|Buffers events and then forwards them to attached appenders.
+
+|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.
+
+|===
+
+[#appender-additivity]
+== Appender Additivity
+
+A logger can have multiple appenders.
+
+Each enabled logging request is passed to all appenders attached to that logger, and also to appenders higher in the logger hierarchy.
+This behavior is called *appender additivity* and is enabled by default.
+
+For example, if a console appender is attached to the root logger, all enabled logs will at least print to the console.
+If a file appender is added to logger `X`, logs from `X` and its children will go to both the file and the console.
+
+Additivity can be disabled by setting a logger’s `additivity` flag to `false`.
+This prevents logging events from being passed to ancestor appenders beyond that point.
+
+[NOTE]
+====
+If the `Animals` logger has `additivity = false`, then the `Animals.Carnivora` logger will only send its log messages to its own appenders and to `Animals`’ appenders—
+but not to any appenders higher up in the hierarchy, such as those on the root logger.
+====
+
+[cols="Logger Name,Added Appender,Additivity Flag,Output Targets,Comment"]
+|===
+|Logger Name |Added Appenders |Additivity Flag |Output Targets |Comment
+
+|root
+|ConsoleAppender
+|not applicable
+|ConsoleAppender
+|Default appender at the root.
+
+|Animals
+|FileAppender, RollingFileAppender
+|true
+|ConsoleAppender, FileAppender, RollingFileAppender
+|Appenders of "Animals" and root.
+
+|Animals.Carnivora
+|none
+|true
+|ConsoleAppender, FileAppender, RollingFileAppender
+|Inherited from "Animals" and root.
+
+|Animals.Carnivora.Felidae
+|SmtpAppender
+|true
+|ConsoleAppender, FileAppender, RollingFileAppender, SmtpAppender
+|Appenders in "Animals.Carnivora.Felidae", "Animals", and root.
+
+|Security
+|UdpAppender
+|false
+|UdpAppender
+|No appender accumulation because additivity is set to false.
+
+|Security.Access
+|none
+|true
+|UdpAppender
+|Only appenders of "Security" are used due to disabled additivity in "Security".
+|===
\ 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 000000000..ccb1c9bc1
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration.adoc
@@ -0,0 +1,904 @@
+////
+ 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
+
+The recommended way to configure log4net is through a configuration file.
+This section explains the structure of a configuration file and how log4net processes 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 starts by importing the necessary log4net namespaces.
+It then declares a static logger for the type `MyApp`.
+
+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!");
+}
+----
+
+Calling `BasicConfigurator.Configure()` sets up a simple log4net configuration.
+This method automatically adds a `ConsoleAppender` to the root logger,
+formatting the output using a `PatternLayout` with the following pattern:
+
+[source,log]
+----
+%timestamp [%thread] %level %logger - %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.
+----
+
+In log4net, child loggers link only to existing ancestors.
+For example, the logger `Animals.Carnivora.Dog` is directly linked to the root logger,
+bypassing the unused `Animals` and `Animals.Carnivora` loggers.
+This improves performance and reduces log4net’s memory footprint.
+
+The `MyApp` class configures log4net by calling `BasicConfigurator.Configure()`.
+Other classes simply need to import the log4net namespace, retrieve the desired loggers, and start logging.
+
+The previous example always produces the same log output.
+However, `MyApp` can be modified to allow runtime control over log output.
+Here’s an improved 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.");
+ }
+}
+----
+
+In this version, `MyApp` uses `XmlConfigurator` to load a configuration file and set up logging accordingly.
+
+The following sample configuration file produces the same output as the previous `BasicConfigurator` example:
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+If we want to suppress logging for all components in the `Animals.Carnivora` namespace,
+we can achieve this with the following configuration file:
+
+[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.
+----
+
+Since the `Animals.Carnivora.Dog` logger does not have a specific level assigned,
+it inherits the `WARN` level from `Animals.Carnivora`, as set in the configuration file.
+
+The log statement in `Dog.Bark()` is at the `DEBUG` level, which is lower than `WARN`.
+As a result, the log request from `Bark()` is suppressed.
+
+Below 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.
+----
+
+Additionally, since the root logger has a second appender, the output is also written to `example.log`.
+This file rolls over once it reaches 100KB, moving the old log to `example.log.1`.
+
+Notably, achieving these different logging behaviors required no code recompilation.
+We could just as easily log to an email address or redirect all `Animals.Carnivora` output
+to a remote syslog server.
+
+For more examples of configuring appenders with `XmlConfigurator`, see
+xref:manual/configuration/examples.adoc[].
+
+[#configuration-attributes]
+== Configuration Attributes
+
+log4net can be configured using assembly-level attributes instead of setting it up programmatically.
+
+[#xml-configurator-attribute]
+=== XmlConfiguratorAttribute
+
+The `log4net.Config.XmlConfiguratorAttribute` allows log4net to be configured using the following properties:
+
+ConfigFile::
+
+Specifies the filename of the configuration file to use with the `XmlConfigurator`.
+The file path is relative to the application base directory (`AppDomain.CurrentDomain.BaseDirectory`).
+This property cannot be used with the `ConfigFileExtension` property.
+
+ConfigFileExtension::
+
+Specifies the extension for the configuration file.
+The assembly filename is used as the base name, with this extension appended.
+For example, if the assembly is `TestApp.exe` and the `ConfigFileExtension` is set to `log4net`, the configuration file will be `TestApp.dll.log4net`.
+This is equivalent to setting the `ConfigFile` property to `TestApp.dll.log4net`.
+The path to the configuration file is built using the application base directory (`AppDomain.CurrentDomain.BaseDirectory`), the assembly file name, and the configuration file extension.
+This property cannot be used with the `ConfigFile` property.
+
+Watch::
+
+If set to `true`, this flag will enable the framework to monitor the configuration file and automatically reload it when the file is modified.
+
+If neither the `ConfigFile` nor the `ConfigFileExtension` properties are specified, the application configuration file (e.g., `TestApp.dll.config`) will be used as the log4net configuration file.
+
+Example usage:
+[source,csharp]
+----
+// Configure log4net using the .config file
+[assembly: log4net.Config.XmlConfigurator(Watch = true)]
+// This will cause log4net to look for a configuration file
+// called TestApp.dll.config in the application base
+// directory (i.e. the directory containing TestApp.exe)
+// The config file will be watched for changes.
+----
+[source,csharp]
+----
+// Configure log4net using the .log4net file
+[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "log4net", Watch = true)]
+// This will cause log4net to look for a configuration file
+// called TestApp.dll.log4net in the application base
+// directory (i.e. the directory containing TestApp.exe)
+// The config file will be watched for changes.
+----
+
+This attribute may only be used once per assembly.
+
+Using attributes can be a clearer method for defining where the application's configuration will be loaded from.
+However, note that attributes are passive — they only provide information.
+Therefore, to trigger log4net to read and process the attributes, you must invoke log4net.
+A simple call to `LogManager.GetLogger` will cause the attributes on the calling assembly to be processed.
+
+*It is crucial to make a logging call as early as possible during the application startup, and certainly before any external assemblies are loaded and invoked.*
+
+[#appsettings]
+== AppSettings
+
+If you use xref:#configuration-attributes[attributes] to configure log4net, two settings in the appSettings section of your application's configuration file can override the values specified in your assembly's attributes.
+
+The setting with the key `log4net.Config` overrides the configuration file name (relative to your application's base directory), while the setting with the key `log4net.Config.Watch` determines whether the configuration file should be monitored for changes.
+
+For example, even though the assembly attribute:
+
+[source,csharp]
+----
+[assembly: log4net.Config.XmlConfigurator(Watch = false)]
+----
+
+configures your application to use the "TestApp.dll.config" file and not monitor it for changes, you can override this to use the "log4net.config" file and monitor it for changes by adding the following to your application's configuration file:
+
+[source,xml]
+----
+
+
+
+
+----
+
+to your application's configuration file.
+
+[#configuration-files]
+== Configuration Files
+
+Typically the log4net configuration is specified using a file.
+This file can be read in one of two ways:
+
+* Using the System.Configuration API
+* Reading the file contents directly
+
+[#config-files]
+=== .config Files
+
+The `System.Configuration` API can only be used if the configuration data is stored in the application's config file (e.g. `MyApp.dll.config`, `MyApp.exe.config`, or `Web.config`).
+
+The `System.Configuration` API does not support reloading the config file.
+This means that the configuration settings cannot be watched using the `log4net.Config.XmlConfigurator.ConfigureAndWatch` methods.
+
+To configure an application using the `System.Configuration` API, you must call one of the following methods:
+* `log4net.Config.XmlConfigurator.Configure()`
+* `log4net.Config.XmlConfigurator.Configure(ILoggerRepository)`
+
+To embed the configuration data in the `.config` file, you must define the `log4net` section in the `configSections` element.
+The section must specify the `log4net.Config.Log4NetConfigurationSectionHandler, log4net` type.
+
+
+The following is a simple example configuration file that specifies the correct section handler to use for the `log4net` section.
+
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+[#reading-files-directly]
+=== Reading Files Directly
+
+The `XmlConfigurator` can directly read any XML file and use it to configure log4net.
+This includes the application's `.config` file (e.g. `MyApp.dll.config`, `MyApp.exe.config`, or `Web.config`).
+
+You can specify the configuration file using `log4net.Config.XmlConfigurator` methods that accept a `System.IO.FileInfo` object.
+To auto-reconfigure on changes, use `ConfigureAndWatch`, which monitors the file for updates.
+
+Additionally, the `log4net.Config.XmlConfiguratorAttribute` can be used to specify the file to read the configuration from.
+
+The configuration is read from the `log4net` element in the file.
+Only one `log4net` element can be specified in the file, but it may be located anywhere in the `XML` hierarchy.
+
+For example, it may be the root element:
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+----
+
+Or it may be nested within other elements:
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+The example shows how to embed configuration data in a .config file while allowing log4net to read it directly.
+Since the .NET config parser throws errors for unregistered elements, the `log4net` section is registered using `System.Configuration.IgnoreSectionHandler`.
+This tells .NET to ignore the section, as it will be processed by log4net instead.
+
+[#configuration-syntax]
+== Configuration Syntax
+
+log4net provides an XML-based configuration reader, `log4net.Config.XmlConfigurator`.
+This section outlines the syntax accepted by the configurator.
+
+A valid XML configuration must have `` as the root element.
+However, this element can be embedded in another XML document.
+For details on embedding XML configurations in a file, see the section on <>.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+----
+
+The `` element supports the following attributes:
+
+[cols="Attribute,Required,Allowed values,Default,Description"]
+|===
+| Attribute | Required | Allowed values | Default | Description
+
+| debug
+| no
+| true or false
+| false
+| Set this attribute to true to enable internal log4net debugging for this configuration.
+
+| update
+| no
+| Merge or Overwrite
+| Merge
+| Set this attribute to `Overwrite` to reset the configuration of the repository being configured before applying this configuration.
+
+| threshold
+| no
+| Level (e.g. DEBUG, INFO, WARN, ERROR)
+| ALL
+| Set this attribute to limit the messages that are logged across the whole repository, regardless of the logger that the message is logged to.
+
+|===
+
+The `` element supports the following child elements:
+
+[cols="Element,Cardinality,Description"]
+|===
+| Element | Cardinality | Description
+
+| appender
+| 0..*
+| Defines an appender.
+
+| logger
+| 0..*
+| Defines the configuration of a logger.
+
+| renderer
+| 0..*
+| Defines an object renderer.
+
+| root
+| 0..1
+| Defines the configuration of the root logger.
+
+| param
+| 0..*
+| Repository-specific parameters.
+
+|===
+
+[#appenders]
+== Appenders
+
+Appenders must be defined as child elements of the `` element.
+Each appender requires a unique name and a specified implementing type.
+
+The following example defines an appender of type `log4net.Appender.ConsoleAppender`, named `ConsoleAppender`.
+
+[source,xml]
+----
+
+
+
+
+
+----
+
+The `` element supports the following attributes:
+
+[cols="Attribute,Required,Allowed values,Description"]
+|===
+| Attribute | Required | Allowed values | Description
+
+| name
+| yes
+| A unique string name
+| Used by the `` element of a Logger to reference an appender.
+
+| type
+| yes
+| A fully qualified type name
+| If the appender is not in the log4net assembly, the type name must be fully assembly qualified.
+
+|===
+
+The `` element supports the following child elements:
+
+[cols="Element,Cardinality,Description"]
+|===
+| Element | Cardinality | Description
+
+| appender-ref
+| 0..*
+| Allows the appender to reference other appenders. Not supported by all appenders.
+
+| filter
+| 0..*
+| Defines the filters used by this appender.
+
+| layout
+| 0..1
+| Defines the layout used by this appender.
+
+| param
+| 0..*
+| Appender-specific parameters.
+
+|===
+
+For examples of configuring appenders see xref:manual/configuration/examples.adoc[Example Appender Configuration].
+
+[#filters]
+== Filters
+
+Filter elements may only be defined as children of `` elements.
+
+The `` element supports the following attributes:
+
+[cols="Attribute,Required,Allowed values,Description"]
+|===
+|Attribute |Required |Allowed values |Description
+
+|type
+|yes
+|Value must be the type name for this filter.
+|If the filter is not defined in the log4net assembly, this type name must be fully assembly qualified.
+
+|===
+
+The `` element supports the following child elements:
+
+[cols="Element,Cardinality,Description"]
+|===
+|Element |Cardinality |Description
+
+|param
+|0..*
+|Filter-specific parameters.
+
+|===
+
+Filters form a chain that the event must pass through.
+Each filter can either:
+
+* Accept the event and stop processing.
+* Deny the event and stop processing.
+* Pass the event to the next filter.
+
+If no filter denies the event, it is implicitly accepted and logged.
+
+[source,xml]
+----
+
+
+
+
+----
+
+This filter denies events with a level lower than INFO or higher than FATAL.
+Only events between INFO and FATAL are logged.
+
+To allow only messages containing a specific substring (e.g., 'database'), the following filters must be specified:
+
+[source,xml]
+----
+
+
+
+
+----
+
+The first filter checks if the message text contains the substring 'database'.
+* If found, the filter accepts the message, stops processing, and logs the event.
+* If not found, the event moves to the next filter.
+
+If there is no next filter, the event would be implicitly accepted and logged.
+To prevent logging non-matching events, a `log4net.Filter.DenyAllFilter` must be used at the end of the filter chain.
+This filter ensures that all unmatched events are denied.
+
+To allow events containing either 'database' or 'ldap', use the following filters:
+
+[source,xml]
+----
+
+
+
+
+
+
+
+----
+
+[#layouts]
+== Layouts
+
+Layout elements may only be defined as children of `` elements.
+
+The `` element supports the following attributes:
+
+[cols="Attribute,Required,Allowed values,Description"]
+|===
+|Attribute |Required |Allowed values |Description
+
+|type
+|yes
+|Value must be the type name for this layout.
+|If the layout is not defined in the log4net assembly, this type name must be fully assembly qualified.
+
+|===
+
+The `` element supports the following child elements:
+
+[cols="Element,Cardinality,Description"]
+|===
+|Element |Cardinality |Description
+
+|param
+|0..*
+|Layout-specific parameters.
+
+|===
+
+This example shows how to configure a layout using `log4net.Layout.PatternLayout`.
+
+[source,xml]
+----
+
+
+
+----
+
+[#root-logger]
+== Root Logger
+
+Only one `root` logger element may be defined, and it must be a child of the `log4net` element.
+The root logger is the root of the logger hierarchy.
+All loggers ultimately inherit from this logger.
+
+An example root logger:
+
+[source,xml]
+----
+
+
+
+
+----
+
+The element supports no attributes.
+
+The element supports the following child elements:
+
+[cols="Element,Cardinality,Description"]
+|===
+|Element |Cardinality |Description
+
+|appender-ref
+|0..*
+|Allows the logger to reference appenders by name.
+
+|level
+|0..1
+|Defines the logging level for this logger. This logger will only accept event that are at this level or above.
+
+|param
+|0..*
+|Logger specific parameters
+
+|===
+
+[#loggers]
+== Loggers
+
+Logger elements may only be defined as children of the element.
+
+An example logger:
+
+[source,xml]
+----
+
+
+
+
+----
+
+The element supports the following attributes.
+
+[cols="Attribute,Required,Allowed values,Default,Description"]
+|===
+|Attribute |Required |Allowed values |Default |Description
+
+|name
+|yes
+|any logger name
+|
+|Value must be the name of the logger.
+
+|additivity
+|no
+|true or false
+|true
+|Set this attribute to false to prevent this logger from inheriting the appenders defined on parent loggers.
+
+|===
+
+The element supports the following child elements:
+
+[cols="Element,Cardinality,Description"]
+|===
+|Element |Cardinality |Description
+
+|appender-ref
+|0..*
+|Allows the logger to reference appenders by name.
+
+|level
+|0..1
+|Defines the logging level for this logger. This logger will only accept events that are at this level or above.
+
+|param
+|0..*
+|Logger specific parameters
+
+|===
+
+[#renderers]
+== Renderers
+
+Renderer elements may only be defined as children of the element.
+
+An example renderer:
+
+[source,xml]
+----
+
+----
+
+The element supports the following attributes.
+
+[cols="Attribute,Required,Allowed values,Description"]
+|===
+|Attribute |Required |Allowed values |Description
+
+|renderingClass
+|yes
+|Value must be the type name for this renderer.
+If the type is not defined in the log4net assembly this type name must be fully assembly qualified.
+|This is the type of the object that will take responsibility for rendering the renderedClass.
+
+|renderedClass
+|yes
+|Value must be the type name for the target type for this renderer.
+If the type is not defined in the log4net assembly this type name must be fully assembly qualified.
+|This is the name of the type that this renderer will render.
+
+|===
+
+The element supports no child elements.
+
+[#parameters]
+== Parameters
+
+Parameter elements may be children of many elements. See the specific elements above for details.
+
+An example param:
+
+[source,xml]
+----
+
+----
+
+The element supports the following attributes.
+
+[cols="Attribute,Required,Allowed values,Description"]
+|===
+|Attribute |Required |Allowed values |Description
+
+|name
+|yes
+|Value must be the name of the parameter to set on the parent object.
+|
+
+|value
+|no +
+(One of value or type attributes must be specified.)
+|The value of this attribute is a string that can be converted to the value of the parameter.
+|
+
+|type
+|no +
+(One of value or type attributes must be specified.)
+|The value of this attribute is a type name to create and set as the value of the parameter.
+|If the type is not defined in the log4net assembly this type name must be fully assembly qualified.
+
+|===
+
+The element supports the following child elements:
+
+[cols="Element,Cardinality,Description"]
+|===
+|Element |Cardinality |Description
+
+|param
+|0..*
+|Parameter specific parameters
+|===
+
+An example param that uses nested param elements:
+
+[source,xml]
+----
+
+
+
+----
+
+[#extension-parameters]
+== Extension Parameters
+
+Configuration parameters map directly to writable properties on an object.
+The properties available depend on the actual type of the object being configured.
+
+For 3rd party components please see their relevant API reference for details of the properties available.
+
+[#compact-parameter-syntax]
+== Compact Parameter Syntax
+
+All parameters may alternately be specified using the parameter name as the element name rather than using the param element and name attribute.
+
+For example a param:
+
+[source,xml]
+----
+
+
+
+----
+
+may be written as:
+
+[source,xml]
+----
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/adonetappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/adonetappender.adoc
new file mode 100644
index 000000000..472b3c696
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/adonetappender.adoc
@@ -0,0 +1,289 @@
+////
+ 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.
+////
+
+[#adonetappender]
+= AdoNetAppender
+
+The `AdoNetAppender` is used to log events directly to a database table.
+It writes log events in batches (with a default size of 100, controlled by the `BufferSize` setting).
+
+The configuration of `AdoNetAppender` depends on the database provider you're using.
+Here are the key configuration elements:
+
+* `ConnectionType`: Specifies the fully qualified type name for the `System.Data.IDbConnection` used to connect to the database.
+* `ConnectionString`: The connection string that is specific to the database provider (e.g., SQL Server, MySQL).
+* `CommandText`: Defines the SQL command to execute. This can either be a prepared statement or a stored procedure. In the examples below, a prepared statement is used.
+
+Each parameter in the prepared statement or stored procedure is defined with:
+
+* `Name`: The name of the parameter.
+* `DbType`: The database type for the parameter.
+* `Layout`: The layout used to render the value for the parameter.
+
+The following examples illustrate how to configure the `AdoNetAppender` for different databases.
+
+[#mssqlserver]
+== MS SQL Server
+
+The database table definition is:
+
+[source,sql]
+----
+create table dbo.Log
+(
+ Id bigint identity (1, 1) not null,
+ LogDate datetime not null,
+ Thread nvarchar(255) not null,
+ LogLevel nvarchar(50) not null,
+ Logger nvarchar(255) not null,
+ LogMessage nvarchar(2000) not null,
+ Exception nvarchar(2000) null,
+ constraint Log_PKEY primary key (Id)
+) with (data_compression = page)
+----
+
+Please add a package reference for the SqlClient to your .csproj file
+[source,xml]
+----
+
+----
+
+The appender configuration is:
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+[#oracle]
+== Oracle
+
+Please add a package reference for the SqlClient to your .csproj file
+[source,xml]
+----
+
+----
+
+The database table definition is:
+
+[source,sql]
+----
+create table Log
+(
+ Id number(10) generated by default as identity,
+ LogDate date not null,
+ Thread varchar2(255) not null,
+ LogLevel varchar2(50) not null,
+ Logger varchar2(255) not null,
+ LogMessage varchar2(2000) not null,
+ Exception varchar2(2000) null,
+ constraint Log_PKEY primary key (Id)
+)
+----
+
+The appender configuration is:
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+[#postgresql]
+== PostgreSQL
+
+The database table definition is:
+
+[source,sql]
+----
+create table Log
+(
+ Id bigint generated by default as identity,
+ LogDate date not null,
+ Thread varchar(255) not null,
+ LogLevel varchar(50) not null,
+ Logger varchar(255) not null,
+ LogMessage varchar(2000) not null,
+ Exception varchar(2000) null,
+ constraint Log_PKEY primary key (Id)
+)
+----
+
+Please add a package reference for the SqlClient to your .csproj file
+[source,xml]
+----
+
+----
+
+The appender configuration is:
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+[#other-databases]
+== Other databases
+
+To adapt the provided examples for use with other databases, follow these steps:
+
+* Find a NuGet package that provides the necessary ADO.NET provider for your database.
+* Modify the `CREATE TABLE` script to match the data types used by your database.
+* Update the `ConnectionType` property in the `AdoNetAppender` configuration to reference the connection type from the selected NuGet package.
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/bufferingforwardingappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/bufferingforwardingappender.adoc
new file mode 100644
index 000000000..6775c917f
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/bufferingforwardingappender.adoc
@@ -0,0 +1,59 @@
+////
+ 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.
+////
+
+[#bufferingforwardingappender]
+= BufferingForwardingAppender
+
+The `BufferingForwardingAppender` buffers log events in memory before forwarding them to another appender.
+This helps improve performance by reducing the number of writes to the destination appender, especially in high-volume logging scenarios.
+Once the buffer reaches a specified size or time threshold, the events are forwarded to the target appender in a batch.
+
+The following example shows how to configure the `BufferingForwardingAppender` to buffer 100 messages before delivering them to the `ConsoleAppender`.
+
+[source,xml]
+----
+
+
+
+
+
+
+----
+
+This example shows how to deliver only significant events.
+
+A LevelEvaluator is specified with a threshold of WARN.
+This means that the events will only be delivered when a message with level of WARN or higher level is logged.
+
+Up to 512 `bufferSize` previous messages of any level will also be delivered to provide context information.
+Messages not sent will be discarded.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/coloredconsoleappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/coloredconsoleappender.adoc
new file mode 100644
index 000000000..0185185cb
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/coloredconsoleappender.adoc
@@ -0,0 +1,57 @@
+////
+ 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.
+////
+
+[#coloredconsoleappender]
+= ColoredConsoleAppender
+
+The `ColoredConsoleAppender` writes log messages to the console with color coding based on log levels.
+It allows configurable colors for each log level, making it easier to identify log severity.
+
+The following example shows how to configure the ColoredConsoleAppender to log messages to the console.
+This example shows how to highlight error messages.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+----
+
+This example shows how to colorize multiple levels.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/consoleappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/consoleappender.adoc
new file mode 100644
index 000000000..eab648f97
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/consoleappender.adoc
@@ -0,0 +1,46 @@
+////
+ 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.
+////
+
+[#consoleappender]
+= ConsoleAppender
+
+The `ConsoleAppender` writes log messages to the console.
+It outputs messages without color coding, making it simple and suitable for basic logging needs.
+
+The following example shows how to configure the `ConsoleAppender` to log messages to the console.
+By default the messages are sent to the console standard output stream.
+
+[source,xml]
+----
+
+
+
+
+
+----
+
+This example shows how to direct the log messages to the console error stream.
+
+[source,xml]
+----
+
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/eventlogappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/eventlogappender.adoc
new file mode 100644
index 000000000..e90cb3395
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/eventlogappender.adoc
@@ -0,0 +1,45 @@
+////
+ 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.
+////
+
+[#eventlogappender]
+= EventLogAppender
+
+The EventLogAppender in log4net logs messages to the Windows Event Log.
+It is limited to .Net 4.x because it is Windows specific and .netstandard lacks support for writing to the Event Log.
+
+The following example shows how to configure the `EventLogAppender` to log to the Application event log on the local machine using the event Source of the AppDomain.FriendlyName.
+
+[source,xml]
+----
+
+
+
+
+
+----
+
+This example shows how to configure the `EventLogAppender` to use a specific event Source.
+
+[source,xml]
+----
+
+
+
+
+
+
+----
\ 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 000000000..a11a9bd5e
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/examples.adoc
@@ -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.
+////
+
+[#examples]
+= Examples
+
+This document presents example configurations for the built-in appenders. These configurations are designed to work with the log4net.Config.XmlConfigurator.
+
+These examples are by no means exhaustive configurations for the appenders.
+
+* xref:manual/configuration/adonetappender.adoc[]
+* xref:manual/configuration/bufferingforwardingappender.adoc[]
+* xref:manual/configuration/coloredconsoleappender.adoc[]
+* xref:manual/configuration/consoleappender.adoc[]
+* xref:manual/configuration/eventlogappender.adoc[]
+* xref:manual/configuration/fileappender.adoc[]
+* xref:manual/configuration/rollingfileappender.adoc[]
+* xref:manual/configuration/forwardingappender.adoc[]
+* xref:manual/configuration/localsyslogappender.adoc[]
+* xref:manual/configuration/managedcoloredconsoleappender.adoc[]
+* xref:manual/configuration/memoryappender.adoc[]
+* xref:manual/configuration/outputdebugstringappender.adoc[]
+* xref:manual/configuration/remotesyslogappender.adoc[]
+* xref:manual/configuration/smtpappender.adoc[]
+* xref:manual/configuration/smtppickupdirappender.adoc[]
+* xref:manual/configuration/traceappender.adoc[]
+* xref:manual/configuration/udpappender.adoc[]
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/fileappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/fileappender.adoc
new file mode 100644
index 000000000..e05d8d3ef
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/fileappender.adoc
@@ -0,0 +1,66 @@
+////
+ 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.
+////
+
+[#fileappender]
+= FileAppender
+
+The `FileAppender` writes log messages to a specified file.
+It can append to existing files or overwrite them, depending on the configuration.
+
+The following example shows how to configure the `FileAppender` to write messages to a file.
+The file specified is MyApp.log.
+The file will be appended to rather than overwritten each time the logging process starts.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+----
+
+This example shows how to configure the file name to write to using an environment variable TEMP.
+The encoding to use to write to the file is also specified.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+----
+
+This example shows how to configure the appender to use the minimal locking model that allows multiple processes to write to the same file.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/forwardingappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/forwardingappender.adoc
new file mode 100644
index 000000000..2239c0654
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/forwardingappender.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.
+////
+
+[#forwardingappender]
+= ForwardingAppender
+
+The `ForwardingAppender` forwards log messages to another appender.
+This appender is used only in special circumstances.
+
+The following example shows how to configure the `ForwardingAppender`.
+The forwarding appender allows a set of constraints to be used to decorate an appender.
+
+In this example the `ConsoleAppender` is decorated with a Threshold of level WARN. This means that an event directed to the `ConsoleAppender` directly will be logged regardless of its level, but an event directed to the `ForwardingAppender` will only be passed on to the `ConsoleAppender` if its level is WARN or higher.
+
+[source,xml]
+----
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/localsyslogappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/localsyslogappender.adoc
new file mode 100644
index 000000000..07459e967
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/localsyslogappender.adoc
@@ -0,0 +1,52 @@
+////
+ 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.
+////
+
+[#localsyslogappender]
+= LocalSyslogAppender
+
+`LocalSyslogAppender` writes messages to the local syslog service on Unix-like operating systems.
+It uses the system's native syslog daemon and does not support remote logging.
+
+The following example shows how to configure the `LocalSyslogAppender`.
+It sends all events with Level WARN or higher.
+
+[source,xml]
+----
+
+
+
+
+
+
+----
+
+You can also specify:
+
+* Facility (default: user)
+* Identity (default: application name)
+
+[source,xml]
+----
+
+ Alert
+
+
+
+ MyApp-Canary
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/managedcoloredconsoleappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/managedcoloredconsoleappender.adoc
new file mode 100644
index 000000000..cac5324f2
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/managedcoloredconsoleappender.adoc
@@ -0,0 +1,68 @@
+////
+ 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.
+////
+
+[#managedcoloredconsoleappender]
+= ManagedColoredConsoleAppender
+
+The `ManagedColoredConsoleAppender` writes log messages to the console with colored output.
+It provides more control over the colors used for different log levels.
+
+The following example shows how to configure the `ManagedColoredConsoleAppender` to log messages to the console.
+By default the messages are sent to the console standard output stream.
+
+This example shows how to highlight error messages.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+----
+
+This example shows how to colorize multiple levels.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/memoryappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/memoryappender.adoc
new file mode 100644
index 000000000..007079d09
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/memoryappender.adoc
@@ -0,0 +1,31 @@
+////
+ 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.
+////
+
+[#memoryappender]
+= MemoryAppender
+
+The `MemoryAppender` stores log events in memory rather than writing them to a file or console.
+It is useful for in-memory logging and can be configured to store events until the application is stopped or the memory is cleared.
+
+It is unlikely that the `MemoryAppender` will be configured using a config file, but if you want to do it here's how.
+
+[source,xml]
+----
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/outputdebugstringappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/outputdebugstringappender.adoc
new file mode 100644
index 000000000..ba15f2260
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/outputdebugstringappender.adoc
@@ -0,0 +1,33 @@
+////
+ 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.
+////
+
+[#outputdebugstringappender]
+= OutputDebugStringAppender
+
+The `OutputDebugStringAppender` writes log events to the Windows debugger via the `OutputDebugString` function.
+This is useful for debugging and monitoring an application without writing to files or consoles.
+
+The following example shows how to configure the `OutputDebugStringAppender` to write logging messages to the `OutputDebugString` API.
+
+[source,xml]
+----
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/remotesyslogappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/remotesyslogappender.adoc
new file mode 100644
index 000000000..ab61e51b9
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/remotesyslogappender.adoc
@@ -0,0 +1,88 @@
+////
+ 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.
+////
+
+[#remotesyslogappender]
+= RemoteSyslogAppender
+
+The `RemoteSyslogAppender` sends log messages to a remote syslog daemon using the BSD syslog protocol over UDP (default port 514).
+It supports configurable syslog facilities and severity levels, but due to the nature of UDP, messages may be lost or truncated.
+
+This appender does not include timestamp or hostname fields, as the receiving syslog daemon adds them automatically.
+It also splits log messages at line breaks, sending each line as a separate syslog message.
+
+The following example sends all events with Level WARN or higher to the remote server 192.168.1.100 on the default port with UTF8-Encoding.
+
+[source,xml]
+----
+
+ UTF-8
+
+
+
+
+
+
+----
+
+You can also specify:
+
+* Facility (default: user)
+* Identity (default: application name)
+
+[source,xml]
+----
+
+ UTF-8
+ Alert
+
+
+
+ MyApp-Canary
+
+
+
+----
+
+If your log message contains multiple lines, it will be logged as multiple separate syslog entries instead of a single multiline message.
+
+This might lead to confusion when analyzing logs because related lines could appear interleaved with logs from other sources.
+
+Example:
+
+[source,csharp]
+----
+try
+{
+ throw new InvalidTimeZoneException();
+}
+catch (InvalidTimeZoneException e)
+{
+ logger.Error(e, "setting daylight saving time failed")
+}
+----
+
+Output (with intermixed messages):
+
+[source,log]
+----
+12/21/2024 14:07:41.508 [main] ERROR log4net.Tests - setting daylight saving time failed
+Exception of type 'System.InvalidTimeZoneException' was thrown.
+12/21/2024 14:07:41.511 [worker] WARN log4net.Tests - some unrelated log message
+ at log4net.Tests.Appender.RemoteSyslogAppenderTest.LineBreakTest()
+ at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
+ at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/rollingfileappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/rollingfileappender.adoc
new file mode 100644
index 000000000..fd169688b
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/rollingfileappender.adoc
@@ -0,0 +1,111 @@
+////
+ 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.
+////
+
+[#rollingfileappender]
+= RollingFileAppender
+
+The `RollingFileAppender` extends the functionality of the `FileAppender` by adding the ability to automatically roll over log files based on specified criteria, such as file size or time intervals.
+
+This appender is useful for managing log files in production environments where log data grows over time and older logs should be preserved while maintaining a manageable file size.
+
+The following example shows how to configure the `RollingFileAppender` to write to the file `MyApp.log`.
+
+The file written to will always be named `MyApp.log` because the `StaticLogFileName` parameter is specified.
+
+The file will be rolled based on a size constraint (`RollingStyle`), and old log files will be archived when the size limit is reached.
+Up to 10 (`MaxSizeRollBackups`) old files of 100 KB each (`MaximumFileSize`) will be kept.
+
+These rolled files will be named: `MyApp.log.1`, `MyApp.log.2`, `MyApp.log.3`, etc.
+
+This allows you to keep a set number of backup log files, which can be helpful for both auditing and troubleshooting, while ensuring that log file growth doesn't fill up disk space.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+----
+
+This example show how to configure the `RollingFileAppender` to roll log files on a date period.
+
+This example will roll the log file every minute.
+To change the rolling period adjust the `DatePattern` value.
+For example, a date pattern of "yyyyMMdd" will roll every day.
+
+See `System.Globalization.DateTimeFormatInfo` for a list of available patterns.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+----
+
+This example show how to configure the `RollingFileAppender` to roll log files on a date period and within a date period on file size.
+
+For each day only the last 10 files of 1MB will be kept.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+----
+
+This example show how to configure the `RollingFileAppender` to roll log files once per program execution.
+
+The `appendToFile` property is set to false to prevent the appender from overwriting the existing files.
+
+The `maxSizeRollBackups` is set to negative 1 to allow an infinite number of backup files.
+
+The file size does have to be limited but here it is set to 50 Gigabytes which, if a log file exceeds this size limit during a single run then it will also be rolled.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/smtpappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/smtpappender.adoc
new file mode 100644
index 000000000..aa1a35e9d
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/smtpappender.adoc
@@ -0,0 +1,87 @@
+////
+ 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.
+////
+
+[#smtpappender]
+= SmtpAppender
+
+The `SmtpAppender` sends log events via email using the Simple Mail Transfer Protocol (SMTP).
+This appender is useful for sending email notifications when certain events occur, such as errors or critical failures in your application.
+
+The following example shows how to configure the `SmtpAppender` to deliver log events via SMTP email.
+The `To`, `From`, `Subject` and `SmtpHost` are required parameters.
+This example shows how to deliver only significant events.
+
+A LevelEvaluator is specified with a threshold of WARN.
+This means that an email will be sent for each WARN or higher level message that is logged.
+Each email will also contain up to 512 (BufferSize) previous messages of any level to provide context.
+
+Messages not sent will be discarded.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
+
+This example shows how to configure the `SmtpAppender` to deliver all messages in emails with 512 `bufferSize` messages per email.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+----
+
+This example shows a more verbose formatting layout for the mail messages.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/smtppickupdirappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/smtppickupdirappender.adoc
new file mode 100644
index 000000000..bd4929ec2
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/smtppickupdirappender.adoc
@@ -0,0 +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.
+////
+
+[#smtppickupdirappender.adoc]
+= SmtpPickupDirAppender
+
+The `SmtpPickupDirAppender` is configured similarly to the xref:./smtpappender.adoc[].
+The only difference is that rather than specify a SmtpHost parameter a `PickupDir` must be specified.
+
+The `PickupDir` parameter is a path that must exist and the code executing the appender must have permission to create new files and write to them in this directory.
+The path is relative to the application's base directory (AppDomain.BaseDirectory).
+
+The following example shows how to configure the SmtpPickupDirAppender to deliver log events via SMTP email.
+The `To`, `From`, `Subject` and `PickupDir` are required parameters.
+This example shows how to deliver only significant events.
+
+A LevelEvaluator is specified with a threshold of WARN.
+This means that an email will be sent for each WARN or higher level message that is logged.
+
+Each email will also contain up to 512 (BufferSize) previous messages of any level to provide context.
+
+Messages not sent will be discarded.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/traceappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/traceappender.adoc
new file mode 100644
index 000000000..5119d55f5
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/traceappender.adoc
@@ -0,0 +1,33 @@
+////
+ 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.
+////
+
+[#traceappender]
+= TraceAppender
+
+The `TraceAppender` writes log events to the Trace output, which can be viewed in debuggers or other trace listeners.
+It is useful for capturing logs in applications that are being debugged or for monitoring trace-level information during runtime.
+
+The following example shows how to configure the `TraceAppender` to log messages to the https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.trace[System.Diagnostics.Trace] system.
+
+[source,xml]
+----
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/configuration/udpappender.adoc b/src/site/antora/modules/ROOT/pages/manual/configuration/udpappender.adoc
new file mode 100644
index 000000000..0cac823d2
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/configuration/udpappender.adoc
@@ -0,0 +1,36 @@
+////
+ 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.
+////
+
+[#udpappender]
+= UdpAppender
+
+The `UdpAppender` sends log events over the network using the UDP protocol.
+It is typically used to forward log messages to remote logging systems over a network.
+
+The following example shows how to configure the `UdpAppender` to send events to a `remoteAddress` on the specified `remotePort`.
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/examples.adoc b/src/site/antora/modules/ROOT/pages/manual/examples.adoc
new file mode 100644
index 000000000..62e2e3207
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/examples.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.
+////
+
+[#examples]
+= Examples
+
+The examples can be found at https://github.com/apache/logging-log4net/tree/master/examples[examples]
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/faq.adoc b/src/site/antora/modules/ROOT/pages/manual/faq.adoc
new file mode 100644
index 000000000..37dcc01ae
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/faq.adoc
@@ -0,0 +1,358 @@
+////
+ 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.
+////
+[#faq]
+= F.A.Q.
+
+[#setup-and-usage]
+== Setup & Usage
+
+[#what-is-log4net]
+=== What is log4net?
+
+log4net is a logging library that supports multiple output targets.
+
+It helps diagnose issues by enabling logging without modifying the application binary.
+Designed for minimal performance impact, log4net allows log statements to remain in production code.
+
+A key feature is hierarchical loggers, which enable fine-grained control over log output to prevent excessive logging.
+log4net is built for both speed and flexibility.
+
+[#prerequisites]
+=== What are the prerequisites for log4net?
+
+log4net runs on net462 or higher and any framework supporting netstandard2.0.
+
+[#examples]
+=== Are there examples for using log4net?
+
+The examples can be found at https://github.com/apache/logging-log4net/tree/master/examples[examples]
+
+[#features]
+=== What are the features of log4net?
+
+See the xref:../features.adoc[] document.
+
+[#thread-safety]
+=== Is log4net thread-safe?
+
+Yes, log4net is thread-safe.
+
+[#output]
+=== What does log output look like?
+
+The log output can be customized in many ways.
+One can completely override the output format by implementing a custom Layout
+
+Here is an example output using PatternLayout with the conversion pattern
+
+"%date [%thread] %-5level %logger - %message%newline"
+
+[source,text]
+----
+2024-12-21 14:07:41,517 [main] DEBUG Animals.Carnivora.Dog - Woof!
+2024-12-21 14:07:41,517 [main] WARN Animals.Carnivora.Dog - Meow!
+----
+
+The first field is the date and time of the log event.
+The second field is the thread outputting the log statement.
+The third field is the level of the log statement.
+The fourth field is the name of the logger making the log request.
+The text after the '-' is the message of the statement.
+
+[#loggers]
+=== What are Loggers?
+
+Loggers are central to log4net's configuration.
+
+They are organized in a hierarchy and allow runtime control over which log statements are printed.
+
+Loggers inherit their levels from log4net's configuration.
+Whether a log statement reaches an appender depends on its level and associated logger.
+
+[#contributing]
+=== What should I keep in mind when contributing code?
+
+See https://github.com/apache/logging-log4net/blob/master/doc/CONTRIBUTING.md[contributing]
+
+[#distribution]
+=== Where can I find the latest distribution of log4net?
+
+See the xref:./installation.adoc[] or xref:../download.adoc[].
+
+[#disable-looging]
+=== How do I completely disable all logging at runtime?
+
+Setting the Threshold on the Hierarchy to Level OFF will disable all logging from that Hierarchy.
+This can be done in the log4net configuration file by setting the "threshold" attribute on the log4net configuration element to "OFF".
+
+For example:
+
+[source,xml]
+----
+
+----
+
+[#options-for-appenders]
+=== What are the configurable options for an appender?
+
+log4net uses public properties to configure components such as Appenders, Layouts, Loggers etc.
+
+Thus, any writable public property in on the appender corresponds to a configurable option.
+For example, in RollingFileAppender the
+
+[source,csharp]
+----
+public int MaxSizeRollBackups { set; }
+----
+
+property corresponds to the MaxSizeRollBackups option.
+
+Layouts options are also defined by their writable properties.
+Same goes for most other log4net components.
+
+[#direct-output-per-level]
+=== Is it possible to direct log output to different appenders by level?
+
+Yes, it is.
+
+Each appender has a Threshold option that filters out log events below a specified level.
+
+For example, setting an appender's threshold to DEBUG allows all higher levels (INFO, WARN, ERROR, FATAL) to pass through. This is useful since DEBUG messages are rarely helpful without surrounding context.
+
+On the other hand, setting the threshold to ERROR will exclude DEBUG, INFO, and WARN messages while keeping ERROR and FATAL.
+
+If you need to log only a specific level, use a LevelMatchFilter to ensure only events of that exact level are recorded.
+
+[#automatic-config-reload]
+=== Is there a way to get log4net to automatically reload a configuration file if it changes?
+
+Yes.
+The XmlConfigurator supports automatic reloading using the ConfigureAndWatch APIs.
+Refer to the API documentation for details.
+
+[#custom-assemblies]
+=== Can I load an appender from another assembly?
+
+Yes.
+When specifying the type in the configuration file you can give the assembly qualified name of the type.
+For example:
+
+[source,xml]
+----
+
+----
+
+The runtime will try to locate the assembly called MyAssembly.
+
+[#newline-in-header]
+=== How do I insert newlines into the layout header?
+
+To insert newlines in a layout header, use an XML numeric character reference.
+
+A carriage return and line feed (CR LF) are represented as \
\
.
+
+For example, to add a header and footer with newlines in the output, use this sequence in the configuration.
+
+[source,xml]
+----
+
+
+
+
+
+----
+
+[#dynamic-patterns]
+=== How do I use a pattern to set the value of a string property?
+
+Log4net allows using pattern syntax to set string properties, similar to PatternLayout for formatting output.
+
+To enable this, set type="log4net.Util.PatternString" on the string property in the config file. This directs the parser to process the value using PatternString before converting it to a string.
+
+For example, to include the current process ID in a FileAppender filename, use the %processid pattern in the File property.
+
+[source,xml]
+----
+
+
+
+
+----
+
+[#implementation]
+== Implementing Logging
+
+[#naming-loggers]
+=== What is the suggested ways to name loggers?
+
+A common approach is to name loggers by locality, using the fully qualified class name. This has several benefits:
+
+* Simple to implement and explain to new developers.
+* Reflects the application's modular design.
+* Can be refined as needed.
+* Automatically provides context for log statements.
+
+[#getting-the-type]
+=== How do I get the type of a class in a static block?
+
+To retrieve the type use:
+
+[source,csharp]
+----
+private static readonly ILog log = LogManager.GetLogger(typeof(Foo));
+----
+
+Here, typeof(Foo) provides the type, and LogManager.GetLogger accepts a Type instance, which is commonly used.
+
+[#performance]
+=== What is the fastest way to (not) log?
+
+Concatenating strings in log statements, such as:
+
+[source,csharp]
+----
+log.Debug("Entry number: " + i + " is " + entry[i]);
+// or string interpolation
+log.Debug($"Entry number: {i} is {entry[i]}");
+----
+
+incurs the cost of constructing the message, including converting values to strings and concatenating them—regardless of whether the message is logged.
+
+A more efficient alternative is to use log.DebugFormat etc., which formats the message only if the log level is enabled:
+
+[source,csharp]
+----
+log.DebugFormat("Entry number: {0} is {1}", i, entry[i]);
+----
+
+Alternatively, check if logging is enabled before constructing the message:
+
+[source,csharp]
+----
+if (log.IsDebugEnabled)
+{
+ log.Debug($"Entry number: {i} is {entry[i]}");
+}
+----
+
+[#locking-models]
+=== How do I get multiple process to log to the same file?
+
+Before proceeding, consider if it's absolutely necessary to have multiple processes log to the same file — it's often better to avoid this.
+
+FileAppender offers different locking models, but they have limitations:
+
+* **Default** - Holds an exclusive write lock, preventing other processes from writing.
+* **MinimalLock** - Acquires the write lock only while logging, allowing interleaved writes but with significant performance loss.
+* **InterProcessLock** - Uses a system-wide Mutex to synchronize, but requires all processes to cooperate.
+While better than MinimalLock, it still causes performance issues due to frequent Mutex acquisition.
+* **NoLock** - Does not use any lock, allowing all processes to write simultaneously.
+However, this can lead to log data corruption if multiple processes write to the file at the same time.
+
+Using RollingFileAppender complicates things further, as multiple processes may try to roll the log file simultaneously, which is incompatible with any locking model.
+
+[#troubleshooting]
+== Troubleshooting
+
+[#internal-debugging]
+=== How do I enable log4net internal debugging?
+
+There are two ways to enable internal debugging in log4net:
+
+* **Via the Application Config File** (Preferred):
+
+Set the `log4net.Internal.Debug` option to `true` in the application's config file (not the log4net configuration file).
+
+Example:
+
+[source,xml]
+----
+
+
+
+
+
+----
+
+This setting is read on startup, and all internal debugging messages are emitted.
+
+* **Programmatically**:
+
+Set `log4net.Util.LogLog.InternalDebugging` to `true` in code as early as possible to capture the most debug information.
+
+Internal debug messages are written to the console and `System.Diagnostics.Trace`.
+If there's no console, messages are lost unless redirected.
+You can capture these messages using a utility like DebugView from http://www.sysinternals.com[Sysinternals].
+
+To redirect debug messages to a file, add a trace listener in the config file:
+
+[source,xml]
+----
+
+
+
+
+
+
+
+
+
+----
+**Ensure the process has write permissions to the specified file.**
+
+[#configuration-errors]
+== How can I evaluate configuration errors at runtime?
+
+To prevent silent failures, log4net provides a way to evaluate whether it was properly configured and to check for any messages generated during startup.
+
+To check if log4net has been configured correctly, you can check the `Configured` property of the `ILoggerRepository` and enumerate the configuration messages as follows:
+
+[source,csharp]
+----
+if (!log4net.LogManager.GetRepository().Configured) // log4net is not configured
+{
+ foreach (log4net.Util.LogLog message in log4net.LogManager.GetRepository().ConfigurationMessages.Cast())
+ {
+ // Evaluate configuration message
+ }
+}
+----
+
+This allows you to catch any configuration issues and review them at runtime.
+
+[#logging-from-services]
+== Why doesn't the logging in my service work?
+
+A Windows service runs under a user account specified in the Services control panel.
+This account may have restricted permissions, so ensure that the account has permission to create and write files in the logging directory.
+
+Additionally, when a Windows service is launched, its current directory is set to the Windows system directory (e.g., `C:\Windows\System32`).
+If you are loading the configuration file from the current directory, keep in mind that this path won't be the location of your assemblies.
+
+The best approach to get the correct path to your assemblies is by using `AppDomain.BaseDirectory`.
+Note that log4net internals never use the current directory.
+
+[#reporting-bugs]
+== How do I report bugs?
+
+First, ensure it's truly a bug and not a usage error.
+If unsure, it's best to start with a https://github.com/apache/logging-log4net/discussions/new?category=general[discussion].
+
+If you've identified a bug, please report it via our https://github.com/apache/logging-log4net/issues[Issue Tracker].
+Before submitting, check if the issue has already been reported by searching the existing issues.
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 000000000..5f2e07a69
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/filters.adoc
@@ -0,0 +1,96 @@
+////
+ 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 log4net 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:: log4net behaves as if the filter was not present.
+It is evaluated by the next filter in the filter chain.
+
+Any filter along the way can accept the event and stop processing, deny the event and stop processing, or allow the event on to the next filter.
+If the event gets to the end of the filter chain without being denied it is implicitly accepted and will be logged.
+
+This filter will deny events that have a level that is lower than INFO or higher than FATAL. All events between INFO and FATAL will be logged.
+[source,xml]
+----
+
+
+
+
+----
+
+If we want to only allow messages through that have a specific substring (e.g. 'database') then we need to specify the following filters:
+[source,xml]
+----
+
+
+
+
+----
+The first filter will look for the substring 'database' in the message text of the event.
+If the text is found the filter will accept the message and filter processing will stop, the message will be logged.
+If the substring is not found the event will be passed to the next filter to process.
+If there is no next filter the event would be implicitly accepted and would be logged.
+But because we don't want the non matching events to be logged we need to use a log4net.Filter.DenyAllFilter that will just deny all events that reach it.
+This filter is only useful at the end of the filter chain.
+
+If we want to allow events that have either 'database' or 'ldap' in the message text we can use the following filters:
+[source,xml]
+----
+
+
+
+
+
+
+
+----
+
+[#list-of-filters]
+== List of Filters
+
+The following filters are defined in the log4net package:
+
+[cols="Type,Description"]
+|===
+|Type |Description
+
+|log4net.Filter.DenyAllFilter
+|Drops all logging events unconditionally.
+
+|log4net.Filter.LevelMatchFilter
+|Allows only events with an exact level match.
+
+|log4net.Filter.LevelRangeFilter
+|Allows events within a specified range of levels.
+
+|log4net.Filter.LoggerMatchFilter
+|Matches events from loggers with names starting with a given string.
+
+|log4net.Filter.PropertyFilter
+|Matches events based on a specific property's value.
+
+|log4net.Filter.StringMatchFilter
+|Matches events containing a specific substring in the message.
+|===
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 000000000..4163c7d97
--- /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 000000000..7190ebe13
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/installation.adoc
@@ -0,0 +1,39 @@
+////
+ 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.
+////
+
+[#installation]
+= Installation
+
+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].
+
+Alternatively you can use the dotnet tool.
+
+[source,powershell]
+----
+dotnet add package log4net
+----
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/introduction.adoc b/src/site/antora/modules/ROOT/pages/manual/introduction.adoc
new file mode 100644
index 000000000..7a85dd700
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/introduction.adoc
@@ -0,0 +1,338 @@
+////
+ 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.
+////
+
+= Introduction
+
+[#overview]
+== Overview
+
+This document introduces the log4net API, its unique features, and the rationale behind its design.
+log4net enables developers to control logging output with fine-grained precision.
+It is fully configurable at runtime through external configuration files.
+
+Almost every large application includes some form of logging or tracing system.
+Adding log statements is a straightforward and effective method for debugging.
+Sometimes it's the only available method, especially in multithreaded or distributed applications.
+Traditional debuggers may be limited or unavailable in such environments.
+
+After deployment, logging often becomes the only way to understand application behavior.
+Effective logging systems allow administrators to diagnose and resolve issues.
+
+Experience shows that logging is a critical part of the development process.
+It provides detailed context about the application's execution.
+It operates automatically once integrated into the codebase.
+Log output can also be stored persistently for later analysis.
+Beyond development, a powerful logging system can also serve as an auditing mechanism.
+
+Logging has trade-offs.
+It can reduce performance.
+It can produce overwhelming amounts of output.
+log4net is designed to minimize these downsides.
+It is fast, reliable, and extensible.
+The log4net API emphasizes simplicity and ease of use.
+
+[#frameworks]
+== Frameworks
+
+log4net is available for several frameworks.
+For each supported framework, an assembly targeting that framework is built:
+
+* .NET Standard 2.0 via .NET 8.0
+* Microsoft .NET Framework 4.6.2
+
+Not all frameworks are created equal, and some features have been excluded from certain builds.
+For more information, see the xref:./supported-frameworks.adoc[] document.
+
+[#main-components]
+== Main Components
+
+log4net has three main components:
+
+* loggers - capture and categorize log messages.
+
+* appenders - define where and how log messages are output
+
+* layouts - control the format of log messages.
+
+These components work together to enable developers to log messages according to message type and level.
+They also allow controlling at runtime how these messages are formatted and where they are reported.
+
+These components are assisted by filters that control the actions of the appender.
+Object renderers are used to turn objects into strings.
+
+[#logger-hierarchy]
+== Logger hierarchy
+
+Loggers are named entities, with case-sensitive names that follow a hierarchical structure.
+The main advantage of logging APIs over `System.Console.WriteLine` is the ability to disable certain log statements while allowing others to print.
+
+Loggers can have parent-child relationships based on their names.
+For example, a logger named `Animals.Carnivora` is the parent of `Animals.Carnivora.Dog`, and `System` is the parent of `System.Text` and ancestor of `System.Text.StringBuilder`.
+This hierarchy is similar to .NET's namespace and class structure.
+
+The root logger sits at the top of the hierarchy:
+
+* It always exists
+* It cannot be retrieved by name
+* It always has an assigned level
+
+Loggers are retrieved using the static `GetLogger` method from the `log4net.LogManager` class.
+It can take either a string for the logger name or a `Type` for the desired class.
+
+[source,csharp]
+----
+namespace log4net
+{
+ public class LogManager
+ {
+ public static ILog GetLogger(string name);
+ public static ILog GetLogger(Type type);
+ }
+}
+----
+
+The `GetLogger` method that takes a `Type` parameter uses the fully qualified type name as the name of the logger to retrieve.
+
+These `GetLogger` methods return an `ILog` interface, which is the representation of the logger passed back to the developer.
+
+The `ILog` interface is defined as follows:
+
+[source,csharp]
+----
+namespace log4net
+{
+ public interface ILog
+ {
+ /* Test if a level is enabled for logging */
+ bool IsDebugEnabled { get; }
+ bool IsInfoEnabled { get; }
+ bool IsWarnEnabled { get; }
+ bool IsErrorEnabled { get; }
+ bool IsFatalEnabled { get; }
+
+ /* Log a message object */
+ void Debug(object message);
+ void Info(object message);
+ void Warn(object message);
+ void Error(object message);
+ void Fatal(object message);
+
+ /* Log a message object and exception */
+ void Debug(object message, Exception t);
+ void Info(object message, Exception t);
+ void Warn(object message, Exception t);
+ void Error(object message, Exception t);
+ void Fatal(object message, Exception t);
+
+ /* Log a message string using the System.String.Format syntax */
+ void DebugFormat(string format, params object[] args);
+ void InfoFormat(string format, params object[] args);
+ void WarnFormat(string format, params object[] args);
+ void ErrorFormat(string format, params object[] args);
+ void FatalFormat(string format, params object[] args);
+
+ /* Log a message string using the System.String.Format syntax and provide a culture / format provider */
+ void DebugFormat(IFormatProvider provider, string format, params object[] args);
+ void InfoFormat(IFormatProvider provider, string format, params object[] args);
+ void WarnFormat(IFormatProvider provider, string format, params object[] args);
+ void ErrorFormat(IFormatProvider provider, string format, params object[] args);
+ void FatalFormat(IFormatProvider provider, string format, params object[] args);
+ }
+}
+----
+
+[#logger-levels]
+== Logger Levels
+
+Loggers may be assigned levels.
+Levels are instances of the `log4net.Core.Level` class.
+The following levels are defined in order of increasing priority:
+
+* ALL
+* DEBUG
+* INFO
+* WARN
+* ERROR
+* FATAL
+* OFF
+
+If a given logger is not assigned a level, it inherits one from its closest ancestor with an assigned level.
+
+More formally:
+
+[#level-inheritance]
+=== Level Inheritance
+
+The inherited level for a given logger X is equal to the first non-null level in the logger hierarchy, starting at X and proceeding upwards in the hierarchy towards the root logger.
+
+To ensure that all loggers can eventually inherit a level, the root logger always has an assigned level.
+The default value for the root logger is `DEBUG`.
+
+Below are four examples showing various assigned level values and the resulting inherited levels according to the inheritance rule.
+
+[#example1]
+==== Example 1: Root Logger Assigned Level
+
+[cols="1,1,1"]
+|===
+| Logger name | Assigned level | Inherited level
+| root | DEBUG | DEBUG
+| X | none | DEBUG
+| X.Y | none | DEBUG
+| X.Y.Z | none | DEBUG
+|===
+
+In this example, the root logger is assigned the level `DEBUG`, so all child loggers inherit this level.
+
+[#example2]
+==== Example 2: All Loggers Have Assigned Levels
+
+[cols="1,1,1"]
+|===
+| Logger name | Assigned level | Inherited level
+| root | DEBUG | DEBUG
+| X | INFO | INFO
+| X.Y | WARN | WARN
+| X.Y.Z | ERROR | ERROR
+|===
+
+Here, each logger has its own assigned level, so no inheritance is needed.
+
+[#example3]
+==== Example 3: Some Loggers Inherit Level
+
+[cols="1,1,1"]
+|===
+| Logger name | Assigned level | Inherited level
+| root | DEBUG | DEBUG
+| X | INFO | INFO
+| X.Y | none | INFO
+| X.Y.Z | ERROR | ERROR
+|===
+
+In this example, the `X.Y` logger inherits the `INFO` level from its parent `X` logger. The `X.Y.Z` logger has its own assigned level, `ERROR`.
+
+[#example4]
+==== Example 4: Some Loggers Inherit from Parent
+
+[cols="1,1,1"]
+|===
+| Logger name | Assigned level | Inherited level
+| root | DEBUG | DEBUG
+| X | INFO | INFO
+| X.Y | none | INFO
+| X.Y.Z | none | INFO
+|===
+
+Here, the `X.Y` and `X.Y.Z` loggers inherit the level `INFO` from their parent `X` logger.
+
+[#example-summary]
+==== Summary
+
+The idea is that loggers inherit the level of their closest ancestor logger if no level is explicitly assigned. This ensures that you don’t need to manually assign levels to each logger, and the level can propagate upwards in the hierarchy.
+
+[#logging-requests]
+=== Logging Requests
+
+Logging requests are made by invoking one of the printing methods of a logger instance (through the log4net.ILog).
+
+The available printing methods are:
+
+* Debug
+* Info
+* Warn
+* Error
+* Fatal
+
+By definition, the printing method determines the level of a logging request. For example:
+
+[source,csharp]
+----
+log.Info("...");
+----
+
+This statement represents a logging request with level `INFO`.
+
+A logging request is considered "enabled" if its level is higher than or equal to the level of the logger. Otherwise, the request is "disabled."
+
+If a logger does not have an assigned level, it will inherit one from its closest ancestor in the logger hierarchy.
+
+[#basic-selection-rule]
+==== Basic Selection Rule
+
+A log request of level `L` in a logger with (either assigned or inherited, whichever is appropriate) level `K` is enabled if `L >= K`.
+
+This rule is at the heart of log4net. It assumes that levels are ordered. For the standard levels, we have:
+
+* DEBUG < INFO < WARN < ERROR < FATAL
+
+Calling the `log4net.LogManager.GetLogger` method with the same name will always return a reference to the exact same logger object.
+
+For example:
+
+[source,csharp]
+----
+ILog x = LogManager.GetLogger("wombat");
+ILog y = LogManager.GetLogger("wombat");
+----
+
+In this case, `x` and `y` refer to exactly the same logger object.
+
+Thus, it is possible to configure a logger and then to retrieve the same instance somewhere else in the code without passing around references.
+
+In fundamental contradiction to biological parenthood, where parents always precede their children, log4net loggers can be created and configured in any order.
+
+In particular, a "parent" logger will find and link to its descendants even if it is instantiated after them.
+
+Logger configuration is usually done during application startup, typically via a configuration file.
+
+Loggers are often named after the class they’re used in, using the fully qualified class name.
+This makes log output easy to trace and aligns naturally with the application's design.
+
+While other naming strategies are possible, this approach is simple, effective, and widely adopted.
+
+[#appenders]
+== Appenders
+
+See xref:./appenders.adoc[]
+
+[#filters]
+== Filters
+
+See xref:./filters.adoc[]
+
+[#layouts]
+== Layouts
+
+See xref:./layouts.adoc[]
+
+[#renderers]
+== Object Renderers
+
+log4net can render the content of log messages using custom logic defined by the user.
+
+For example, if you often log `Orange` objects, you can register an `OrangeRenderer` to format them consistently in logs.
+
+Renderers follow the class hierarchy.
+If you register a `FruitRenderer`, it will be used for all `Fruit` types—including `Orange`—unless a more specific `OrangeRenderer` is also registered.
+
+Renderers must implement the `log4net.ObjectRenderer.IObjectRenderer` interface.
+
+[NOTE]
+====
+Format methods like `DebugFormat`, `InfoFormat`, etc., do *not* use Object Renderers.
+====
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 000000000..50ba91ec0
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/layouts.adoc
@@ -0,0 +1,131 @@
+////
+ 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 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 outlines some common concerns shared by most predefined layouts in log4net that users should be aware of.
+
+[#structured-logging]
+=== Structured Logging
+
+In modern production environments, logs are typically not read from local files by engineers.
+Instead, they are sent to log ingestion systems like Elasticsearch, Google Cloud Logging, or similar platforms for observability, metrics, and monitoring purposes.
+
+To support this, logs must be encoded in a machine-readable format — a practice known as *structured logging*.
+
+log4net provides support for structured logging through specialized layouts.
+For production use cases, we recommend using either:
+
+* `XmlLayout` — for structured XML output.
+* `JsonLayout` — via the external project https://gitlab.com/gdziadkiewicz/log4net.Ext.Json/-/blob/develop/log4net.Ext.Json/Layout/SerializedLayout.cs[log4net.Ext.Json].
+
+These layouts help ensure your logs are compatible with log aggregation and analysis tools.
+
+[#predefined-layouts]
+== Predefined Layouts
+
+log4net includes a set of predefined layouts designed to support a variety of common logging scenarios.
+
+[#patternlayout]
+=== PatternLayout
+
+`PatternLayout` is a customizable, efficient, and human-readable layout that generates log messages based on a user-defined pattern.
+It works similarly to `String.Format()` but provides specialized directives for injecting properties from a `LoggingEvent`.
+
+[IMPORTANT]
+====
+`PatternLayout` is *not* intended for structured logging.
+In production, prefer `XmlLayout` or `JsonLayout` for generating machine-readable logs (e.g., XML or JSON) that can be consumed by log ingestion systems such as Elasticsearch or Google Cloud Logging.
+====
+
+A conversion pattern is composed of literal text and conversion specifiers (format control expressions).
+For example, the following pattern:
+
+[source,charp]
+----
+logger.Debug("Woof!");
+logger.Warn("Meow!");
+----
+
+will yield the output
+
+[source,text]
+----
+2024-12-21 14:07:41,517 [main] DEBUG Animals.Carnivora.Dog - Woof!
+2024-12-21 14:07:41,517 [main] WARN Animals.Carnivora.Dog - Meow!
+----
+
+[#dynamic-pattern-layout]
+=== DyamicPatternLayout
+
+The `DynamicPatternLayout` should be used whenever the header or footer needs to include information that may change over time.
+
+Unlike the static `PatternLayout`, which renders headers and footers only once, the `DynamicPatternLayout` re-evaluates its pattern every time it is invoked.
+This makes it possible, for example, to include the current date and time in the header or footer—something not possible with the static layout.
+
+The following example shows how to configure the `DynamicPatternLayout`:
+
+[source,xml]
+----
+
+
+
+
+
+----
+
+[#layout-list]
+=== List of Layouts
+
+[cols="Type,Description"]
+|===
+|Type |Description
+
+|`log4net.Layout.DynamicPatternLayout`
+|Formats the logging event using a pattern string that is re-evaluated on every log event, allowing dynamic values like timestamps in headers or footers.
+
+|`log4net.Layout.ExceptionLayout`
+|Outputs only the exception text from the logging event.
+
+|`log4net.Layout.PatternLayout`
+|Formats the logging event using a flexible pattern string with various conversion specifiers.
+
+|`log4net.Layout.RawTimeStampLayout`
+|Outputs the raw timestamp (as a `DateTime`) from the logging event.
+
+|`log4net.Layout.RawUtcTimeStampLayout`
+|Outputs the raw timestamp in UTC from the logging event.
+
+|`log4net.Layout.SimpleLayout`
+|Provides a very simple format: `[level] - [message]`.
+
+|`log4net.Layout.XmlLayout`
+|Formats the logging event as a basic XML element.
+
+|`log4net.Layout.XmlLayoutSchemaLog4j`
+|Formats the logging event as XML compliant with the log4j event DTD.
+
+|===
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/pages/manual/supported-frameworks.adoc b/src/site/antora/modules/ROOT/pages/manual/supported-frameworks.adoc
new file mode 100644
index 000000000..1c25d994b
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/manual/supported-frameworks.adoc
@@ -0,0 +1,65 @@
+////
+ 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.
+////
+
+= Supported Frameworks
+
+This document summarizes the .NET frameworks supported by log4net.
+
+The log4net project is actively built and tested by its maintainers against the following target frameworks:
+
+[cols="Framework,Website"]
+|===
+| Framework | Website
+
+| Microsoft .NET 8 (via .NET Standard 2.0)
+| https://dotnet.microsoft.com/en-us/download/dotnet/8.0
+
+| Microsoft .NET Framework 4.6.2
+| http://msdn.microsoft.com/en-us/netframework/
+|===
+
+[#appenders]
+== Supported Appenders
+
+The following appenders are supported on the specified frameworks:
+
+[cols="Appender,net462,netstandard2.0"]
+|===
+| Appender | .NET Framework 4.6.2 | .NET Standard 2.0
+
+| AdoNetAppender | x | x
+| AnsiColorTerminalAppender | x | x
+| AspNetTraceAppender | x |
+| BufferingForwardingAppender | x | x
+| ColoredConsoleAppender | x | x
+| ConsoleAppender | x | x
+| DebugAppender | x | x
+| EventLogAppender | x |
+| FileAppender | x | x
+| ForwardingAppender | x | x
+| LocalSyslogAppender | x | x
+| ManagedColoredConsoleAppender | x | x
+| MemoryAppender | x | x
+| OutputDebugStringAppender | x | x
+| RemoteSyslogAppender | x | x
+| RollingFileAppender | x | x
+| SmtpAppender | x | x
+| SmtpPickupDirAppender | x | x
+| TelnetAppender | x | x
+| TraceAppender | x | x
+| UdpAppender | x | x
+|===
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 000000000..a2bfd86db
--- /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.
diff --git a/src/site/antora/modules/ROOT/pages/release-review.adoc b/src/site/antora/modules/ROOT/pages/release-review.adoc
new file mode 100644
index 000000000..88bd65fd5
--- /dev/null
+++ b/src/site/antora/modules/ROOT/pages/release-review.adoc
@@ -0,0 +1,138 @@
+////
+ 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.
+////
+
+[#verify]
+= Release verification
+
+Releases of log4net can be verified with following steps:
+[#windows]
+== Windows
+
+. Prerequisites (winget - in case of problems see next section choco)
++
+[source,powershell]
+----
+winget install -e --id GnuPG.Gpg4win
+winget install -e --id TortoiseSVN.TortoiseSVN # or any other subversion client
+winget install -e --id Mono.Mono
+winget install -e --id Microsoft.DotNet.SDK.8
+----
+After installation, verify that gpg and svn are in the path and add them when not.
+
+. Prerequisites (choco - only in case of problems with winget)
++
+[source,powershell]
+----
+Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
+choco install gpg4win
+choco install tortoisesvn # or any other subversion client
+choco install mono
+choco install dotnet-8.0-sdk
+----
+
+. Check out the release distribution
++
+[source,powershell]
+----
+svn co https://dist.apache.org/repos/dist/dev/logging/log4net/{releaseVersion} log4net-{releaseVersion}
+pushd log4net-{releaseVersion}
+----
+
+. Verify and extract
++
+[source,powershell]
+----
+& ./verify-release.ps1
+----
+
+. switch to the directory where you extracted the sources (in case you didn't use verify-release.ps1)
+
+. Verify the build
++
+[source,powershell]
+----
+dotnet test ./src/log4net.sln
+----
+
+[#linux]
+== Linux
+
+. Check out the release distribution:
++
+[source,bash]
+----
+export releaseVersion=...
+svn co https://dist.apache.org/repos/dist/dev/logging/log4net/$releaseVersion \
+ log4net-$releaseVersion && cd $_
+----
++
+[%collapsible]
+.Click to see how to check out using `wget` instead of `svn`
+====
+[source,bash]
+----
+mkdir log4net-$releaseVersion> && cd $_
+wget --cut-dirs=6 \
+ --no-host-directories \
+ --no-parent \
+ --recursive \
+ https://dist.apache.org/repos/dist/dev/logging/log4net/$releaseVersion/
+----
+====
+
+. Verify checksums:
++
+[source,bash]
+----
+sha512sum --check *.sha512
+----
+
+. Import the release manager GPG keys, unless you haven't earlier done so:
++
+[source,bash]
+----
+wget -O - https://downloads.apache.org/logging/KEYS | gpg --import
+----
+
+. Verify signatures:
++
+[source,bash]
+----
+for sigFile in *.asc; do gpg --verify $sigFile ${sigFile%.asc}; done
+----
+
+. Extract sources:
++
+[source,bash]
+----
+umask 0022
+unzip -q *source*.zip -d src
+cd src
+----
+
+. Verify the build (install https://docs.docker.com/engine/install[docker], if you haven't already):
++
+[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
+dotnet test /logging-log4net/src/log4net.sln
+----
\ No newline at end of file