This is an automated email from the ASF dual-hosted git repository. vy pushed a commit to branch 3.x-docgen in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 057ec1881665309d1a53c6e91df088bd09563028 Author: Volkan Yazıcı <[email protected]> AuthorDate: Tue Mar 19 22:19:13 2024 +0100 Implement docgen integration --- log4j-1.2-api/.log4j-plugin-processing-activator | 1 + log4j-1.2-api/pom.xml | 20 +-- .../.log4j-plugin-processing-activator | 1 + log4j-async-logger/pom.xml | 19 +-- .../.log4j-plugin-processing-activator | 1 + log4j-config-properties/pom.xml | 19 +-- .../.log4j-plugin-processing-activator | 1 + log4j-config-yaml/pom.xml | 19 +-- log4j-core-test/.log4j-plugin-processing-activator | 1 + log4j-core-test/pom.xml | 33 +---- log4j-core/.log4j-plugin-processing-activator | 1 + log4j-core/pom.xml | 36 ++--- .../java/org/apache/logging/log4j/core/Layout.java | 2 +- log4j-csv/.log4j-plugin-processing-activator | 1 + log4j-csv/pom.xml | 20 +-- log4j-docker/.log4j-plugin-processing-activator | 1 + log4j-docker/pom.xml | 25 +--- log4j-flume-ng/.log4j-plugin-processing-activator | 1 + log4j-flume-ng/pom.xml | 21 +-- .../.log4j-plugin-processing-activator | 1 + log4j-jdbc-dbcp2/pom.xml | 20 +-- log4j-jdbc/.log4j-plugin-processing-activator | 1 + log4j-jdbc/pom.xml | 18 +-- log4j-jndi/.log4j-plugin-processing-activator | 1 + log4j-jndi/pom.xml | 21 +-- log4j-jul/pom.xml | 13 -- .../.log4j-plugin-processing-activator | 1 + log4j-kubernetes/pom.xml | 22 +--- .../.log4j-plugin-processing-activator | 1 + log4j-layout-template-json-test/pom.xml | 70 +++++----- .../.log4j-plugin-processing-activator | 1 + log4j-layout-template-json/pom.xml | 45 ++----- log4j-mongodb4/.log4j-plugin-processing-activator | 1 + log4j-mongodb4/pom.xml | 18 +-- log4j-osgi-test/.log4j-plugin-processing-activator | 1 + log4j-osgi-test/pom.xml | 22 ++-- log4j-parent/pom.xml | 115 ++++++++++++++++ log4j-plugin-processor/pom.xml | 8 ++ .../.log4j-plugin-processing-activator | 1 + log4j-plugins-test/pom.xml | 21 +-- log4j-script/.log4j-plugin-processing-activator | 1 + log4j-script/pom.xml | 19 +-- .../appender/rolling/action/ScriptCondition.java | 4 +- pom.xml | 135 +++++++++++++++++-- src/asciidoc/templates/document.html.erb | 1 + src/docgen-templates/index.adoc.ftl | 60 +++++++++ src/docgen-templates/license.adoc | 16 +++ src/docgen-templates/type.adoc.ftl | 146 +++++++++++++++++++++ 48 files changed, 617 insertions(+), 390 deletions(-) diff --git a/log4j-1.2-api/.log4j-plugin-processing-activator b/log4j-1.2-api/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-1.2-api/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-1.2-api/pom.xml b/log4j-1.2-api/pom.xml index 6e38bbee4e..e53d42ddf6 100644 --- a/log4j-1.2-api/pom.xml +++ b/log4j-1.2-api/pom.xml @@ -16,17 +16,21 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> <version>${revision}</version> <relativePath>../log4j-parent</relativePath> </parent> + <artifactId>log4j-1.2-api</artifactId> <packaging>jar</packaging> <name>Apache Log4j 1.x Compatibility API</name> <description>The Apache Log4j 1.x Compatibility API</description> + <properties> <log4jParentDir>${basedir}/..</log4jParentDir> @@ -45,6 +49,7 @@ <Fragment-Host>org.apache.logging.log4j.core</Fragment-Host> <!-- we have an `bnd.bnd` file to override the parent's defaults --> </properties> + <dependencies> <dependency> <groupId>javax.jms</groupId> @@ -127,21 +132,6 @@ <build> <plugins> - <!-- Enable Log4j plugin processing --> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - <!-- Illegal access is disabled by default in Java 16 due to JEP-396. We are relaxing it for tests. --> <plugin> diff --git a/log4j-async-logger/.log4j-plugin-processing-activator b/log4j-async-logger/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-async-logger/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-async-logger/pom.xml b/log4j-async-logger/pom.xml index aba22bd83d..c9f7379845 100644 --- a/log4j-async-logger/pom.xml +++ b/log4j-async-logger/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -66,21 +68,4 @@ </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> </project> diff --git a/log4j-config-properties/.log4j-plugin-processing-activator b/log4j-config-properties/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-config-properties/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-config-properties/pom.xml b/log4j-config-properties/pom.xml index 35aa18e1a5..14a6a5691c 100644 --- a/log4j-config-properties/pom.xml +++ b/log4j-config-properties/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -48,21 +50,4 @@ </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> </project> diff --git a/log4j-config-yaml/.log4j-plugin-processing-activator b/log4j-config-yaml/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-config-yaml/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-config-yaml/pom.xml b/log4j-config-yaml/pom.xml index c09c0fa0b4..8b02dd275d 100644 --- a/log4j-config-yaml/pom.xml +++ b/log4j-config-yaml/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -48,21 +50,4 @@ </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> </project> diff --git a/log4j-core-test/.log4j-plugin-processing-activator b/log4j-core-test/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-core-test/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-core-test/pom.xml b/log4j-core-test/pom.xml index 2bdec622f7..e893432684 100644 --- a/log4j-core-test/pom.xml +++ b/log4j-core-test/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -28,6 +30,7 @@ <packaging>jar</packaging> <name>Apache Log4j Core Tests</name> <description>The Apache Log4j Implementation Tests</description> + <properties> <!-- Ignore less important (high rank) bugs for test artifacts --> <spotbugs.maxRank>9</spotbugs.maxRank> @@ -58,6 +61,7 @@ spring.test;substitute="spring-test" </bnd-extra-module-options> </properties> + <dependencies> <!-- Used for OSGi bundle support --> <dependency> @@ -288,35 +292,10 @@ <scope>test</scope> </dependency> </dependencies> + <build> <plugins> - <!-- Enable Log4j plugin processing --> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - <executions> - <execution> - <id>default-testCompile</id> - <configuration> - <compilerArgs combine.children="append"> - <!-- Disable automatic package discovery, which overwrites `log4j-core` plugins. --> - <arg>-ApluginPackage=org.apache.logging.log4j.core.test2</arg> - </compilerArgs> - </configuration> - </execution> - </executions> - </plugin> - <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> @@ -344,6 +323,7 @@ </plugins> </build> + <profiles> <profile> <id>fast-test</id> @@ -359,4 +339,5 @@ </build> </profile> </profiles> + </project> diff --git a/log4j-core/.log4j-plugin-processing-activator b/log4j-core/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-core/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-core/pom.xml b/log4j-core/pom.xml index e676d00b87..66a444575f 100644 --- a/log4j-core/pom.xml +++ b/log4j-core/pom.xml @@ -16,20 +16,27 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> <version>${revision}</version> <relativePath>../log4j-parent</relativePath> </parent> + <artifactId>log4j-core</artifactId> <packaging>jar</packaging> <name>Apache Log4j Core</name> <description>The Apache Log4j Implementation</description> + <properties> <maven.javadoc.skip>false</maven.javadoc.skip> + <!-- Tests are located elsewhere, no need to do any processing for the `src/test` directory: --> + <maven.test.skip>true</maven.test.skip> + <!-- ~ OSGi and JPMS options --> @@ -62,7 +69,10 @@ jdk.unsupported;transitive=false, org.fusesource.jansi;transitive=false, </bnd-extra-module-options> + + <log4j.docgen.pluginDescriptorsDir.effective>${log4j.docgen.pluginDescriptorsDir.phase1}</log4j.docgen.pluginDescriptorsDir.effective> </properties> + <dependencies> <!-- Naturally, all implementations require the log4j-api JAR --> <dependency> @@ -99,31 +109,5 @@ <optional>true</optional> </dependency> </dependencies> - <build> - <plugins> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - <configuration> - <skipTests>true</skipTests> - </configuration> - </plugin> - </plugins> - </build> </project> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout.java index 1821103ad2..62641d810e 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/Layout.java @@ -24,7 +24,7 @@ import org.apache.logging.log4j.core.layout.Encoder; /** * Converts {@link LogEvent} instances into different layouts of data. A layout typically encodes into either - * a {@link String} or {@code byte[]}. Since version 2.6, layouts implement {@link Encoder Encoder<LogEvent>} + * a {@link String} or {@code byte[]}. Since version 2.6, layouts implement {@link Encoder} * to support direct encoding of a log event into a {@link ByteBufferDestination} without creating temporary * intermediary objects. Since version 3.0.0, layouts no longer reference the legacy Java serialization API * and are limited to strings or bytes. diff --git a/log4j-csv/.log4j-plugin-processing-activator b/log4j-csv/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-csv/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-csv/pom.xml b/log4j-csv/pom.xml index 9556eb32a2..5c617c1b0b 100644 --- a/log4j-csv/pom.xml +++ b/log4j-csv/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -27,6 +29,7 @@ <artifactId>log4j-csv</artifactId> <name>Apache Log4j CSV</name> <description>Apache Log4j CSV Layout.</description> + <properties> <log4jParentDir>${basedir}/..</log4jParentDir> @@ -92,21 +95,4 @@ </dependency> </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> </project> diff --git a/log4j-docker/.log4j-plugin-processing-activator b/log4j-docker/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-docker/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-docker/pom.xml b/log4j-docker/pom.xml index 890688836e..2b6c19f09e 100644 --- a/log4j-docker/pom.xml +++ b/log4j-docker/pom.xml @@ -16,17 +16,21 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> <version>${revision}</version> <relativePath>../log4j-parent</relativePath> </parent> + <artifactId>log4j-docker</artifactId> <packaging>jar</packaging> <name>Apache Log4j Docker Library</name> <description>Apache Log4j Docker Support</description> + <properties> <!-- @@ -39,6 +43,7 @@ </bnd-extra-module-options> <Fragment-Host>org.apache.logging.log4j.core</Fragment-Host> </properties> + <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> @@ -68,24 +73,4 @@ </dependency> </dependencies> - <build> - <plugins> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - - </plugins> - </build> - </project> diff --git a/log4j-flume-ng/.log4j-plugin-processing-activator b/log4j-flume-ng/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-flume-ng/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-flume-ng/pom.xml b/log4j-flume-ng/pom.xml index 1502520b8c..fcfdff50f0 100644 --- a/log4j-flume-ng/pom.xml +++ b/log4j-flume-ng/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -28,6 +30,7 @@ <packaging>jar</packaging> <name>Apache Log4j Flume Bridge</name> <description>The Apache Log4j Flume Appender</description> + <properties> <log4jParentDir>${basedir}/..</log4jParentDir> @@ -41,6 +44,7 @@ </bnd-extra-module-options> <Fragment-Host>org.apache.logging.log4j.core</Fragment-Host> </properties> + <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> @@ -115,21 +119,4 @@ </dependency> </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> </project> diff --git a/log4j-jdbc-dbcp2/.log4j-plugin-processing-activator b/log4j-jdbc-dbcp2/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-jdbc-dbcp2/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-jdbc-dbcp2/pom.xml b/log4j-jdbc-dbcp2/pom.xml index ec67a8828e..70882c37f0 100644 --- a/log4j-jdbc-dbcp2/pom.xml +++ b/log4j-jdbc-dbcp2/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -27,6 +29,7 @@ <artifactId>log4j-jdbc-dbcp2</artifactId> <name>Apache Log4j JDBC DBCP 2</name> <description>Connection source for the JDBC Appender using Apache Commons DBCP2.</description> + <properties> <!-- @@ -86,21 +89,4 @@ </dependency> </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> </project> diff --git a/log4j-jdbc/.log4j-plugin-processing-activator b/log4j-jdbc/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-jdbc/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-jdbc/pom.xml b/log4j-jdbc/pom.xml index 5b247493e1..ebfd698839 100644 --- a/log4j-jdbc/pom.xml +++ b/log4j-jdbc/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -27,6 +29,7 @@ <artifactId>log4j-jdbc</artifactId> <name>Apache Log4j JDBC</name> <description>Apache Log4j Java Database Connectivity (JDBC).</description> + <properties> <log4jParentDir>${basedir}/..</log4jParentDir> @@ -115,20 +118,6 @@ <build> <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> @@ -144,4 +133,5 @@ </plugins> </build> + </project> diff --git a/log4j-jndi/.log4j-plugin-processing-activator b/log4j-jndi/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-jndi/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-jndi/pom.xml b/log4j-jndi/pom.xml index fe20c57a27..2ac3318322 100644 --- a/log4j-jndi/pom.xml +++ b/log4j-jndi/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -28,10 +30,12 @@ <packaging>jar</packaging> <name>Apache Log4j JNDI Support</name> <description>The Apache Log4j JNDI Support</description> + <properties> <log4jParentDir>${basedir}/..</log4jParentDir> <module.name>org.apache.logging.log4j.jndi</module.name> </properties> + <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> @@ -43,21 +47,4 @@ </dependency> </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> </project> diff --git a/log4j-jul/pom.xml b/log4j-jul/pom.xml index 5fb2704a4c..84b1f81dc1 100644 --- a/log4j-jul/pom.xml +++ b/log4j-jul/pom.xml @@ -85,19 +85,6 @@ <build> <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> diff --git a/log4j-kubernetes/.log4j-plugin-processing-activator b/log4j-kubernetes/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-kubernetes/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-kubernetes/pom.xml b/log4j-kubernetes/pom.xml index 9162c079fd..267dd6bd40 100644 --- a/log4j-kubernetes/pom.xml +++ b/log4j-kubernetes/pom.xml @@ -16,17 +16,21 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> <version>${revision}</version> <relativePath>../log4j-parent</relativePath> </parent> + <artifactId>log4j-kubernetes</artifactId> <packaging>jar</packaging> <name>Apache Log4j Kubernetes Library</name> <description>Apache Log4j Kubernetes Support</description> + <properties> <!-- @@ -39,6 +43,7 @@ </bnd-extra-module-options> <Fragment-Host>org.apache.logging.log4j.core</Fragment-Host> </properties> + <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> @@ -65,21 +70,4 @@ </dependency> </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> </project> diff --git a/log4j-layout-template-json-test/.log4j-plugin-processing-activator b/log4j-layout-template-json-test/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-layout-template-json-test/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-layout-template-json-test/pom.xml b/log4j-layout-template-json-test/pom.xml index da4d69599b..a87e8d1874 100644 --- a/log4j-layout-template-json-test/pom.xml +++ b/log4j-layout-template-json-test/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -38,99 +40,90 @@ </properties> <dependencies> + <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-layout-template-json</artifactId> </dependency> + <!-- needed for `MessageResolverTest#log4j1_logger_calls_should_use_fallbackKey` --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-config-properties</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-config-yaml</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core-test</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>org.awaitility</groupId> <artifactId>awaitility</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>com.google.code.java-allocation-instrumenter</groupId> <artifactId>java-allocation-instrumenter</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <scope>test</scope> </dependency> + <dependency> <groupId>co.elastic.logging</groupId> <artifactId>log4j2-ecs-layout</artifactId> <scope>test</scope> </dependency> + </dependencies> <build> <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - <executions> - <execution> - <id>default-testCompile</id> - <configuration> - <compilerArgs combine.children="append"> - <!-- Disable automatic package discovery, which overwrites `log4j-layout-template-json` plugins. --> - <arg>-ApluginPackage=org.apache.logging.log4j.layout.template.json.test</arg> - </compilerArgs> - </configuration> - </execution> - </executions> - </plugin> + <!-- Disable ITs, which are Docker-dependent, by default. --> <plugin> <groupId>org.apache.maven.plugins</groupId> @@ -147,6 +140,7 @@ </execution> </executions> </plugin> + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> @@ -162,17 +156,29 @@ </systemPropertyVariables> </configuration> </plugin> + </plugins> </build> <profiles> <profile> + <id>docker</id> + <activation> <activeByDefault>false</activeByDefault> </activation> + + <properties> + <elastic.version>8.10.2</elastic.version> + <!-- `docker run elasticsearch:<TAG>` exists with code 137 due to insufficient memory. + We limit the used JVM memory to avoid this OOM failure. --> + <elastic.java-opts>-Xms750m -Xmx750m</elastic.java-opts> + </properties> + <build> <plugins> + <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> @@ -183,14 +189,13 @@ <images> <image> <alias>elasticsearch</alias> - <name>docker.elastic.co/elasticsearch/elasticsearch:8.2.2</name> + <name>elasticsearch:${elastic.version}</name> <run> <env> - <xpack.security.enabled>false</xpack.security.enabled> <discovery.type>single-node</discovery.type> + <xpack.security.enabled>false</xpack.security.enabled> + <ES_JAVA_OPTS>${elastic.java-opts}</ES_JAVA_OPTS> </env> - <memory>1000000000</memory> - <!-- 1g --> <ports> <port>9200:9200</port> </ports> @@ -211,7 +216,7 @@ </image> <image> <alias>logstash</alias> - <name>docker.elastic.co/logstash/logstash:8.2.2</name> + <name>logstash:${elastic.version}</name> <run> <dependsOn> <container>elasticsearch</container> @@ -221,6 +226,9 @@ <name>log4j-layout-template-json-network</name> <alias>logstash</alias> </network> + <env> + <LS_JAVA_OPTS>${elastic.java-opts}</LS_JAVA_OPTS> + </env> <ports> <port>12222:12222</port> <port>12345:12345</port> @@ -306,11 +314,11 @@ </execution> </executions> </plugin> + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> <configuration> - <skip>false</skip> <includes> <include>**/*IT.java</include> </includes> @@ -324,8 +332,10 @@ </execution> </executions> </plugin> + </plugins> </build> + </profile> </profiles> diff --git a/log4j-layout-template-json/.log4j-plugin-processing-activator b/log4j-layout-template-json/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-layout-template-json/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-layout-template-json/pom.xml b/log4j-layout-template-json/pom.xml index 866c8180fb..e2682a71cf 100644 --- a/log4j-layout-template-json/pom.xml +++ b/log4j-layout-template-json/pom.xml @@ -32,6 +32,10 @@ <properties> <log4jParentDir>${basedir}/..</log4jParentDir> + <!-- Using `maven.test.skip` instead of `skipTests`, since there are no tests. + That is, there is nothing to compile. --> + <maven.test.skip>true</maven.test.skip> + <!-- ~ OSGi and JPMS options --> @@ -40,55 +44,22 @@ </properties> <dependencies> + <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </dependency> + <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> </dependency> + <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-plugins</artifactId> </dependency> - </dependencies> - <build> - <plugins> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - - <!-- Disable Failsafe since tests go to the `-test` module. --> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-failsafe-plugin</artifactId> - <configuration> - <skip>true</skip> - </configuration> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <configuration> - <skip>true</skip> - </configuration> - </plugin> - - </plugins> - </build> + </dependencies> </project> diff --git a/log4j-mongodb4/.log4j-plugin-processing-activator b/log4j-mongodb4/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-mongodb4/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-mongodb4/pom.xml b/log4j-mongodb4/pom.xml index 6292a1e3ff..f92c2ab0c8 100644 --- a/log4j-mongodb4/pom.xml +++ b/log4j-mongodb4/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -27,8 +29,8 @@ <artifactId>log4j-mongodb4</artifactId> <name>Apache Log4j MongoDB 4</name> <description>MongoDB appender for Log4j using the MongoDB 4 driver API.</description> - <properties> + <properties> <!-- ~ OSGi and JPMS options --> @@ -116,20 +118,6 @@ <build> <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> diff --git a/log4j-osgi-test/.log4j-plugin-processing-activator b/log4j-osgi-test/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-osgi-test/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-osgi-test/pom.xml b/log4j-osgi-test/pom.xml index ad9fc96e19..20722f8542 100644 --- a/log4j-osgi-test/pom.xml +++ b/log4j-osgi-test/pom.xml @@ -16,17 +16,21 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> <version>${revision}</version> <relativePath>../log4j-parent</relativePath> </parent> + <artifactId>log4j-osgi-test</artifactId> <packaging>jar</packaging> <name>Apache Log4j OSGi tests</name> <description>The Apache Log4j OSGi tests</description> + <properties> <module.name>org.apache.logging.log4j.osgi</module.name> <bnd.baseline.skip>true</bnd.baseline.skip> @@ -37,6 +41,7 @@ <spotbugs.skip>true</spotbugs.skip> <spifly.version>1.3.7</spifly.version> </properties> + <dependencies> <dependency> <groupId>javax.inject</groupId> @@ -136,7 +141,9 @@ <scope>test</scope> </dependency> </dependencies> + <build> + <testResources> <testResource> <!-- Enable variable interpolation in resources --> @@ -144,6 +151,7 @@ <directory>src/test/resources</directory> </testResource> </testResources> + <plugins> <!-- @@ -181,20 +189,6 @@ </executions> </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> diff --git a/log4j-parent/pom.xml b/log4j-parent/pom.xml index 6f6f2e62e4..884af04ccc 100644 --- a/log4j-parent/pom.xml +++ b/log4j-parent/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-bom</artifactId> @@ -1015,6 +1017,7 @@ </build> <profiles> + <profile> <id>parallel-tests</id> <build> @@ -1029,6 +1032,118 @@ </plugins> </build> </profile> + + <profile> + + <id>plugin-processing</id> + + <!-- Profile gets activated using a file instead of, say, a property. + Since a Maven property lookup requires model interpolation and that hasn't happened at this stage yet. + See: https://maven.apache.org/ref/3.9.6/maven-model-builder --> + <activation> + <file> + <exists>.log4j-plugin-processing-activator</exists> + </file> + </activation> + + <properties> + <log4j.docgen.pluginDescriptorsDir.effective>${log4j.docgen.pluginDescriptorsDir.phase2}</log4j.docgen.pluginDescriptorsDir.effective> + </properties> + + <build> + <plugins> + + <!-- Generate a random target package for `Log4jPlugins.java` --> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <id>generate-plugin-package-for-tests</id> + <goals> + <goal>bsh-property</goal> + </goals> + <phase>process-test-resources</phase> + <configuration> + <properties> + <property>log4jPluginPackageForTests</property> + </properties> + <source><![CDATA[ + import java.util.Locale; + import java.util.Random; + + String groupId = project.getGroupId(); + String sanitizedArtifactId = project + .getArtifactId() + .toLowerCase(Locale.US) + .replaceFirst("^log4j-", "") + .replaceAll("[^a-z]", "_"); + int salt = new Random(sanitizedArtifactId.hashCode()).nextInt(1000); + String log4jPluginPackageForTests = String.format("%s.%s.internal%d", new Object[] { + groupId, sanitizedArtifactId, salt + }); + ]]></source> + </configuration> + </execution> + </executions> + </plugin> + + <plugin> + + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + + <configuration> + <annotationProcessorPaths combine.children="append"> + <!-- Include `org.apache.logging.log4j.docgen.processor.DescriptorGenerator` that generates `log4j-plugins.xml`. + `DescriptorGenerator` must precede `PluginProcessor`, since the latter *claims* the `@Plugin`. + Once claimed, `javac` doesn't pass those sources to other processors. --> + <path> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-docgen</artifactId> + <version>${log4j-docgen.version}</version> + </path> + <!-- `org.apache.logging.log4j.plugin.processor.PluginProcessor` invocation: --> + <path> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-plugin-processor</artifactId> + <version>${project.version}</version> + </path> + </annotationProcessorPaths> + <compilerArgs combine.children="append"> + <!-- Provide `org.apache.logging.log4j.docgen.processor.DescriptorGenerator` arguments: --> + <arg>-Alog4j.docgen.descriptorFilePath=${log4j.docgen.pluginDescriptorsDir.effective}/${project.artifactId}-plugins.xml</arg> + <arg>-Alog4j.docgen.groupId=${project.groupId}</arg> + <arg>-Alog4j.docgen.artifactId=${project.artifactId}</arg> + <arg>-Alog4j.docgen.version=${project.version}</arg> + <arg>-Alog4j.docgen.description=${project.description}</arg> + <arg>-Alog4j.docgen.typeFilter.excludePattern=${log4j.docgen.typeFilter.excludePattern}</arg> + </compilerArgs> + </configuration> + + <!-- `PluginProcessor` generates a `Log4jPlugins.java` and registers it with `ServiceLoader`. + The package of this class is normally auto-computed as the common prefix of all plugin classes. + Some modules contain plugins in both `src/main` and `src/test`. + Without an additional annotation processor parameter, one class shadows the other one. + Hence, we point the one in `src/test` to elsewhere. --> + <executions> + <execution> + <id>default-testCompile</id> + <configuration> + <compilerArgs combine.children="append"> + <arg>-ApluginPackage=${log4jPluginPackageForTests}</arg> + </compilerArgs> + </configuration> + </execution> + </executions> + + </plugin> + + </plugins> + </build> + + </profile> + </profiles> </project> diff --git a/log4j-plugin-processor/pom.xml b/log4j-plugin-processor/pom.xml index 4c20538441..26034033aa 100644 --- a/log4j-plugin-processor/pom.xml +++ b/log4j-plugin-processor/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -28,17 +30,23 @@ <packaging>jar</packaging> <name>Apache Log4j Plugin Processor</name> <description>Log4j Plugin Annotation Processor</description> + <properties> <log4jParentDir>${basedir}/..</log4jParentDir> </properties> + <dependencies> + <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> </dependency> + <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-plugins</artifactId> </dependency> + </dependencies> + </project> diff --git a/log4j-plugins-test/.log4j-plugin-processing-activator b/log4j-plugins-test/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-plugins-test/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-plugins-test/pom.xml b/log4j-plugins-test/pom.xml index 6fce895866..765cf1c882 100644 --- a/log4j-plugins-test/pom.xml +++ b/log4j-plugins-test/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -28,9 +30,11 @@ <packaging>jar</packaging> <name>Apache Log4j Plugins Test</name> <description>Log4j Plugin Test Support</description> + <properties> <log4jParentDir>${basedir}/..</log4jParentDir> </properties> + <dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> @@ -68,23 +72,10 @@ <scope>test</scope> </dependency> </dependencies> + <build> <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> @@ -103,6 +94,7 @@ </plugins> </build> + <profiles> <profile> <id>parallel-tests</id> @@ -128,4 +120,5 @@ </build> </profile> </profiles> + </project> diff --git a/log4j-script/.log4j-plugin-processing-activator b/log4j-script/.log4j-plugin-processing-activator new file mode 100644 index 0000000000..ba133f3696 --- /dev/null +++ b/log4j-script/.log4j-plugin-processing-activator @@ -0,0 +1 @@ +This file is here to activate the `plugin-processing` Maven profile. diff --git a/log4j-script/pom.xml b/log4j-script/pom.xml index a1c00afe19..afb43d3300 100644 --- a/log4j-script/pom.xml +++ b/log4j-script/pom.xml @@ -16,7 +16,9 @@ ~ limitations under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j</artifactId> @@ -111,21 +113,4 @@ </dependency> </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <annotationProcessorPaths combine.children="append"> - <path> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-plugin-processor</artifactId> - <version>${project.version}</version> - </path> - </annotationProcessorPaths> - </configuration> - </plugin> - </plugins> - </build> </project> diff --git a/log4j-script/src/main/java/org/apache/logging/log4j/script/appender/rolling/action/ScriptCondition.java b/log4j-script/src/main/java/org/apache/logging/log4j/script/appender/rolling/action/ScriptCondition.java index 373682397d..88006a9c34 100644 --- a/log4j-script/src/main/java/org/apache/logging/log4j/script/appender/rolling/action/ScriptCondition.java +++ b/log4j-script/src/main/java/org/apache/logging/log4j/script/appender/rolling/action/ScriptCondition.java @@ -92,8 +92,8 @@ public class ScriptCondition implements ScriptConditional { * <li>pathList - a {@code java.util.List} containing {@link PathWithAttribute} objects. (The script is * free to modify and return this list.)</li> * <li>substitutor - a {@link StrSubstitutor} that can be used to look up variables embedded in the base - * dir or other properties - * <li>statusLogger - the {@link StatusLogger} that can be used to log events during script execution + * dir or other properties</li> + * <li>statusLogger - the {@link StatusLogger} that can be used to log events during script execution</li> * <li>any properties declared in the configuration</li> * </ul> * @param configuration the configuration diff --git a/pom.xml b/pom.xml index adb5cf93ec..cc52fcf89f 100644 --- a/pom.xml +++ b/pom.xml @@ -331,18 +331,25 @@ ======================== --> <!-- `maven-javadoc-plugin` is only used to generate Javadoc HTML used in the website. We don't deploy any Javadoc JARs. - We also don't generate Javadoc HTML for all modules, but only for two modules: `log4j-api` and `log4j-core`. --> - <doclint>all,-missing,-html</doclint> + We also don't generate Javadoc HTML for all modules, but only for two modules: `log4j-api` and `log4j-core`. + Hence, we disable it by default: --> <maven.javadoc.skip>true</maven.javadoc.skip> - <!-- Skipping `maven-site-plugin` globally. - It is manually enabled only for this root module below. --> + <doclint>all,-missing,-html</doclint> + <!-- Skipping `maven-site-plugin` globally. --> <maven.site.skip>true</maven.site.skip> <maven.site.deploy.skip>true</maven.site.deploy.skip> - <!-- Temporary override for the `changelog-release` profile introduced by `logging-parent`. - This override can be removed once `logging-parent` updates `log4j-tools` to version `0.7.0`. - See https://github.com/apache/logging-log4j-tools/issues/89 --> - <log4j.changelog.versionPattern><![CDATA[^(?<major>0|[1-9]\d*)\.(?<minor>0|[1-9]\d*)\.(?<patch>(0|[1-9]\d*)(-[a-zA-Z][0-9a-zA-Z-]*)?)$]]></log4j.changelog.versionPattern> + <!-- Dependency versions --> + <log4j-docgen.version>0.8.0-SNAPSHOT</log4j-docgen.version> + + <!-- ================================== + `log4j-docgen`-specific properties + ================================== --> + <!-- `log4j-docgen` qualified class name exclude pattern --> + <log4j.docgen.typeFilter.excludePattern>^java\..+</log4j.docgen.typeFilter.excludePattern> + <!-- Directories where `log4j-docgen` annotation processor will emit files to --> + <log4j.docgen.pluginDescriptorsDir.phase1>${maven.multiModuleProjectDirectory}/target/plugin-descriptors/phase1</log4j.docgen.pluginDescriptorsDir.phase1> + <log4j.docgen.pluginDescriptorsDir.phase2>${maven.multiModuleProjectDirectory}/target/plugin-descriptors/phase2</log4j.docgen.pluginDescriptorsDir.phase2> </properties> @@ -603,6 +610,7 @@ <exclude>**/rabbitmq.config</exclude> <exclude>**/MANIFEST.MF</exclude> <exclude>.surefire-*</exclude> + <exclude>**/.log4j-*</exclude> </excludes> </configuration> </plugin> @@ -682,6 +690,7 @@ <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <executions> + <!-- Copy `src/site/_release-notes` to `src/site/asciidoc/_release-notes`. This is necessary since `logging-parent` version `<=10.1.1` exports changelogs to `src/site/_release-notes`. Though `maven-site-plugin` expects them to be at `src/site/asciidoc/_release-notes`. @@ -703,6 +712,7 @@ </resources> </configuration> </execution> + <!-- Copy `src/site` to `target/generated-sources/site` --> <execution> <id>copy-site</id> @@ -725,6 +735,7 @@ </resources> </configuration> </execution> + <!-- Copy `target/site/apidocs` to the parent module's `target/site/javadoc/<artifactId>` folder --> <execution> <id>copy-javadoc</id> @@ -733,10 +744,10 @@ </goals> <phase>site</phase> <!-- This execution must be inherited and enabled by modules publishing javadocs: `-api` and `-core`. - Such modules enable this execution via `javadoc.skip` property. + Such modules enable this execution via `maven.javadoc.skip` property. Hence, don't insert a `<inherited>false</inherited>`, please! --> <configuration> - <skip>${javadoc.skip}</skip> + <skip>${maven.javadoc.skip}</skip> <outputDirectory>${maven.multiModuleProjectDirectory}/target/site/javadoc/${project.artifactId}</outputDirectory> <resources> <resource> @@ -744,6 +755,7 @@ </resource> </resources> </configuration> + </execution> </executions> </plugin> @@ -769,9 +781,95 @@ </executions> </plugin> + <plugin> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-docgen-maven-plugin</artifactId> + <version>${log4j-docgen.version}</version> + <inherited>false</inherited> + + <!-- Common docgen configuration --> + <configuration> + + <!-- Descriptor processing order matters! + + Imagine we place all descriptors to the same folder. + Assume that the filesystem walks folder contents in alphanumeric order. + Sourcing `log4j-docgen:generate-*` from that folder will consume descriptors in the following order: + + 1. `log4j-1.2.api` + 2. `log4j-cassandra` + 3. `log4j-core` + 4. ... + + For instance, `AbstractFilterable` is defined by the descriptors of both `log4j-cassandra` and `log4j-core`. + Due to alphanumeric scanning order, it will appear as it is provided by `log4j-cassandra`. + Though, it is actually provided by `log4j-core`. + To avoid this problem, we place descriptors to folders associated with phases. + We pass the folder of each phase in a certain order to `log4j-docgen:generate-*`. --> + <descriptorFileMatchers> + <descriptorFileMatcher> + <baseDirectory>${log4j.docgen.pluginDescriptorsDir.phase1}</baseDirectory> + </descriptorFileMatcher> + <descriptorFileMatcher> + <baseDirectory>${log4j.docgen.pluginDescriptorsDir.phase2}</baseDirectory> + </descriptorFileMatcher> + </descriptorFileMatchers> + + <typeFilter> + <excludes> + <exclude>${log4j.docgen.typeFilter.excludePattern}</exclude> + </excludes> + </typeFilter> + + </configuration> + + <executions> + + <!-- Generate AsciiDoc from downloaded plugin descriptors --> + <execution> + <id>generate-plugin-docs</id> + <goals> + <goal>generate-documentation</goal> + </goals> + <phase>pre-site</phase> + <configuration> + <templateDirectory>${project.basedir}/src/docgen-templates</templateDirectory> + <indexTemplate> + <source>index.adoc.ftl</source> + <target>${project.build.directory}/generated-sources/site/asciidoc/plugin-reference/index.adoc</target> + </indexTemplate> + <typeTemplate> + <source>type.adoc.ftl</source> + <!-- `target` must be in sync. with the `log4j-docgen-type-template-target` configuration of `log4j-docgen-asciidoctor-extension`! --> + <target>${project.build.directory}/generated-sources/site/asciidoc/plugin-reference/%g/%a/%c.adoc</target> + </typeTemplate> + </configuration> + </execution> + + <!-- Generate XSD from downloaded plugin descriptors --> + <execution> + <id>generate-plugin-schema</id> + <goals> + <goal>generate-schema</goal> + </goals> + <phase>pre-site</phase> + <configuration> + <schemaVersion>${project.version}</schemaVersion> + <schemaFile>${project.build.directory}/log4j-config.xsd</schemaFile> + </configuration> + </execution> + + </executions> + + </plugin> + <plugin> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctor-maven-plugin</artifactId> + <!-- `log4j-docgen` uses `asciidoctorj` version `3.x`. + Though `asciidoctor-maven-plugin` version `<3.0.0` doesn't work against `asciidoctorj` version `3.x`. + Hence, override the `asciidoctor-maven-plugin` version to `3.x`. --> + <version>3.0.0</version> <inherited>false</inherited> <dependencies> <dependency> @@ -779,6 +877,19 @@ <artifactId>spring-asciidoctor-extensions-block-switch</artifactId> <version>0.6.3</version> </dependency> + <!-- `log4j-docgen` uses `asciidoctorj` version `3.x`. + Though `asciidoctor-maven-plugin` version `3.x` still uses `asciidoctorj` version `2.x`. + Hence, upgrade the `asciidoctorj` used to version `3.x`. --> + <dependency> + <groupId>org.asciidoctor</groupId> + <artifactId>asciidoctorj</artifactId> + <version>3.0.0-alpha.2</version> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-docgen-asciidoctor-extension</artifactId> + <version>${log4j-docgen.version}</version> + </dependency> </dependencies> <executions> <execution> @@ -798,6 +909,10 @@ <attributes> <source-highlighter>rouge</source-highlighter> <toc>left</toc> + <log4j-docgen-descriptor-directory>${project.build.directory}/plugin-descriptors</log4j-docgen-descriptor-directory> + <log4j-docgen-type-filter-exclude-pattern>${log4j.docgen.typeFilter.excludePattern}</log4j-docgen-type-filter-exclude-pattern> + <!-- `log4j-docgen-type-template-target` must be in sync. with the `typeTemplate` configuration of `log4j-docgen-maven-plugin`! --> + <log4j-docgen-type-template-target>../../%g/%a/%c.html</log4j-docgen-type-template-target> </attributes> </configuration> </execution> diff --git a/src/asciidoc/templates/document.html.erb b/src/asciidoc/templates/document.html.erb index 36d13b0bb8..bd542d7765 100644 --- a/src/asciidoc/templates/document.html.erb +++ b/src/asciidoc/templates/document.html.erb @@ -69,6 +69,7 @@ <!-- <li><a href="#">Manual</a></li>--> <!-- <li><a href="#">Guides</a></li>--> <li><a href="/legacy-docs.html">Old Docs</a></li> + <li><a href="/plugin-reference/index.html">Plugin reference</a></li> <li><a href="https://cwiki.apache.org/confluence/display/LOGGING/Log4j">Wiki</a></li> <li><a href="/articles.html">Articles</a></li> <li><a href="/faq.html">FAQ</a></li> diff --git a/src/docgen-templates/index.adoc.ftl b/src/docgen-templates/index.adoc.ftl new file mode 100644 index 0000000000..48e8d0fd3b --- /dev/null +++ b/src/docgen-templates/index.adoc.ftl @@ -0,0 +1,60 @@ +<#ftl output_format="plainText" strip_whitespace=true> +<#-- +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. +--> +<#-- @ftlvariable name="lookup" type="org.apache.logging.log4j.docgen.generator.TypeLookup" --> +<#include "license.adoc"> + += Plugin reference + +This page is a Javadoc-on-steroids specialized for Log4j plugins. +This reference manual is derived from the source code of all Log4j plugins and types associated with them. +You can use this reference manual to precisely customize your `log4j2.xml`. + +[INFO] +==== +Every running Log4j system is a constellation of xref:../manual/plugins.adoc[plugins], which is analogous to beans in Java EE and Spring. +This not only allows Log4j itself to be developed in individual components, but also enables extensibility users can leverage. +==== + +[#shortcuts] +== Shortcuts + +* xref:org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.Configuration.adoc[The `<Configuration>` element assembly in a `log4j2.xml`] +* xref:org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.Appender.adoc[The type hierarchy of *appenders*] +* xref:org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.Layout.adoc[The type hierarchy of *layouts*] +* xref:org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.Filter.adoc[The type hierarchy of *filters*] + +[#index] +== Index + +Below is a list of all types reachable by plugins grouped by the Maven coordinate of the artifact bundling them. + +<#assign sourcedTypes = lookup?values/> +<#-- @ftlvariable name="sourcedTypes" type="org.apache.logging.log4j.docgen.generator.ArtifactSourcedType[]" --> +<#assign lastGroupId = ''/> +<#assign lastArtifactId = ''/> +<#list sourcedTypes?sort_by('artifactId', 'groupId', ['type', 'className']) as sourcedType> + <#if sourcedType.groupId != lastGroupId || sourcedType.artifactId != lastArtifactId> + <#assign lastGroupId = sourcedType.groupId/> + <#assign lastArtifactId = sourcedType.artifactId/> + +[#${sourcedType.groupId?replace('.', '_')}-${sourcedType.artifactId?replace('.', '_')}] +=== `${sourcedType.groupId}:${sourcedType.artifactId}` + + </#if> +* xref:${sourcedType.groupId}/${sourcedType.artifactId}/${sourcedType.type.className}.adoc[`${sourcedType.type.className}`] +</#list> diff --git a/src/docgen-templates/license.adoc b/src/docgen-templates/license.adoc new file mode 100644 index 0000000000..797f7c9fb7 --- /dev/null +++ b/src/docgen-templates/license.adoc @@ -0,0 +1,16 @@ +//// +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. +//// diff --git a/src/docgen-templates/type.adoc.ftl b/src/docgen-templates/type.adoc.ftl new file mode 100644 index 0000000000..3c087e7a96 --- /dev/null +++ b/src/docgen-templates/type.adoc.ftl @@ -0,0 +1,146 @@ +<#ftl output_format="plainText" strip_whitespace=true> +<#-- + 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. +--> +<#-- @ftlvariable name="sourcedType" type="org.apache.logging.log4j.docgen.model.ArtifactSourcedType" --> +<#assign type = sourcedType.type/> +<#-- @ftlvariable name="type" type="org.apache.logging.log4j.docgen.Type" --> +<#-- @ftlvariable name="lookup" type="org.apache.logging.log4j.docgen.generator.TypeLookup" --> +<#include "license.adoc"> + +[#${type.className?replace('.', '_')}] += ${type.name!('`' + type.className + '`')} + +Class:: `${type.className}` +<#if sourcedType.groupId?has_content && sourcedType.artifactId?has_content> +Provider:: `${sourcedType.groupId}:${sourcedType.artifactId}` + +</#if> + +${(type.description.text)!} + +<#assign hasElements = ((type.elements?size)!0) != 0/> +<#if type.class.simpleName == 'PluginType'> + <#-- @ftlvariable name="type" type="org.apache.logging.log4j.docgen.PluginType" --> +[#${type.className?replace('.', '_')}-XML-snippet] +== XML snippet +[source, xml] +---- + <#assign tag><${type.name} </#assign> + <#assign indent = tag?replace('.', ' ', 'r')/> + <#if !type.attributes?has_content> +<${type.name}/> + <#else> + <#list type.attributes?sort_by('name') as attr> + <#if attr?is_first> +${tag}${attr.name}="${attr.defaultValue!}"${attr?is_last?then(hasElements?then('>', '/>'), '')} + <#else> +${indent}${attr.name}="${attr.defaultValue!}"${attr?is_last?then(hasElements?then('>', '/>'), '')} + </#if> + </#list> + <#if hasElements> + <#list type.elements as element> + <#assign multiplicitySuffix = (element.multiplicity == '*')?then('<!-- multiple occurrences allowed -->','')/> + <#assign elementName = 'a-' + element.type?keep_after_last('.') + '-implementation'/> + <#if lookup[element.type]??> + <#assign element_type = lookup[element.type].type/> + <#-- @ftlvariable name="element_type" type="org.apache.logging.log4j.docgen.model.AbstractType" --> + <#if element_type.name?? && !element_type.implementations?has_content> + <#assign elementName = element_type.name/> + </#if> + </#if> + <${elementName}/>${multiplicitySuffix} + </#list> +</${type.name}> + </#if> + </#if> +---- +</#if> +<#if type.attributes?has_content> + +[#${type.className?replace('.', '_')}-attributes] +== Attributes + +Optional attributes are denoted by `?`-suffixed types. + +[cols="1m,1m,1m,5"] +|=== +|Name|Type|Default|Description + + <#list type.attributes?sort_by('name') as attr> + <#assign requirementSuffix = attr.required?then('', '?')/> +|${attr.name} + <#assign attrTypeName = attr.type?contains('.')?then(attr.type?keep_after_last('.'), attr.type)/> + <#if lookup[attr.type]??> + <#assign attrSourcedType = lookup[attr.type]/> +|xref:../../${attrSourcedType.groupId}/${attrSourcedType.artifactId}/${attr.type}.adoc[${attrTypeName}]${requirementSuffix} + <#else> +|${attrTypeName}${requirementSuffix} + </#if> +|${attr.defaultValue!} +a|${(attr.description.text)!} + + </#list> +|=== +</#if> +<#if hasElements> + +[#${type.className?replace('.', '_')}-components] +== Nested components + +Optional components are denoted by `?`-suffixed types. + +[cols="1m,1m,5"] +|=== +|Tag|Type|Description + + <#list type.elements?sort_by('type') as element> + <#assign requirementSuffix = element.required?then('', '?')/> + <#assign descriptionCell = (element.description.text)!/> + <#assign elementName = element.type?contains('.')?then(element.type?keep_after_last('.'), element.type)/> + <#if lookup[element.type]??> + <#assign elementSourcedType = lookup[element.type]/> + <#assign tagCell = elementSourcedType.type.name!/> +|${tagCell} +|xref:../../${elementSourcedType.groupId}/${elementSourcedType.artifactId}/${element.type}.adoc[${elementName}]${requirementSuffix} + <#else> +| +|${elementName}${requirementSuffix} + </#if> +a|${descriptionCell} + + </#list> +|=== +</#if> +<#if type.implementations?has_content> + +[#${type.className?replace('.', '_')}-implementations] +== Known implementations + + <#list type.implementations as impl> + <#assign implSourcedType = lookup[impl]/> +* xref:../../${implSourcedType.groupId}/${implSourcedType.artifactId}/${impl}.adoc[${impl?contains('.')?then(impl?keep_after_last('.'), impl)}] + </#list> +</#if> + +[#shortcuts] +== Shortcuts + +* xref:../../index.adoc[The plugin reference] +* xref:../../org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.Configuration.adoc[The `<Configuration>` element assembly in a `log4j2.xml`] +* xref:../../org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.Appender.adoc[The type hierarchy of *appenders*] +* xref:../../org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.Layout.adoc[The type hierarchy of *layouts*] +* xref:../../org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.Filter.adoc[The type hierarchy of *filters*]
