You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2022/03/30 05:16:55 UTC
[logging-log4j2] 02/03: Make Log4j Builder plugins injectable
This is an automated email from the ASF dual-hosted git repository.
mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 74922b37772e6e5f0228517ecdbb944debf2ffea
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Wed Mar 30 00:15:18 2022 -0500
Make Log4j Builder plugins injectable
This updates Log4j1 builder plugins to use DI.
Signed-off-by: Matt Sicker <ma...@apache.org>
---
.../org/apache/log4j/builders/BuilderManager.java | 64 ++++++++++------------
.../apache/log4j/config/Log4j1Configuration.java | 3 +-
2 files changed, 30 insertions(+), 37 deletions(-)
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java
index c331c46..6672c8e 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java
@@ -16,11 +16,6 @@
*/
package org.apache.log4j.builders;
-import java.lang.reflect.Constructor;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Properties;
-
import org.apache.log4j.Appender;
import org.apache.log4j.Layout;
import org.apache.log4j.builders.appender.AppenderBuilder;
@@ -32,36 +27,43 @@ import org.apache.log4j.rewrite.RewritePolicy;
import org.apache.log4j.spi.Filter;
import org.apache.log4j.xml.XmlConfiguration;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.plugins.Named;
+import org.apache.logging.log4j.plugins.di.Injector;
+import org.apache.logging.log4j.plugins.di.Key;
+import org.apache.logging.log4j.plugins.util.PluginManager;
import org.apache.logging.log4j.plugins.util.PluginType;
-import org.apache.logging.log4j.plugins.util.PluginUtil;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.LoaderUtil;
import org.w3c.dom.Element;
+import java.lang.reflect.Constructor;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Properties;
+
/**
*
*/
public class BuilderManager {
public static final String CATEGORY = "Log4j Builder";
+ public static final Key<PluginManager> PLUGIN_MANAGER_KEY = new @Named(CATEGORY) Key<>() {};
private static final Logger LOGGER = StatusLogger.getLogger();
private static final Class<?>[] CONSTRUCTOR_PARAMS = new Class[] { String.class, Properties.class };
+ private final Injector injector;
private final Map<String, PluginType<?>> plugins;
- public BuilderManager() {
- plugins = PluginUtil.collectPluginsByCategory(CATEGORY);
+ public BuilderManager(final Injector injector) {
+ this.injector = injector;
+ plugins = injector.getInstance(PLUGIN_MANAGER_KEY).getPlugins();
}
public Appender parseAppender(String className, Element appenderElement, XmlConfiguration config) {
PluginType<?> plugin = plugins.get(className.toLowerCase());
if (plugin != null) {
- try {
- @SuppressWarnings("unchecked")
- AppenderBuilder builder = (AppenderBuilder) LoaderUtil.newInstanceOf(plugin.getPluginClass());
- return builder.parseAppender(appenderElement, config);
- } catch (ReflectiveOperationException ex) {
- LOGGER.warn("Unable to load plugin: {} due to: {}", plugin.getKey(), ex.getMessage());
- }
+ final Class<? extends AppenderBuilder> pluginClass = plugin.getPluginClass().asSubclass(AppenderBuilder.class);
+ final AppenderBuilder builder = injector.getInstance(pluginClass);
+ return builder.parseAppender(appenderElement, config);
}
return null;
}
@@ -83,13 +85,9 @@ public class BuilderManager {
public Filter parseFilter(String className, Element filterElement, XmlConfiguration config) {
PluginType<?> plugin = plugins.get(className.toLowerCase());
if (plugin != null) {
- try {
- @SuppressWarnings("unchecked")
- FilterBuilder builder = (FilterBuilder) LoaderUtil.newInstanceOf(plugin.getPluginClass());
- return builder.parseFilter(filterElement, config);
- } catch (ReflectiveOperationException ex) {
- LOGGER.warn("Unable to load plugin: {} due to: {}", plugin.getKey(), ex.getMessage());
- }
+ final Class<? extends FilterBuilder> pluginClass = plugin.getPluginClass().asSubclass(FilterBuilder.class);
+ final FilterBuilder builder = injector.getInstance(pluginClass);
+ return builder.parseFilter(filterElement, config);
}
return null;
}
@@ -108,16 +106,13 @@ public class BuilderManager {
public Layout parseLayout(String className, Element layoutElement, XmlConfiguration config) {
PluginType<?> plugin = plugins.get(className.toLowerCase());
if (plugin != null) {
- try {
- @SuppressWarnings("unchecked")
- LayoutBuilder builder = (LayoutBuilder) LoaderUtil.newInstanceOf(plugin.getPluginClass());
- return builder.parseLayout(layoutElement, config);
- } catch (ReflectiveOperationException ex) {
- LOGGER.warn("Unable to load plugin: {} due to: {}", plugin.getKey(), ex.getMessage());
- }
+ final Class<? extends LayoutBuilder> pluginClass = plugin.getPluginClass().asSubclass(LayoutBuilder.class);
+ final LayoutBuilder builder = injector.getInstance(pluginClass);
+ return builder.parseLayout(layoutElement, config);
}
return null;
}
+
public Layout parseLayout(String className, String layoutPrefix, Properties props, PropertiesConfiguration config) {
PluginType<?> plugin = plugins.get(className.toLowerCase());
if (plugin != null) {
@@ -132,16 +127,13 @@ public class BuilderManager {
public RewritePolicy parseRewritePolicy(String className, Element rewriteElement, XmlConfiguration config) {
PluginType<?> plugin = plugins.get(className.toLowerCase());
if (plugin != null) {
- try {
- @SuppressWarnings("unchecked")
- RewritePolicyBuilder builder = (RewritePolicyBuilder) LoaderUtil.newInstanceOf(plugin.getPluginClass());
- return builder.parseRewritePolicy(rewriteElement, config);
- } catch (ReflectiveOperationException ex) {
- LOGGER.warn("Unable to load plugin: {} due to: {}", plugin.getKey(), ex.getMessage());
- }
+ final Class<? extends RewritePolicyBuilder> pluginClass = plugin.getPluginClass().asSubclass(RewritePolicyBuilder.class);
+ final RewritePolicyBuilder builder = injector.getInstance(pluginClass);
+ return builder.parseRewritePolicy(rewriteElement, config);
}
return null;
}
+
public RewritePolicy parseRewritePolicy(String className, String policyPrefix, Properties props, PropertiesConfiguration config) {
PluginType<?> plugin = plugins.get(className.toLowerCase());
if (plugin != null) {
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1Configuration.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1Configuration.java
index d97ff90..7d999bd 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1Configuration.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1Configuration.java
@@ -36,12 +36,13 @@ public class Log4j1Configuration extends AbstractConfiguration implements Reconf
public static final String NULL = "null";
- protected final BuilderManager manager = new BuilderManager();
+ protected final BuilderManager manager;
public Log4j1Configuration(final LoggerContext loggerContext, final ConfigurationSource configurationSource,
int monitorIntervalSeconds) {
super(loggerContext, configurationSource);
initializeWatchers(this, configurationSource, monitorIntervalSeconds);
+ manager = new BuilderManager(injector);
}
public BuilderManager getBuilderManager() {