You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2024/02/29 15:14:56 UTC
(logging-log4j-tools) 02/02: Add type filter support to generators
This is an automated email from the ASF dual-hosted git repository.
vy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j-tools.git
commit 8fda8c5b1c2d0b79bb2c7710893752731649974d
Author: Volkan Yazıcı <vo...@yazi.ci>
AuthorDate: Thu Feb 29 14:06:58 2024 +0100
Add type filter support to generators
---
...neratorMojo.java => AbstractGeneratorMojo.java} | 40 +--
.../docgen/maven/DocumentationGeneratorMojo.java | 27 +--
.../log4j/docgen/maven/SchemaGeneratorMojo.java | 29 +--
.../logging/log4j/docgen/maven/TypeFilterMojo.java | 88 +++++++
.../logging/log4j/docgen/generator/BaseTypes.java | 4 +-
.../docgen/generator/DocumentationGenerator.java | 2 +-
.../generator/DocumentationGeneratorArgs.java | 5 +
.../log4j/docgen/generator/SchemaGenerator.java | 10 +-
.../docgen/generator/SchemaGeneratorArgs.java | 7 +-
.../logging/log4j/docgen/generator/TypeLookup.java | 20 +-
.../log4j/docgen/generator/base-java-types.xml | 69 ------
.../generator/DocumentationGeneratorTest.java | 4 +
.../docgen/generator/SchemaGeneratorTest.java | 3 +-
....log4j.core.config.LoggerConfig.RootLogger.adoc | 2 +-
...che.logging.log4j.core.config.LoggerConfig.adoc | 2 +-
.../plugins-to-freemarker-output/scalars.adoc | 54 -----
.../log4j-core/java.io.Serializable.adoc | 27 ---
.../log4j-core/java.lang.Cloneable.adoc | 28 ---
.../log4j-core/java.lang.Iterable.adoc | 27 ---
.../log4j-core/java.lang.Object.adoc | 269 ---------------------
.../log4j-core/java.lang.Runnable.adoc | 29 ---
.../log4j-core/java.util.Comparator.adoc | 27 ---
....logging.log4j.core.appender.AsyncAppender.adoc | 4 +-
...ogging.log4j.core.appender.ConsoleAppender.adoc | 2 +-
...gging.log4j.core.appender.FailoverAppender.adoc | 2 +-
...e.logging.log4j.core.appender.FileAppender.adoc | 2 +-
...e.logging.log4j.core.appender.HttpAppender.adoc | 2 +-
...g4j.core.appender.MemoryMappedFileAppender.adoc | 2 +-
...g.log4j.core.appender.OutputStreamAppender.adoc | 2 +-
...g4j.core.appender.RandomAccessFileAppender.adoc | 2 +-
...ng.log4j.core.appender.RollingFileAppender.adoc | 2 +-
...e.appender.RollingRandomAccessFileAppender.adoc | 2 +-
...e.logging.log4j.core.appender.SmtpAppender.adoc | 2 +-
...logging.log4j.core.appender.SyslogAppender.adoc | 4 +-
...logging.log4j.core.appender.WriterAppender.adoc | 2 +-
...nder.db.jdbc.DriverManagerConnectionSource.adoc | 2 +-
...g.log4j.core.appender.db.jdbc.JdbcAppender.adoc | 6 +-
...ogging.log4j.core.appender.mom.JmsAppender.adoc | 2 +-
...4j.core.appender.mom.jeromq.JeroMqAppender.adoc | 2 +-
...og4j.core.appender.mom.kafka.KafkaAppender.adoc | 2 +-
...ng.log4j.core.appender.nosql.NoSqlAppender.adoc | 9 +-
...ender.rewrite.LoggerNameLevelRewritePolicy.adoc | 2 +-
...g4j.core.appender.rewrite.MapRewritePolicy.adoc | 2 +-
...og4j.core.appender.rewrite.RewriteAppender.adoc | 2 +-
...logging.log4j.core.appender.routing.Routes.adoc | 2 +-
...og4j.core.appender.routing.RoutingAppender.adoc | 2 +-
...4j.core.async.AsyncLoggerConfig.RootLogger.adoc | 4 +-
...logging.log4j.core.async.AsyncLoggerConfig.adoc | 4 +-
....log4j.core.config.LoggerConfig.RootLogger.adoc | 4 +-
...g.log4j.core.filter.DynamicThresholdFilter.adoc | 2 +-
...ache.logging.log4j.core.filter.RegexFilter.adoc | 2 +-
...ing.log4j.core.filter.StructuredDataFilter.adoc | 2 +-
...g.log4j.core.filter.ThreadContextMapFilter.adoc | 2 +-
...pache.logging.log4j.core.layout.GelfLayout.adoc | 7 +-
...pache.logging.log4j.core.layout.JsonLayout.adoc | 7 +-
...ing.log4j.core.layout.LevelPatternSelector.adoc | 2 +-
...che.logging.log4j.core.layout.LoggerFields.adoc | 2 +-
...ng.log4j.core.layout.MarkerPatternSelector.adoc | 2 +-
...he.logging.log4j.core.layout.Rfc5424Layout.adoc | 2 +-
...ng.log4j.core.layout.ScriptPatternSelector.adoc | 2 +-
...che.logging.log4j.core.layout.SyslogLayout.adoc | 5 +
...apache.logging.log4j.core.layout.XmlLayout.adoc | 7 +-
...pache.logging.log4j.core.layout.YamlLayout.adoc | 7 +-
...4j.layout.template.json.JsonTemplateLayout.adoc | 2 +-
.../freemarker-output/scalars.adoc | 89 -------
.../src/test/resources/templates/plugin.adoc.ftl | 30 ++-
.../src/test/resources/templates/scalars.adoc.ftl | 4 +-
.../tools/internal/test/util/FileTestUtils.java | 5 +-
68 files changed, 251 insertions(+), 778 deletions(-)
diff --git a/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/SchemaGeneratorMojo.java b/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/AbstractGeneratorMojo.java
similarity index 51%
copy from log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/SchemaGeneratorMojo.java
copy to log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/AbstractGeneratorMojo.java
index 193db22..36603ba 100644
--- a/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/SchemaGeneratorMojo.java
+++ b/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/AbstractGeneratorMojo.java
@@ -17,25 +17,11 @@
package org.apache.logging.log4j.docgen.maven;
import java.io.File;
-import java.util.Set;
-import javax.xml.stream.XMLStreamException;
-import org.apache.logging.log4j.docgen.PluginSet;
-import org.apache.logging.log4j.docgen.generator.SchemaGenerator;
-import org.apache.logging.log4j.docgen.generator.SchemaGeneratorArgs;
import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.jspecify.annotations.Nullable;
-/**
- * Goal generating an XSD from a given plugin descriptor, e.g., {@code plugins.xml}.
- *
- * @see SchemaGenerator
- */
-@Mojo(name = "generate-schema", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, threadSafe = true)
-public class SchemaGeneratorMojo extends AbstractMojo {
+abstract class AbstractGeneratorMojo extends AbstractMojo {
/**
* The paths of the plugin descriptor XML files.
@@ -45,7 +31,7 @@ public class SchemaGeneratorMojo extends AbstractMojo {
*/
@Nullable
@Parameter(property = "log4j.docgen.descriptorFiles")
- private File[] descriptorFiles;
+ File[] descriptorFiles;
/**
* The {@link java.nio.file.FileSystem#getPathMatcher(String) PathMatcher}s to populate the paths of the plugin descriptor XML files.
@@ -55,24 +41,12 @@ public class SchemaGeneratorMojo extends AbstractMojo {
*/
@Nullable
@Parameter
- private PathMatcherMojo[] descriptorFileMatchers;
+ PathMatcherMojo[] descriptorFileMatchers;
/**
- * The path of the XSD file to write to
+ * Predicate for filtering types that the generator will operate on.
*/
- @Parameter(property = "log4j.docgen.schemaFile", required = true)
- private File schemaFile;
-
- @Override
- public void execute() throws MojoExecutionException {
- final Set<PluginSet> pluginSets =
- PluginSets.ofDescriptorFilesAndFileMatchers(descriptorFiles, descriptorFileMatchers);
- try {
- final SchemaGeneratorArgs generatorArgs = new SchemaGeneratorArgs(pluginSets, schemaFile.toPath());
- SchemaGenerator.generateSchema(generatorArgs);
- } catch (final XMLStreamException error) {
- final String message = String.format("failed generating the schema file `%s`", schemaFile);
- throw new MojoExecutionException(message, error);
- }
- }
+ @Nullable
+ @Parameter
+ TypeFilterMojo typeFilter;
}
diff --git a/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/DocumentationGeneratorMojo.java b/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/DocumentationGeneratorMojo.java
index 16c3c41..4ea6e6d 100644
--- a/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/DocumentationGeneratorMojo.java
+++ b/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/DocumentationGeneratorMojo.java
@@ -18,15 +18,14 @@ package org.apache.logging.log4j.docgen.maven;
import java.io.File;
import java.util.Set;
+import java.util.function.Predicate;
import org.apache.logging.log4j.docgen.PluginSet;
import org.apache.logging.log4j.docgen.generator.DocumentationGenerator;
import org.apache.logging.log4j.docgen.generator.DocumentationGeneratorArgs;
import org.apache.logging.log4j.docgen.generator.DocumentationTemplate;
-import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
-import org.jspecify.annotations.Nullable;
/**
* Goal generating documentation by feeding the configuration collected from the provided plugin descriptors (e.g., {@code plugins.xml}) to the FreeMarker templates provided.
@@ -34,27 +33,7 @@ import org.jspecify.annotations.Nullable;
* @see DocumentationGenerator
*/
@Mojo(name = "generate-documentation", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, threadSafe = true)
-public class DocumentationGeneratorMojo extends AbstractMojo {
-
- /**
- * The paths of the plugin descriptor XML files.
- * <p>
- * If you want to provide to a multitude of files, you might want to use {@link #descriptorFileMatchers} instead.
- * </p>
- */
- @Nullable
- @Parameter(property = "log4j.docgen.descriptorFiles")
- private File[] descriptorFiles;
-
- /**
- * The {@link java.nio.file.FileSystem#getPathMatcher(String) PathMatcher}s to populate the paths of the plugin descriptor XML files.
- * <p>
- * If you want to refer to a particular file, you might want to use {@link #descriptorFiles} instead.
- * </p>
- */
- @Nullable
- @Parameter
- private PathMatcherMojo[] descriptorFileMatchers;
+public class DocumentationGeneratorMojo extends AbstractGeneratorMojo {
/**
* The path to the FreeMarker template directory.
@@ -84,8 +63,10 @@ public class DocumentationGeneratorMojo extends AbstractMojo {
public void execute() {
final Set<PluginSet> pluginSets =
PluginSets.ofDescriptorFilesAndFileMatchers(descriptorFiles, descriptorFileMatchers);
+ final Predicate<String> classNameFilter = typeFilter != null ? typeFilter.createPredicate() : ignored -> true;
final DocumentationGeneratorArgs generatorArgs = new DocumentationGeneratorArgs(
pluginSets,
+ classNameFilter,
templateDirectory.toPath(),
toApiModel(scalarsTemplate),
toApiModel(pluginTemplate),
diff --git a/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/SchemaGeneratorMojo.java b/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/SchemaGeneratorMojo.java
index 193db22..26f8366 100644
--- a/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/SchemaGeneratorMojo.java
+++ b/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/SchemaGeneratorMojo.java
@@ -18,16 +18,15 @@ package org.apache.logging.log4j.docgen.maven;
import java.io.File;
import java.util.Set;
+import java.util.function.Predicate;
import javax.xml.stream.XMLStreamException;
import org.apache.logging.log4j.docgen.PluginSet;
import org.apache.logging.log4j.docgen.generator.SchemaGenerator;
import org.apache.logging.log4j.docgen.generator.SchemaGeneratorArgs;
-import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
-import org.jspecify.annotations.Nullable;
/**
* Goal generating an XSD from a given plugin descriptor, e.g., {@code plugins.xml}.
@@ -35,27 +34,7 @@ import org.jspecify.annotations.Nullable;
* @see SchemaGenerator
*/
@Mojo(name = "generate-schema", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, threadSafe = true)
-public class SchemaGeneratorMojo extends AbstractMojo {
-
- /**
- * The paths of the plugin descriptor XML files.
- * <p>
- * If you want to provide to a multitude of files, you might want to use {@link #descriptorFileMatchers} instead.
- * </p>
- */
- @Nullable
- @Parameter(property = "log4j.docgen.descriptorFiles")
- private File[] descriptorFiles;
-
- /**
- * The {@link java.nio.file.FileSystem#getPathMatcher(String) PathMatcher}s to populate the paths of the plugin descriptor XML files.
- * <p>
- * If you want to refer to a particular file, you might want to use {@link #descriptorFiles} instead.
- * </p>
- */
- @Nullable
- @Parameter
- private PathMatcherMojo[] descriptorFileMatchers;
+public class SchemaGeneratorMojo extends AbstractGeneratorMojo {
/**
* The path of the XSD file to write to
@@ -67,8 +46,10 @@ public class SchemaGeneratorMojo extends AbstractMojo {
public void execute() throws MojoExecutionException {
final Set<PluginSet> pluginSets =
PluginSets.ofDescriptorFilesAndFileMatchers(descriptorFiles, descriptorFileMatchers);
+ final Predicate<String> classNameFilter = typeFilter != null ? typeFilter.createPredicate() : ignored -> true;
try {
- final SchemaGeneratorArgs generatorArgs = new SchemaGeneratorArgs(pluginSets, schemaFile.toPath());
+ final SchemaGeneratorArgs generatorArgs =
+ new SchemaGeneratorArgs(pluginSets, classNameFilter, schemaFile.toPath());
SchemaGenerator.generateSchema(generatorArgs);
} catch (final XMLStreamException error) {
final String message = String.format("failed generating the schema file `%s`", schemaFile);
diff --git a/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/TypeFilterMojo.java b/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/TypeFilterMojo.java
new file mode 100644
index 0000000..ac808e8
--- /dev/null
+++ b/log4j-docgen-maven-plugin/src/main/java/org/apache/logging/log4j/docgen/maven/TypeFilterMojo.java
@@ -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.
+ */
+package org.apache.logging.log4j.docgen.maven;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.Predicate;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.jspecify.annotations.Nullable;
+
+/**
+ * Models a predicate for filtering types that a generator will operate on.
+ */
+public final class TypeFilterMojo {
+
+ /**
+ * The regular expressions that will be matched against the class name (e.g., {@code java.lang.String}) to determine the types that will be <em>included</em> for processing by the generator.
+ * <p>
+ * The type will be included if it matches one or more patterns.
+ * </p><p>
+ * The collection defaults to {@code [".*"]}, that is, all types are accepted.
+ * </p>
+ */
+ @Nullable
+ @Parameter
+ private String[] includes;
+
+ /**
+ * The regular expressions that will be matched against the class name (e.g., {@code java.lang.String}) to determine the types that will be <em>excluded</em> for processing the generator.
+ * <p>
+ * The type will be excluded if it matches one or more patterns.
+ * </p><p>
+ * The collection is empty by default, that is, no types will be discarded.
+ * </p>
+ */
+ @Nullable
+ @Parameter
+ private String[] excludes;
+
+ Predicate<String> createPredicate() {
+ final String[] effectiveIncludes = includes != null && includes.length > 0 ? includes : new String[] {".*"};
+ final List<Pattern> inclusionPatterns = compilePatterns("includes", effectiveIncludes);
+ final List<Pattern> exclusionPatterns = compilePatterns("excludes", excludes);
+ return (final String className) -> {
+ final boolean included = inclusionPatterns.stream()
+ .anyMatch(pattern -> pattern.matcher(className).matches());
+ if (included) {
+ final boolean excluded = exclusionPatterns.stream()
+ .anyMatch(pattern -> pattern.matcher(className).matches());
+ return !excluded;
+ }
+ return false;
+ };
+ }
+
+ private static List<Pattern> compilePatterns(final String fieldName, @Nullable final String[] patterns) {
+ if (patterns == null || patterns.length == 0) {
+ return Collections.emptyList();
+ }
+ return Arrays.stream(patterns)
+ .map(pattern -> {
+ try {
+ return Pattern.compile(pattern);
+ } catch (final Exception error) {
+ final String message = String.format("invalid `%s` pattern: `%s`", fieldName, pattern);
+ throw new IllegalArgumentException(message, error);
+ }
+ })
+ .collect(Collectors.toList());
+ }
+}
diff --git a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/BaseTypes.java b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/BaseTypes.java
index 355e4f3..4127f7f 100644
--- a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/BaseTypes.java
+++ b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/BaseTypes.java
@@ -28,9 +28,7 @@ final class BaseTypes {
static final Set<PluginSet> PLUGIN_SETS = readBaseTypes();
private static Set<PluginSet> readBaseTypes() {
- return Stream.of("base-java-types.xml", "base-log4j-types.xml")
- .map(BaseTypes::readBaseTypes)
- .collect(Collectors.toSet());
+ return Stream.of("base-log4j-types.xml").map(BaseTypes::readBaseTypes).collect(Collectors.toSet());
}
private static PluginSet readBaseTypes(final String resourceName) {
diff --git a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/DocumentationGenerator.java b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/DocumentationGenerator.java
index c2a6871..e1b1bb0 100644
--- a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/DocumentationGenerator.java
+++ b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/DocumentationGenerator.java
@@ -41,7 +41,7 @@ public final class DocumentationGenerator {
requireNonNull(args, "args");
final List<PluginSet> extendedSets = Stream.concat(BaseTypes.PLUGIN_SETS.stream(), args.pluginSets.stream())
.collect(Collectors.toList());
- final TypeLookup lookup = TypeLookup.of(extendedSets);
+ final TypeLookup lookup = TypeLookup.of(extendedSets, args.classNameFilter);
final Collection<ArtifactSourcedType> scalarTypes = new TreeSet<>();
lookup.forEach((className, sourcedType) -> {
final Type type = sourcedType.type;
diff --git a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/DocumentationGeneratorArgs.java b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/DocumentationGeneratorArgs.java
index f2dbfde..5da94de 100644
--- a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/DocumentationGeneratorArgs.java
+++ b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/DocumentationGeneratorArgs.java
@@ -20,12 +20,15 @@ import static java.util.Objects.requireNonNull;
import java.nio.file.Path;
import java.util.Set;
+import java.util.function.Predicate;
import org.apache.logging.log4j.docgen.PluginSet;
public final class DocumentationGeneratorArgs {
final Set<PluginSet> pluginSets;
+ final Predicate<String> classNameFilter;
+
final Path templateDirectory;
final DocumentationTemplate scalarsTemplate;
@@ -36,11 +39,13 @@ public final class DocumentationGeneratorArgs {
public DocumentationGeneratorArgs(
final Set<PluginSet> pluginSets,
+ final Predicate<String> classNameFilter,
final Path templateDirectory,
final DocumentationTemplate scalarsTemplate,
final DocumentationTemplate pluginTemplate,
final DocumentationTemplate interfaceTemplate) {
this.pluginSets = requireNonNull(pluginSets, "pluginSets");
+ this.classNameFilter = requireNonNull(classNameFilter, "classNameFilter");
this.templateDirectory = requireNonNull(templateDirectory, "templateDirectory");
this.scalarsTemplate = requireNonNull(scalarsTemplate, "scalarsTemplate");
this.pluginTemplate = requireNonNull(pluginTemplate, "pluginTemplate");
diff --git a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/SchemaGenerator.java b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/SchemaGenerator.java
index 6381f55..9a7cccc 100644
--- a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/SchemaGenerator.java
+++ b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/SchemaGenerator.java
@@ -68,7 +68,7 @@ public final class SchemaGenerator {
try {
final List<PluginSet> extendedSets = Stream.concat(BaseTypes.PLUGIN_SETS.stream(), args.pluginSets.stream())
.collect(Collectors.toList());
- final TypeLookup lookup = TypeLookup.of(extendedSets);
+ final TypeLookup lookup = TypeLookup.of(extendedSets, args.classNameFilter);
final XMLOutputFactory factory = XMLOutputFactory.newFactory();
@Nullable final Path schemaFileParent = args.schemaFile.getParent();
if (schemaFileParent != null) {
@@ -207,7 +207,7 @@ public final class SchemaGenerator {
}
for (final String implementation : implementations) {
@Nullable final ArtifactSourcedType sourcedType = lookup.get(implementation);
- if (sourcedType != null) {
+ if (sourcedType != null && sourcedType.type instanceof PluginType) {
final PluginType pluginType = (PluginType) sourcedType.type;
for (final String key : getKeyAndAliases(pluginType)) {
writer.writeEmptyElement(XSD_NAMESPACE, "element");
@@ -250,7 +250,11 @@ public final class SchemaGenerator {
if (xmlType == null) {
return;
}
- final Type rawType = lookup.get(type).type;
+ final ArtifactSourcedType sourcedType = lookup.get(type);
+ if (sourcedType == null) {
+ return;
+ }
+ final Type rawType = sourcedType.type;
if (!(rawType instanceof AbstractType)) {
return;
}
diff --git a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/SchemaGeneratorArgs.java b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/SchemaGeneratorArgs.java
index bfb7336..8a1b8ea 100644
--- a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/SchemaGeneratorArgs.java
+++ b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/SchemaGeneratorArgs.java
@@ -20,16 +20,21 @@ import static java.util.Objects.requireNonNull;
import java.nio.file.Path;
import java.util.Set;
+import java.util.function.Predicate;
import org.apache.logging.log4j.docgen.PluginSet;
public final class SchemaGeneratorArgs {
final Set<PluginSet> pluginSets;
+ final Predicate<String> classNameFilter;
+
final Path schemaFile;
- public SchemaGeneratorArgs(final Set<PluginSet> pluginSets, final Path schemaFile) {
+ public SchemaGeneratorArgs(
+ final Set<PluginSet> pluginSets, final Predicate<String> classNameFilter, final Path schemaFile) {
this.pluginSets = requireNonNull(pluginSets, "pluginSets");
+ this.classNameFilter = requireNonNull(classNameFilter, "classNameFilter");
this.schemaFile = requireNonNull(schemaFile, "schemaFile");
}
}
diff --git a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/TypeLookup.java b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/TypeLookup.java
index c77d591..598fcfc 100644
--- a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/TypeLookup.java
+++ b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/generator/TypeLookup.java
@@ -16,8 +16,10 @@
*/
package org.apache.logging.log4j.docgen.generator;
+import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
+import java.util.function.Predicate;
import org.apache.logging.log4j.docgen.AbstractType;
import org.apache.logging.log4j.docgen.PluginSet;
import org.apache.logging.log4j.docgen.PluginType;
@@ -27,13 +29,14 @@ final class TypeLookup extends TreeMap<String, ArtifactSourcedType> {
private static final long serialVersionUID = 1L;
- static TypeLookup of(final Iterable<? extends PluginSet> pluginSets) {
- return new TypeLookup(pluginSets);
+ static TypeLookup of(final Iterable<? extends PluginSet> pluginSets, final Predicate<String> classNameFilter) {
+ return new TypeLookup(pluginSets, classNameFilter);
}
- private TypeLookup(final Iterable<? extends PluginSet> pluginSets) {
+ private TypeLookup(final Iterable<? extends PluginSet> pluginSets, final Predicate<String> classNameFilter) {
mergeDescriptors(pluginSets);
populateTypeHierarchy(pluginSets);
+ filterTypes(classNameFilter);
}
private void mergeDescriptors(Iterable<? extends PluginSet> pluginSets) {
@@ -103,4 +106,15 @@ final class TypeLookup extends TreeMap<String, ArtifactSourcedType> {
return type;
}
}
+
+ private void filterTypes(final Predicate<String> classNameMatcher) {
+ final Iterator<String> classNameIterator = keySet().iterator();
+ while (classNameIterator.hasNext()) {
+ final String className = classNameIterator.next();
+ final boolean matching = classNameMatcher.test(className);
+ if (!matching) {
+ classNameIterator.remove();
+ }
+ }
+ }
}
diff --git a/log4j-docgen/src/main/resources/org/apache/logging/log4j/docgen/generator/base-java-types.xml b/log4j-docgen/src/main/resources/org/apache/logging/log4j/docgen/generator/base-java-types.xml
deleted file mode 100644
index f6fed10..0000000
--- a/log4j-docgen/src/main/resources/org/apache/logging/log4j/docgen/generator/base-java-types.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Licensed to the Apache Software Foundation (ASF) under one or more
- ~ contributor license agreements. See the NOTICE file distributed with
- ~ this work for additional information regarding copyright ownership.
- ~ The ASF licenses this file to you under the Apache License, Version 2.0
- ~ (the "License"); you may not use this file except in compliance with
- ~ the License. You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-<pluginSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="https://logging.apache.org/xml/ns"
- xsi:schemaLocation="https://logging.apache.org/xml/ns https://logging.apache.org/xml/ns/log4j-plugins-0.1.0.xsd"
- version="0.1.0">
-
- <description>Java type definitions untraceable from the plugin hierarchy.</description>
-
- <scalars>
-
- <scalar className="boolean">
- <description>A boolean value</description>
- <values>
- <value name="false">
- <description>false</description>
- </value>
- <value name="true">
- <description>true</description>
- </value>
- </values>
- </scalar>
-
- <scalar className="byte">
- <description>An 8-bit signed integer from `-128` to `127`</description>
- </scalar>
-
- <scalar className="short">
- <description>A 16-bit signed integer from `-32768` to `32767`</description>
- </scalar>
-
- <scalar className="int">
- <description>A 32-bit signed integer from `-2147483648` to `2147483647`</description>
- </scalar>
-
- <scalar className="long">
- <description>A 64-bit signed integer from `-9223372036854775808` to `9223372036854775807`</description>
- </scalar>
-
- <scalar className="float">
- <description>A single precision floating number from `1.40239846e-45` to `3.40282347e+38`</description>
- </scalar>
-
- <scalar className="double">
- <description>A double precision floating number from `4.94065645841246544e-324` to `1.79769313486231570e+308`</description>
- </scalar>
-
- <scalar className="java.lang.String">
- <description>A string of characters</description>
- </scalar>
-
- </scalars>
-
-</pluginSet>
diff --git a/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/generator/DocumentationGeneratorTest.java b/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/generator/DocumentationGeneratorTest.java
index bf6c814..5627a19 100644
--- a/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/generator/DocumentationGeneratorTest.java
+++ b/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/generator/DocumentationGeneratorTest.java
@@ -23,6 +23,7 @@ import static org.apache.logging.log4j.tools.internal.test.util.FileTestUtils.as
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Set;
+import java.util.function.Predicate;
import org.apache.logging.log4j.docgen.PluginSet;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.CleanupMode;
@@ -30,6 +31,8 @@ import org.junit.jupiter.api.io.TempDir;
public class DocumentationGeneratorTest {
+ private static final Predicate<String> CLASS_NAME_MATCHER = className -> !className.startsWith("java.");
+
@Test
void simple_descriptor_should_work(@TempDir(cleanup = CleanupMode.ON_SUCCESS) final Path outputDir) {
final PluginSet pluginSet = readDescriptor("src/test/resources/example-plugins.xml");
@@ -54,6 +57,7 @@ public class DocumentationGeneratorTest {
final Path templateDirectory = Paths.get("src/test/resources/templates");
final DocumentationGeneratorArgs generatorArgs = new DocumentationGeneratorArgs(
pluginSets,
+ CLASS_NAME_MATCHER,
templateDirectory,
new DocumentationTemplate(
"scalars.adoc.ftl", outputDir.resolve("scalars.adoc").toString()),
diff --git a/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/generator/SchemaGeneratorTest.java b/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/generator/SchemaGeneratorTest.java
index 64e9da5..40e7ab7 100644
--- a/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/generator/SchemaGeneratorTest.java
+++ b/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/generator/SchemaGeneratorTest.java
@@ -53,7 +53,8 @@ public class SchemaGeneratorTest {
// Generate the schema
final Path schemaFile = outputDir.resolve("config.xsd");
- final SchemaGeneratorArgs generatorArgs = new SchemaGeneratorArgs(Set.of(pluginSet), schemaFile);
+ final SchemaGeneratorArgs generatorArgs =
+ new SchemaGeneratorArgs(Set.of(pluginSet), ignored -> true, schemaFile);
SchemaGenerator.generateSchema(generatorArgs);
// Return the generated XSD file path
diff --git a/log4j-docgen/src/test/resources/plugins-to-freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.RootLogger.adoc b/log4j-docgen/src/test/resources/plugins-to-freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.RootLogger.adoc
index 1d2c042..f03e276 100644
--- a/log4j-docgen/src/test/resources/plugins-to-freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.RootLogger.adoc
+++ b/log4j-docgen/src/test/resources/plugins-to-freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.RootLogger.adoc
@@ -28,7 +28,7 @@ Configures the root logger
----
<Root includeLocation=""
level="ERROR">
- <AppenderRef/>
+ <AppenderRef/><!-- multiple occurrences allowed -->
<a-Filter-implementation/>
</Root>
----
diff --git a/log4j-docgen/src/test/resources/plugins-to-freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.adoc b/log4j-docgen/src/test/resources/plugins-to-freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.adoc
index d4286c6..74aebc2 100644
--- a/log4j-docgen/src/test/resources/plugins-to-freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.adoc
+++ b/log4j-docgen/src/test/resources/plugins-to-freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.adoc
@@ -29,7 +29,7 @@ Configures a particular logger
<Logger includeLocation=""
level=""
name="">
- <AppenderRef/>
+ <AppenderRef/><!-- multiple occurrences allowed -->
<a-Filter-implementation/>
</Logger>
----
diff --git a/log4j-docgen/src/test/resources/plugins-to-freemarker-output/scalars.adoc b/log4j-docgen/src/test/resources/plugins-to-freemarker-output/scalars.adoc
index d147a94..9bef793 100644
--- a/log4j-docgen/src/test/resources/plugins-to-freemarker-output/scalars.adoc
+++ b/log4j-docgen/src/test/resources/plugins-to-freemarker-output/scalars.adoc
@@ -19,54 +19,6 @@ limitations under the License.
Type converter plugins are used to convert simple `String` values into other types.
-[#boolean]
-== `boolean`
-
-
-A boolean value
-
-[#boolean-values]
-=== Possible values
-
-`false`:: false
-`true`:: true
-
-[#byte]
-== `byte`
-
-
-An 8-bit signed integer from `-128` to `127`
-
-[#double]
-== `double`
-
-
-A double precision floating number from `4.94065645841246544e-324` to `1.79769313486231570e+308`
-
-[#float]
-== `float`
-
-
-A single precision floating number from `1.40239846e-45` to `3.40282347e+38`
-
-[#int]
-== `int`
-
-
-A 32-bit signed integer from `-2147483648` to `2147483647`
-
-[#java_lang_String]
-== `java.lang.String`
-
-
-A string of characters
-
-[#long]
-== `long`
-
-
-A 64-bit signed integer from `-9223372036854775808` to `9223372036854775807`
-
[#org_apache_logging_log4j_Level]
== `org.apache.logging.log4j.Level`
@@ -114,9 +66,3 @@ Specifies the target of a console appender.
`SYSTEM_OUT`:: Logs to the standard output.
`SYSTEM_ERR`:: Logs to the standard error.
-
-[#short]
-== `short`
-
-
-A 16-bit signed integer from `-32768` to `32767`
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.io.Serializable.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.io.Serializable.adoc
deleted file mode 100644
index de37d91..0000000
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.io.Serializable.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-////
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-////
-[#java_io_Serializable]
-= Serializable
-
-Class:: `java.io.Serializable`
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-[#java_io_Serializable-implementations]
-== Known implementations
-
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.PathSortByModificationTime.adoc[PathSortByModificationTime]
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Cloneable.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Cloneable.adoc
deleted file mode 100644
index 3823ba2..0000000
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Cloneable.adoc
+++ /dev/null
@@ -1,28 +0,0 @@
-////
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-////
-[#java_lang_Cloneable]
-= Cloneable
-
-Class:: `java.lang.Cloneable`
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-[#java_lang_Cloneable-implementations]
-== Known implementations
-
-* xref:../log4j-core/org.apache.logging.log4j.core.net.SocketOptions.adoc[SocketOptions]
-* xref:../log4j-core/org.apache.logging.log4j.core.net.SocketPerformancePreferences.adoc[SocketPerformancePreferences]
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Iterable.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Iterable.adoc
deleted file mode 100644
index 16891df..0000000
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Iterable.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-////
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-////
-[#java_lang_Iterable]
-= Iterable
-
-Class:: `java.lang.Iterable`
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-[#java_lang_Iterable-implementations]
-== Known implementations
-
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.CompositeFilter.adoc[CompositeFilter]
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Object.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Object.adoc
deleted file mode 100644
index 56cd86b..0000000
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Object.adoc
+++ /dev/null
@@ -1,269 +0,0 @@
-////
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-////
-[#java_lang_Object]
-= Object
-
-Class:: `java.lang.Object`
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-[#java_lang_Object-implementations]
-== Known implementations
-
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.AppenderSet.adoc[AppenderSet]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.AsyncAppender.adoc[AsyncAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.ConsoleAppender.adoc[ConsoleAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.CountingNoOpAppender.adoc[CountingNoOpAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.FailoverAppender.adoc[FailoverAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.FailoversPlugin.adoc[FailoversPlugin]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.FileAppender.adoc[FileAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.HttpAppender.adoc[HttpAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.MemoryMappedFileAppender.adoc[MemoryMappedFileAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.NullAppender.adoc[NullAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.OutputStreamAppender.adoc[OutputStreamAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.RandomAccessFileAppender.adoc[RandomAccessFileAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.RollingFileAppender.adoc[RollingFileAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.adoc[RollingRandomAccessFileAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.ScriptAppenderSelector.adoc[ScriptAppenderSelector]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.SmtpAppender.adoc[SmtpAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.SocketAppender.adoc[SocketAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.SyslogAppender.adoc[SyslogAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.WriterAppender.adoc[WriterAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.db.ColumnMapping.adoc[ColumnMapping]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.ColumnConfig.adoc[ColumnConfig]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.DataSourceConnectionSource.adoc[DataSourceConnectionSource]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.DriverManagerConnectionSource.adoc[DriverManagerConnectionSource]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.FactoryMethodConnectionSource.adoc[FactoryMethodConnectionSource]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender.adoc[JdbcAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.mom.JmsAppender.adoc[JmsAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.mom.jeromq.JeroMqAppender.adoc[JeroMqAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender.adoc[KafkaAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.nosql.NoSqlAppender.adoc[NoSqlAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rewrite.LoggerNameLevelRewritePolicy.adoc[LoggerNameLevelRewritePolicy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy.adoc[MapRewritePolicy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rewrite.PropertiesRewritePolicy.adoc[PropertiesRewritePolicy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rewrite.RewriteAppender.adoc[RewriteAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy.adoc[CompositeTriggeringPolicy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.CronTriggeringPolicy.adoc[CronTriggeringPolicy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy.adoc[DefaultRolloverStrategy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.DirectWriteRolloverStrategy.adoc[DirectWriteRolloverStrategy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.NoOpTriggeringPolicy.adoc[NoOpTriggeringPolicy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.OnStartupTriggeringPolicy.adoc[OnStartupTriggeringPolicy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy.adoc[SizeBasedTriggeringPolicy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy.adoc[TimeBasedTriggeringPolicy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.DeleteAction.adoc[DeleteAction]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.IfAccumulatedFileCount.adoc[IfAccumulatedFileCount]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.IfAccumulatedFileSize.adoc[IfAccumulatedFileSize]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.IfAll.adoc[IfAll]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.IfAny.adoc[IfAny]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.IfFileName.adoc[IfFileName]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.IfLastModified.adoc[IfLastModified]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.IfNot.adoc[IfNot]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.PathSortByModificationTime.adoc[PathSortByModificationTime]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.PosixViewAttributeAction.adoc[PosixViewAttributeAction]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.ScriptCondition.adoc[ScriptCondition]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy.adoc[IdlePurgePolicy]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.routing.Route.adoc[Route]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.routing.Routes.adoc[Routes]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.routing.RoutingAppender.adoc[RoutingAppender]
-* xref:../log4j-core/org.apache.logging.log4j.core.async.ArrayBlockingQueueFactory.adoc[ArrayBlockingQueueFactory]
-* xref:../log4j-core/org.apache.logging.log4j.core.async.AsyncLoggerConfig.adoc[AsyncLoggerConfig]
-* xref:../log4j-core/org.apache.logging.log4j.core.async.AsyncLoggerConfig.RootLogger.adoc[RootLogger]
-* xref:../log4j-core/org.apache.logging.log4j.core.async.AsyncWaitStrategyFactoryConfig.adoc[AsyncWaitStrategyFactoryConfig]
-* xref:../log4j-core/org.apache.logging.log4j.core.async.DisruptorBlockingQueueFactory.adoc[DisruptorBlockingQueueFactory]
-* xref:../log4j-core/org.apache.logging.log4j.core.async.JCToolsBlockingQueueFactory.adoc[JCToolsBlockingQueueFactory]
-* xref:../log4j-core/org.apache.logging.log4j.core.async.LinkedTransferQueueFactory.adoc[LinkedTransferQueueFactory]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.AppenderRef.adoc[AppenderRef]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.AppendersPlugin.adoc[AppendersPlugin]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.CustomLevelConfig.adoc[CustomLevelConfig]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.CustomLevels.adoc[CustomLevels]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.DefaultAdvertiser.adoc[DefaultAdvertiser]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.HttpWatcher.adoc[HttpWatcher]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.adoc[LoggerConfig]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.RootLogger.adoc[RootLogger]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.LoggersPlugin.adoc[LoggersPlugin]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.PropertiesPlugin.adoc[PropertiesPlugin]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.Property.adoc[Property]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.ScriptsPlugin.adoc[ScriptsPlugin]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.arbiters.ClassArbiter.adoc[ClassArbiter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.arbiters.DefaultArbiter.adoc[DefaultArbiter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.arbiters.EnvironmentArbiter.adoc[EnvironmentArbiter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.arbiters.ScriptArbiter.adoc[ScriptArbiter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.arbiters.SelectArbiter.adoc[SelectArbiter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.arbiters.SystemPropertyArbiter.adoc[SystemPropertyArbiter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.json.JsonConfigurationFactory.adoc[JsonConfigurationFactory]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.BigDecimalConverter.adoc[BigDecimalConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.BigIntegerConverter.adoc[BigIntegerConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.BooleanConverter.adoc[BooleanConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.ByteArrayConverter.adoc[ByteArrayConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.ByteConverter.adoc[ByteConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.CharArrayConverter.adoc[CharArrayConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.CharacterConverter.adoc[CharacterConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.CharsetConverter.adoc[CharsetConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.ClassConverter.adoc[ClassConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.CronExpressionConverter.adoc[CronExpressionConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.DoubleConverter.adoc[DoubleConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.DurationConverter.adoc[DurationConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.FileConverter.adoc[FileConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.FloatConverter.adoc[FloatConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.InetAddressConverter.adoc[InetAddressConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.IntegerConverter.adoc[IntegerConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.LevelConverter.adoc[LevelConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.LongConverter.adoc[LongConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.PathConverter.adoc[PathConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.PatternConverter.adoc[PatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.SecurityProviderConverter.adoc[SecurityProviderConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.ShortConverter.adoc[ShortConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.StringConverter.adoc[StringConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.UriConverter.adoc[UriConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.UrlConverter.adoc[UrlConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.plugins.convert.TypeConverters.UuidConverter.adoc[UuidConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory.adoc[PropertiesConfigurationFactory]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory.adoc[XmlConfigurationFactory]
-* xref:../log4j-core/org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory.adoc[YamlConfigurationFactory]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.BurstFilter.adoc[BurstFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.CompositeFilter.adoc[CompositeFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.DenyAllFilter.adoc[DenyAllFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.DynamicThresholdFilter.adoc[DynamicThresholdFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.LevelMatchFilter.adoc[LevelMatchFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.LevelRangeFilter.adoc[LevelRangeFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.MapFilter.adoc[MapFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.MarkerFilter.adoc[MarkerFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.MutableThreadContextMapFilter.adoc[MutableThreadContextMapFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.NoMarkerFilter.adoc[NoMarkerFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.RegexFilter.adoc[RegexFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.ScriptFilter.adoc[ScriptFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.StringMatchFilter.adoc[StringMatchFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.StructuredDataFilter.adoc[StructuredDataFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.ThreadContextMapFilter.adoc[ThreadContextMapFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.ThresholdFilter.adoc[ThresholdFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.filter.TimeFilter.adoc[TimeFilter]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.CsvLogEventLayout.adoc[CsvLogEventLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.CsvParameterLayout.adoc[CsvParameterLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.GelfLayout.adoc[GelfLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.HtmlLayout.adoc[HtmlLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.JsonLayout.adoc[JsonLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.LevelPatternSelector.adoc[LevelPatternSelector]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.LoggerFields.adoc[LoggerFields]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.MarkerPatternSelector.adoc[MarkerPatternSelector]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.MessageLayout.adoc[MessageLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.PatternLayout.adoc[PatternLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.PatternMatch.adoc[PatternMatch]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.Rfc5424Layout.adoc[Rfc5424Layout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.ScriptPatternSelector.adoc[ScriptPatternSelector]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.SerializedLayout.adoc[SerializedLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.SyslogLayout.adoc[SyslogLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.XmlLayout.adoc[XmlLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.layout.YamlLayout.adoc[YamlLayout]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.ContextMapLookup.adoc[ContextMapLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.DateLookup.adoc[DateLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.EnvironmentLookup.adoc[EnvironmentLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.EventLookup.adoc[EventLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.JavaLookup.adoc[JavaLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.JmxRuntimeInputArgumentsLookup.adoc[JmxRuntimeInputArgumentsLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.JndiLookup.adoc[JndiLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.Log4jLookup.adoc[Log4jLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.LowerLookup.adoc[LowerLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.MainMapLookup.adoc[MainMapLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.MapLookup.adoc[MapLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.MarkerLookup.adoc[MarkerLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.ResourceBundleLookup.adoc[ResourceBundleLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.StructuredDataLookup.adoc[StructuredDataLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.SystemPropertiesLookup.adoc[SystemPropertiesLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.lookup.UpperLookup.adoc[UpperLookup]
-* xref:../log4j-core/org.apache.logging.log4j.core.net.MulticastDnsAdvertiser.adoc[MulticastDnsAdvertiser]
-* xref:../log4j-core/org.apache.logging.log4j.core.net.SocketAddress.adoc[SocketAddress]
-* xref:../log4j-core/org.apache.logging.log4j.core.net.SocketOptions.adoc[SocketOptions]
-* xref:../log4j-core/org.apache.logging.log4j.core.net.SocketPerformancePreferences.adoc[SocketPerformancePreferences]
-* xref:../log4j-core/org.apache.logging.log4j.core.net.ssl.KeyStoreConfiguration.adoc[KeyStoreConfiguration]
-* xref:../log4j-core/org.apache.logging.log4j.core.net.ssl.SslConfiguration.adoc[SslConfiguration]
-* xref:../log4j-core/org.apache.logging.log4j.core.net.ssl.TrustStoreConfiguration.adoc[TrustStoreConfiguration]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter.Black.adoc[Black]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter.Blue.adoc[Blue]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter.Cyan.adoc[Cyan]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter.Green.adoc[Green]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter.Magenta.adoc[Magenta]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter.Red.adoc[Red]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter.White.adoc[White]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.AbstractStyleNameConverter.Yellow.adoc[Yellow]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.ClassNamePatternConverter.adoc[ClassNamePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.DatePatternConverter.adoc[DatePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.EncodingPatternConverter.adoc[EncodingPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.EndOfBatchPatternConverter.adoc[EndOfBatchPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.EqualsIgnoreCaseReplacementConverter.adoc[EqualsIgnoreCaseReplacementConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.EqualsReplacementConverter.adoc[EqualsReplacementConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.ExtendedThrowablePatternConverter.adoc[ExtendedThrowablePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.FileDatePatternConverter.adoc[FileDatePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.FileLocationPatternConverter.adoc[FileLocationPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.FullLocationPatternConverter.adoc[FullLocationPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.HighlightConverter.adoc[HighlightConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.IntegerPatternConverter.adoc[IntegerPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.LevelPatternConverter.adoc[LevelPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.LineLocationPatternConverter.adoc[LineLocationPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.LineSeparatorPatternConverter.adoc[LineSeparatorPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.LoggerFqcnPatternConverter.adoc[LoggerFqcnPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.LoggerPatternConverter.adoc[LoggerPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.MapPatternConverter.adoc[MapPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.MarkerPatternConverter.adoc[MarkerPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.MarkerSimpleNamePatternConverter.adoc[MarkerSimpleNamePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.MaxLengthConverter.adoc[MaxLengthConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.MdcPatternConverter.adoc[MdcPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.MessagePatternConverter.adoc[MessagePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.MethodLocationPatternConverter.adoc[MethodLocationPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.NanoTimePatternConverter.adoc[NanoTimePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.NdcPatternConverter.adoc[NdcPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.ProcessIdPatternConverter.adoc[ProcessIdPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.RegexReplacement.adoc[RegexReplacement]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.RegexReplacementConverter.adoc[RegexReplacementConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.RelativeTimePatternConverter.adoc[RelativeTimePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.RepeatPatternConverter.adoc[RepeatPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.RootThrowablePatternConverter.adoc[RootThrowablePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.SequenceNumberPatternConverter.adoc[SequenceNumberPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.StyleConverter.adoc[StyleConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.ThreadIdPatternConverter.adoc[ThreadIdPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.ThreadNamePatternConverter.adoc[ThreadNamePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.ThreadPriorityPatternConverter.adoc[ThreadPriorityPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.ThrowablePatternConverter.adoc[ThrowablePatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.UuidPatternConverter.adoc[UuidPatternConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.pattern.VariablesNotEmptyReplacementConverter.adoc[VariablesNotEmptyReplacementConverter]
-* xref:../log4j-core/org.apache.logging.log4j.core.script.Script.adoc[Script]
-* xref:../log4j-core/org.apache.logging.log4j.core.script.ScriptFile.adoc[ScriptFile]
-* xref:../log4j-core/org.apache.logging.log4j.core.script.ScriptRef.adoc[ScriptRef]
-* xref:../log4j-core/org.apache.logging.log4j.core.util.KeyValuePair.adoc[KeyValuePair]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.adoc[JsonTemplateLayout]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.EventTemplateAdditionalField.adoc[EventTemplateAdditionalField]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.CaseConverterResolverFactory.adoc[CaseConverterResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.CounterResolverFactory.adoc[CounterResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.EndOfBatchResolverFactory.adoc[EndOfBatchResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.EventAdditionalFieldInterceptor.adoc[EventAdditionalFieldInterceptor]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.EventRootObjectKeyInterceptor.adoc[EventRootObjectKeyInterceptor]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.ExceptionResolverFactory.adoc[ExceptionResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.ExceptionRootCauseResolverFactory.adoc[ExceptionRootCauseResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.LevelResolverFactory.adoc[LevelResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.LoggerResolverFactory.adoc[LoggerResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.MainMapResolverFactory.adoc[MainMapResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.MapResolverFactory.adoc[MapResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.MarkerResolverFactory.adoc[MarkerResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.MessageParameterResolverFactory.adoc[MessageParameterResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.MessageResolverFactory.adoc[MessageResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.PatternResolverFactory.adoc[PatternResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.SourceResolverFactory.adoc[SourceResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.ThreadContextDataResolverFactory.adoc[ThreadContextDataResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.ThreadContextStackResolverFactory.adoc[ThreadContextStackResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.ThreadResolverFactory.adoc[ThreadResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.resolver.TimestampResolverFactory.adoc[TimestampResolverFactory]
-* xref:../log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.util.RecyclerFactoryConverter.adoc[RecyclerFactoryConverter]
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Runnable.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Runnable.adoc
deleted file mode 100644
index f772164..0000000
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.lang.Runnable.adoc
+++ /dev/null
@@ -1,29 +0,0 @@
-////
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-////
-[#java_lang_Runnable]
-= Runnable
-
-Class:: `java.lang.Runnable`
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-[#java_lang_Runnable-implementations]
-== Known implementations
-
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.DeleteAction.adoc[DeleteAction]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.PosixViewAttributeAction.adoc[PosixViewAttributeAction]
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy.adoc[IdlePurgePolicy]
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.util.Comparator.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.util.Comparator.adoc
deleted file mode 100644
index 82f5e24..0000000
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/java.util.Comparator.adoc
+++ /dev/null
@@ -1,27 +0,0 @@
-////
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License. You may obtain a copy of the License at
-
- https://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-////
-[#java_util_Comparator]
-= Comparator
-
-Class:: `java.util.Comparator`
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-[#java_util_Comparator-implementations]
-== Known implementations
-
-* xref:../log4j-core/org.apache.logging.log4j.core.appender.rolling.action.PathSortByModificationTime.adoc[PathSortByModificationTime]
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.AsyncAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.AsyncAppender.adoc
index 17f1448..69b89c4 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.AsyncAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.AsyncAppender.adoc
@@ -38,8 +38,8 @@ The AsyncAppender does not allow a filter to be specified on the Appender refere
shutdownTimeout="">
<a-Filter-implementation/>
<a-BlockingQueueFactory-implementation/>
- <AppenderRef/>
- <property/>
+ <AppenderRef/><!-- multiple occurrences allowed -->
+ <property/><!-- multiple occurrences allowed -->
</Async>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.ConsoleAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.ConsoleAppender.adoc
index fffdced..ba22933 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.ConsoleAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.ConsoleAppender.adoc
@@ -43,7 +43,7 @@ OTOH, a Writer cannot print byte streams.
target="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</Console>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.FailoverAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.FailoverAppender.adoc
index 4538717..f8f284b 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.FailoverAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.FailoverAppender.adoc
@@ -78,7 +78,7 @@ Optional components are denoted by `?`-suffixed types.
|Tag|Type|Description
|
-|xref:../scalars.adoc#java_lang_String[String]?
+|String?
a|The name of one or more Appenders to fail over to (at least one is required).
|
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.FileAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.FileAppender.adoc
index 3cb89ba..83d38dd 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.FileAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.FileAppender.adoc
@@ -42,7 +42,7 @@ File Appender.
name="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</File>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.HttpAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.HttpAppender.adoc
index 856f909..a655bdb 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.HttpAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.HttpAppender.adoc
@@ -35,7 +35,7 @@ Sends log events over HTTP.
verifyHostname="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
<Ssl/>
</Http>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.MemoryMappedFileAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.MemoryMappedFileAppender.adoc
index cc7be56..f8acbf2 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.MemoryMappedFileAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.MemoryMappedFileAppender.adoc
@@ -38,7 +38,7 @@ Memory Mapped File Appender.
regionLength="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</MemoryMappedFile>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.OutputStreamAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.OutputStreamAppender.adoc
index bb18838..4a1247a 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.OutputStreamAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.OutputStreamAppender.adoc
@@ -35,7 +35,7 @@ Character encoding is handled within the Layout.
name="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</OutputStream>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RandomAccessFileAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RandomAccessFileAppender.adoc
index 83a7f0e..4f97dee 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RandomAccessFileAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RandomAccessFileAppender.adoc
@@ -37,7 +37,7 @@ File Appender.
name="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</RandomAccessFile>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RollingFileAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RollingFileAppender.adoc
index 71b80c4..1cdc4c5 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RollingFileAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RollingFileAppender.adoc
@@ -45,7 +45,7 @@ An appender that writes to files and can roll over at intervals.
<a-Layout-implementation/>
<a-RolloverStrategy-implementation/>
<a-TriggeringPolicy-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</RollingFile>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.adoc
index cbd5ec2..2b9254d 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender.adoc
@@ -43,7 +43,7 @@ An appender that writes to random access files and can roll over at intervals.
<a-Layout-implementation/>
<a-RolloverStrategy-implementation/>
<a-TriggeringPolicy-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</RollingRandomAccessFile>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.SmtpAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.SmtpAppender.adoc
index d8d5013..7547a99 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.SmtpAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.SmtpAppender.adoc
@@ -51,7 +51,7 @@ This can be modified by setting a filter for the appender.
to="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
<Ssl/>
</SMTP>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.SyslogAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.SyslogAppender.adoc
index 1c55d91..32282cb 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.SyslogAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.SyslogAppender.adoc
@@ -57,8 +57,8 @@ The Syslog Appender.
reconnectDelayMillis="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
- <LoggerFields/>
+ <property/><!-- multiple occurrences allowed -->
+ <LoggerFields/><!-- multiple occurrences allowed -->
<SocketOptions/>
<Ssl/>
</Syslog>
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.WriterAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.WriterAppender.adoc
index bb96aed..1163cb8 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.WriterAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.WriterAppender.adoc
@@ -30,7 +30,7 @@ Appends log events to a xref:Writer.adoc[].
name="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</Writer>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.DriverManagerConnectionSource.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.DriverManagerConnectionSource.adoc
index 9043d7c..3829c16 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.DriverManagerConnectionSource.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.DriverManagerConnectionSource.adoc
@@ -33,7 +33,7 @@ This handy to get you off the ground without having to deal with JNDI.
driverClassName=""
password=""
userName="">
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</DriverManager>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender.adoc
index 9ce1bcf..e907f33 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.db.jdbc.JdbcAppender.adoc
@@ -39,10 +39,10 @@ This appender can be reconfigured at run time.
truncateStrings="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <ColumnMapping/>
- <Column/>
+ <ColumnMapping/><!-- multiple occurrences allowed -->
+ <Column/><!-- multiple occurrences allowed -->
<a-ConnectionSource-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</JDBC>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.JmsAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.JmsAppender.adoc
index 14d9a8b..fb80540 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.JmsAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.JmsAppender.adoc
@@ -44,7 +44,7 @@ However, configurations set up for the 2.0 version of the JMS appenders will sti
userName="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</JMS>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.jeromq.JeroMqAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.jeromq.JeroMqAppender.adoc
index 56b3632..e75e308 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.jeromq.JeroMqAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.jeromq.JeroMqAppender.adoc
@@ -52,7 +52,7 @@ Requires the JeroMQ jar (LGPL as of 0.3.5)
xpubVerbose="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</JeroMQ>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender.adoc
index 4cdbe1f..c9f3619 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender.adoc
@@ -35,7 +35,7 @@ Sends log events to an Apache Kafka topic.
topic="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
</Kafka>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.nosql.NoSqlAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.nosql.NoSqlAppender.adoc
index 386accc..c6ef992 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.nosql.NoSqlAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.nosql.NoSqlAppender.adoc
@@ -35,8 +35,9 @@ For examples on how to write your own NoSQL provider, see the simple source code
name="">
<a-Filter-implementation/>
<a-Layout-implementation/>
- <property/>
- <KeyValuePair/>
+ <a-NoSqlProvider-implementation/>
+ <property/><!-- multiple occurrences allowed -->
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</NoSql>
----
@@ -75,6 +76,10 @@ Optional components are denoted by `?`-suffixed types.
|===
|Tag|Type|Description
+|
+|NoSqlProvider?
+a|Sets the provider.
+
|property
|xref:../log4j-core/org.apache.logging.log4j.core.config.Property.adoc[Property]?
a|
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.LoggerNameLevelRewritePolicy.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.LoggerNameLevelRewritePolicy.adoc
index a7c9c52..85c1b1e 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.LoggerNameLevelRewritePolicy.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.LoggerNameLevelRewritePolicy.adoc
@@ -27,7 +27,7 @@ Rewrites log event levels for a given logger name.
[source, xml]
----
<LoggerNameLevelRewritePolicy logger="">
- <KeyValuePair/>
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</LoggerNameLevelRewritePolicy>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy.adoc
index 99fb595..b7ba735 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy.adoc
@@ -27,7 +27,7 @@ This policy modifies events by replacing or possibly adding keys and values to t
[source, xml]
----
<MapRewritePolicy mode="">
- <KeyValuePair/>
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</MapRewritePolicy>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.RewriteAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.RewriteAppender.adoc
index 1e5cb5b..aeaf8fe 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.RewriteAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.rewrite.RewriteAppender.adoc
@@ -30,7 +30,7 @@ This Appender allows the logging event to be manipulated before it is processed
name="">
<a-Filter-implementation/>
<a-RewritePolicy-implementation/>
- <AppenderRef/>
+ <AppenderRef/><!-- multiple occurrences allowed -->
</Rewrite>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.routing.Routes.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.routing.Routes.adoc
index 5bf592a..39129b3 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.routing.Routes.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.routing.Routes.adoc
@@ -27,7 +27,7 @@ Contains the individual Route elements.
[source, xml]
----
<Routes pattern="">
- <Route/>
+ <Route/><!-- multiple occurrences allowed -->
<a-AbstractScript-implementation/>
</Routes>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.routing.RoutingAppender.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.routing.RoutingAppender.adoc
index 9eb8900..49db4b3 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.routing.RoutingAppender.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.appender.routing.RoutingAppender.adoc
@@ -36,7 +36,7 @@ The pattern should contain one or more substitution patterns of the form "$${[ke
<a-RewritePolicy-implementation/>
<a-PurgePolicy-implementation/>
<Routes/>
- <property/>
+ <property/><!-- multiple occurrences allowed -->
<a-AbstractScript-implementation/>
</Routing>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.async.AsyncLoggerConfig.RootLogger.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.async.AsyncLoggerConfig.RootLogger.adoc
index 5fc0150..2846c5d 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.async.AsyncLoggerConfig.RootLogger.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.async.AsyncLoggerConfig.RootLogger.adoc
@@ -31,8 +31,8 @@ An asynchronous root Logger.
level=""
levelAndRefs="">
<a-Filter-implementation/>
- <AppenderRef/>
- <property/>
+ <AppenderRef/><!-- multiple occurrences allowed -->
+ <property/><!-- multiple occurrences allowed -->
</asyncRoot>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.async.AsyncLoggerConfig.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.async.AsyncLoggerConfig.adoc
index e7a0138..3ea4404 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.async.AsyncLoggerConfig.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.async.AsyncLoggerConfig.adoc
@@ -47,8 +47,8 @@ This means that even with immediateFlush=false, there will never be any items le
levelAndRefs=""
name="">
<a-Filter-implementation/>
- <AppenderRef/>
- <property/>
+ <AppenderRef/><!-- multiple occurrences allowed -->
+ <property/><!-- multiple occurrences allowed -->
</asyncLogger>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.RootLogger.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.RootLogger.adoc
index 0de3090..8b9cc01 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.RootLogger.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.config.LoggerConfig.RootLogger.adoc
@@ -31,8 +31,8 @@ The root Logger.
level=""
levelAndRefs="">
<a-Filter-implementation/>
- <AppenderRef/>
- <property/>
+ <AppenderRef/><!-- multiple occurrences allowed -->
+ <property/><!-- multiple occurrences allowed -->
</root>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.DynamicThresholdFilter.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.DynamicThresholdFilter.adoc
index b10f0af..eca4716 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.DynamicThresholdFilter.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.DynamicThresholdFilter.adoc
@@ -32,7 +32,7 @@ By default the context is the xref:ThreadContext.adoc[], but users may xref:Cont
key=""
onMatch=""
onMismatch="">
- <KeyValuePair/>
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</DynamicThresholdFilter>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.RegexFilter.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.RegexFilter.adoc
index 00e34eb..1b5423b 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.RegexFilter.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.RegexFilter.adoc
@@ -79,7 +79,7 @@ Optional components are denoted by `?`-suffixed types.
|Tag|Type|Description
|
-|xref:../scalars.adoc#java_lang_String[String]?
+|String?
a|An array of Strings where each String is a xref:Pattern.adoc[] compilation flag.
|===
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.StructuredDataFilter.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.StructuredDataFilter.adoc
index 9fda2b8..1e5e1d7 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.StructuredDataFilter.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.StructuredDataFilter.adoc
@@ -29,7 +29,7 @@ Filter based on data in a StructuredDataMessage.
<StructuredDataFilter onMatch=""
onMismatch=""
operator="">
- <KeyValuePair/>
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</StructuredDataFilter>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.ThreadContextMapFilter.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.ThreadContextMapFilter.adoc
index 439841f..fd81028 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.ThreadContextMapFilter.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.filter.ThreadContextMapFilter.adoc
@@ -29,7 +29,7 @@ Filter based on a value in the Thread Context Map (MDC).
<ThreadContextMapFilter onMatch=""
onMismatch=""
operator="">
- <KeyValuePair/>
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</ThreadContextMapFilter>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.GelfLayout.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.GelfLayout.adoc
index 1d39b31..974166e 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.GelfLayout.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.GelfLayout.adoc
@@ -47,8 +47,9 @@ This layout compresses JSON to GZIP or ZLIB (the `compressionType`) if log event
threadContextExcludes=""
threadContextIncludes=""
threadContextPrefix="">
+ <a-Serializer-implementation/>
<a-PatternSelector-implementation/>
- <KeyValuePair/>
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</GelfLayout>
----
@@ -171,6 +172,10 @@ Optional components are denoted by `?`-suffixed types.
|===
|Tag|Type|Description
+|
+|Serializer?
+a|
+
|
|xref:../log4j-core/org.apache.logging.log4j.core.layout.PatternSelector.adoc[PatternSelector]?
a|The PatternSelector to use to format the message.
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.JsonLayout.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.JsonLayout.adoc
index 093c590..c890062 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.JsonLayout.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.JsonLayout.adoc
@@ -61,7 +61,8 @@ Supports Lookup expressions.
properties=""
propertiesAsList=""
stacktraceAsString="">
- <KeyValuePair/>
+ <a-Serializer-implementation/>
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</JsonLayout>
----
@@ -162,6 +163,10 @@ Optional components are denoted by `?`-suffixed types.
|===
|Tag|Type|Description
+|
+|Serializer?
+a|
+
|KeyValuePair
|xref:../log4j-core/org.apache.logging.log4j.core.util.KeyValuePair.adoc[KeyValuePair]?
a|Additional fields to set on each log event.
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.LevelPatternSelector.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.LevelPatternSelector.adoc
index ecc588c..be39f07 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.LevelPatternSelector.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.LevelPatternSelector.adoc
@@ -30,7 +30,7 @@ Selects the pattern to use based on the Level in the LogEvent.
defaultPattern=""
disableAnsi=""
noConsoleNoAnsi="">
- <PatternMatch/>
+ <PatternMatch/><!-- multiple occurrences allowed -->
</LevelPatternSelector>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.LoggerFields.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.LoggerFields.adoc
index 2d9ad9c..8ee04d3 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.LoggerFields.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.LoggerFields.adoc
@@ -29,7 +29,7 @@ A LoggerFields container.
<LoggerFields discardIfAllFieldsAreEmpty=""
enterpriseId=""
sdId="">
- <KeyValuePair/>
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</LoggerFields>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.MarkerPatternSelector.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.MarkerPatternSelector.adoc
index 3a0791b..73a1f85 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.MarkerPatternSelector.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.MarkerPatternSelector.adoc
@@ -30,7 +30,7 @@ Selects the pattern to use based on the Marker in the LogEvent.
defaultPattern=""
disableAnsi=""
noConsoleNoAnsi="">
- <PatternMatch/>
+ <PatternMatch/><!-- multiple occurrences allowed -->
</MarkerPatternSelector>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.Rfc5424Layout.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.Rfc5424Layout.adoc
index 600b715..bd75a8d 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.Rfc5424Layout.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.Rfc5424Layout.adoc
@@ -42,7 +42,7 @@ Formats a log event in accordance with RFC 5424.
newLine=""
newLineEscape=""
useTlsMessageFormat="">
- <LoggerFields/>
+ <LoggerFields/><!-- multiple occurrences allowed -->
</Rfc5424Layout>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.ScriptPatternSelector.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.ScriptPatternSelector.adoc
index 37ea7dc..70e21e9 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.ScriptPatternSelector.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.ScriptPatternSelector.adoc
@@ -33,7 +33,7 @@ If no key is returned or there is no match the default pattern will be used.
defaultPattern=""
disableAnsi=""
noConsoleNoAnsi="">
- <PatternMatch/>
+ <PatternMatch/><!-- multiple occurrences allowed -->
<a-AbstractScript-implementation/>
</ScriptPatternSelector>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.SyslogLayout.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.SyslogLayout.adoc
index b144c95..098d635 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.SyslogLayout.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.SyslogLayout.adoc
@@ -32,6 +32,7 @@ Formats a log event as a BSD Log record.
header=""
newLine=""
newLineEscape="">
+ <a-Serializer-implementation/>
</SyslogLayout>
----
@@ -85,4 +86,8 @@ Optional components are denoted by `?`-suffixed types.
|===
|Tag|Type|Description
+|
+|Serializer?
+a|
+
|===
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.XmlLayout.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.XmlLayout.adoc
index abb6860..1d96eb4 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.XmlLayout.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.XmlLayout.adoc
@@ -56,7 +56,8 @@ Supports Lookup expressions.
locationInfo=""
properties=""
stacktraceAsString="">
- <KeyValuePair/>
+ <a-Serializer-implementation/>
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</XmlLayout>
----
@@ -147,6 +148,10 @@ Optional components are denoted by `?`-suffixed types.
|===
|Tag|Type|Description
+|
+|Serializer?
+a|
+
|KeyValuePair
|xref:../log4j-core/org.apache.logging.log4j.core.util.KeyValuePair.adoc[KeyValuePair]?
a|Additional fields to set on each log event.
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.YamlLayout.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.YamlLayout.adoc
index 55e7f46..b9cb010 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.YamlLayout.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-core/org.apache.logging.log4j.core.layout.YamlLayout.adoc
@@ -47,7 +47,8 @@ Supports Lookup expressions.
locationInfo=""
properties=""
stacktraceAsString="">
- <KeyValuePair/>
+ <a-Serializer-implementation/>
+ <KeyValuePair/><!-- multiple occurrences allowed -->
</YamlLayout>
----
@@ -138,6 +139,10 @@ Optional components are denoted by `?`-suffixed types.
|===
|Tag|Type|Description
+|
+|Serializer?
+a|
+
|KeyValuePair
|xref:../log4j-core/org.apache.logging.log4j.core.util.KeyValuePair.adoc[KeyValuePair]?
a|Additional fields to set on each log event.
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.adoc
index a187336..8095fee 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/org.apache.logging.log4j/log4j-layout-template-json/org.apache.logging.log4j.layout.template.json.JsonTemplateLayout.adoc
@@ -39,7 +39,7 @@ Provider:: `org.apache.logging.log4j:log4j-layout-template-json`
stackTraceElementTemplateUri=""
stackTraceEnabled=""
truncatedStringSuffix="">
- <EventTemplateAdditionalField/>
+ <EventTemplateAdditionalField/><!-- multiple occurrences allowed -->
</JsonTemplateLayout>
----
diff --git a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/scalars.adoc b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/scalars.adoc
index d07785c..f9e2130 100644
--- a/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/scalars.adoc
+++ b/log4j-docgen/src/test/resources/plugins-with-dependency/freemarker-output/scalars.adoc
@@ -19,24 +19,6 @@ limitations under the License.
Type converter plugins are used to convert simple `String` values into other types.
-[#boolean]
-== `boolean`
-
-
-A boolean value
-
-[#boolean-values]
-=== Possible values
-
-`false`:: false
-`true`:: true
-
-[#byte]
-== `byte`
-
-
-An 8-bit signed integer from `-128` to `127`
-
[#com_conversantmedia_util_concurrent_SpinPolicy]
== `com.conversantmedia.util.concurrent.SpinPolicy`
@@ -51,71 +33,6 @@ Provider:: `org.apache.logging.log4j:log4j-core`
`BLOCKING`::
`SPINNING`::
-[#double]
-== `double`
-
-
-A double precision floating number from `4.94065645841246544e-324` to `1.79769313486231570e+308`
-
-[#float]
-== `float`
-
-
-A single precision floating number from `1.40239846e-45` to `3.40282347e+38`
-
-[#int]
-== `int`
-
-
-A 32-bit signed integer from `-2147483648` to `2147483647`
-
-[#java_lang_Class]
-== `java.lang.Class`
-
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-
-[#java_lang_String]
-== `java.lang.String`
-
-
-A string of characters
-
-[#java_net_InetAddress]
-== `java.net.InetAddress`
-
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-
-[#java_net_URL]
-== `java.net.URL`
-
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-
-[#java_nio_charset_Charset]
-== `java.nio.charset.Charset`
-
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-
-[#java_util_regex_Pattern]
-== `java.util.regex.Pattern`
-
-Provider:: `org.apache.logging.log4j:log4j-core`
-
-
-
-[#long]
-== `long`
-
-
-A 64-bit signed integer from `-9223372036854775808` to `9223372036854775807`
-
[#org_apache_commons_csv_QuoteMode]
== `org.apache.commons.csv.QuoteMode`
@@ -413,9 +330,3 @@ Provider:: `org.apache.logging.log4j:log4j-layout-template-json`
Provider:: `org.apache.logging.log4j:log4j-layout-template-json`
-
-[#short]
-== `short`
-
-
-A 16-bit signed integer from `-32768` to `32767`
diff --git a/log4j-docgen/src/test/resources/templates/plugin.adoc.ftl b/log4j-docgen/src/test/resources/templates/plugin.adoc.ftl
index 18d1249..d5cf4d5 100644
--- a/log4j-docgen/src/test/resources/templates/plugin.adoc.ftl
+++ b/log4j-docgen/src/test/resources/templates/plugin.adoc.ftl
@@ -27,7 +27,7 @@ Class:: `${type.className}`
<#if sourcedType.groupId?has_content && sourcedType.artifactId?has_content>
Provider:: `${sourcedType.groupId}:${sourcedType.artifactId}`
-</#if>${(type.description.text)!''}
+</#if>${(type.description.text)!}
[#${type.className?replace('.', '_')}-XML-snippet]
== XML snippet
@@ -48,16 +48,16 @@ ${indent}${attr.name}="${attr.defaultValue!}"${attr?is_last?then(has_elements?th
</#list>
<#if has_elements>
<#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>
- <#-- @ftlvariable name="element_type" type="org.apache.logging.log4j.docgen.model.PluginType" -->
- <${element_type.name}/>
- <#else>
- <a-${element.type?keep_after_last('.')}-implementation/><#if element.multiplicity == '*'><!-- multiple occurrences allowed --></#if>
+ <#assign elementName = element_type.name/>
</#if>
</#if>
+ <${elementName}/>${multiplicitySuffix}
</#list>
</${type.name}>
</#if>
@@ -79,7 +79,7 @@ Optional attributes are denoted by `?`-suffixed types.
|${attr.name}
|xref:../../scalars.adoc#${attr.type?replace('.', '_')}[${attr.type?contains('.')?then(attr.type?keep_after_last('.'), attr.type)}]${requirementSuffix}
|${attr.defaultValue!}
-a|${(attr.description.text)!''}
+a|${(attr.description.text)!}
</#list>
|===
@@ -96,30 +96,34 @@ Optional components are denoted by `?`-suffixed types.
|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 elementType = elementSourcedType.type/>
- <#assign linkName = element.type?contains('.')?then(element.type?keep_after_last('.'), element.type)/>
- <#assign requirementSuffix = element.required?then('', '?')/>
- <#assign tagCell = elementType.name!''/>
- <#assign descriptionCell = (element.description.text)!''/>
+ <#assign tagCell = elementType.name!/>
<#switch elementType.class.simpleName>
<#case 'PluginType'>
<#case 'AbstractType'>
|${tagCell}
-|xref:../${elementSourcedType.artifactId}/${element.type}.adoc[${linkName}]${requirementSuffix}
+|xref:../${elementSourcedType.artifactId}/${element.type}.adoc[${elementName}]${requirementSuffix}
a|${descriptionCell}
<#break>
<#case 'ScalarType'>
|${tagCell}
-|xref:../scalars.adoc#${element.type?replace('.', '_')}[${linkName}]${requirementSuffix}
+|xref:../scalars.adoc#${element.type?replace('.', '_')}[${elementName}]${requirementSuffix}
a|${descriptionCell}
<#break>
<#default>
<#stop 'Unknown type `' + element.type + '` modelled in class `' + elementType.class.name + '`'/>
</#switch>
-
+ <#else>
+|
+|${elementName}${requirementSuffix}
+a|${descriptionCell}
</#if>
+
</#list>
|===
</#if>
diff --git a/log4j-docgen/src/test/resources/templates/scalars.adoc.ftl b/log4j-docgen/src/test/resources/templates/scalars.adoc.ftl
index 150dbc6..9b5edb9 100644
--- a/log4j-docgen/src/test/resources/templates/scalars.adoc.ftl
+++ b/log4j-docgen/src/test/resources/templates/scalars.adoc.ftl
@@ -32,14 +32,14 @@ Type converter plugins are used to convert simple `String` values into other typ
Provider:: `${sourcedType.groupId}:${sourcedType.artifactId}`
</#if>
-${(scalar.description.text)!''}
+${(scalar.description.text)!}
<#if scalar.values?size != 0>
[#${scalar.className?replace('.', '_')}-values]
=== Possible values
<#list scalar.values as value>
-`${value.name}`:: ${(value.description.text)!''}
+`${value.name}`:: ${(value.description.text)!}
</#list>
</#if>
</#list>
diff --git a/log4j-tools-internal-test-util/src/main/java/org/apache/logging/log4j/tools/internal/test/util/FileTestUtils.java b/log4j-tools-internal-test-util/src/main/java/org/apache/logging/log4j/tools/internal/test/util/FileTestUtils.java
index 5229526..49d9dd6 100644
--- a/log4j-tools-internal-test-util/src/main/java/org/apache/logging/log4j/tools/internal/test/util/FileTestUtils.java
+++ b/log4j-tools-internal-test-util/src/main/java/org/apache/logging/log4j/tools/internal/test/util/FileTestUtils.java
@@ -28,6 +28,7 @@ import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.assertj.core.api.SoftAssertions;
public final class FileTestUtils {
@@ -42,13 +43,15 @@ public final class FileTestUtils {
assertThat(actualContents).containsOnlyKeys(relativeFilePaths);
// Compare file contents
+ final SoftAssertions assertions = new SoftAssertions();
relativeFilePaths.forEach(relativeFilePath -> {
final Path actualFilePath = actualContents.get(relativeFilePath);
final Path expectedFilePath = expectedContents.get(relativeFilePath);
if (!Files.isDirectory(actualFilePath) || !Files.isDirectory(expectedFilePath)) {
- assertThat(actualFilePath).hasSameTextualContentAs(expectedFilePath);
+ assertions.assertThat(actualFilePath).hasSameTextualContentAs(expectedFilePath);
}
});
+ assertions.assertAll();
}
private static Map<String, Path> directoryContents(final Path root) {