You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2022/03/30 21:37:59 UTC

[logging-log4j2] 09/15: Internal refactoring.

This is an automated email from the ASF dual-hosted git repository.

pkarwasz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 1c5b7ef60e8aec10c387ef836ea55377b51ee729
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun Feb 20 11:18:53 2022 -0500

    Internal refactoring.
---
 .../org/apache/log4j/builders/BuilderManager.java  | 125 +++++++++------------
 1 file changed, 56 insertions(+), 69 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 2c22216..21a911a 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
@@ -20,6 +20,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Properties;
+import java.util.function.Function;
 
 import org.apache.log4j.Appender;
 import org.apache.log4j.Layout;
@@ -59,121 +60,107 @@ public class BuilderManager {
     }
 
     @SuppressWarnings("unchecked")
-    private <T extends Builder> T createBuilder(PluginType<T> plugin, String prefix, Properties props) {
+    private <T extends Builder> T createBuilder(final PluginType<T> plugin, final String prefix, final Properties props) {
+        if (plugin == null) {
+            return null;
+        }
         try {
-            Class<T> clazz = plugin.getPluginClass();
+            final Class<T> clazz = plugin.getPluginClass();
             if (AbstractBuilder.class.isAssignableFrom(clazz)) {
                 return clazz.getConstructor(CONSTRUCTOR_PARAMS).newInstance(prefix, props);
             }
-            Object builder = LoaderUtil.newInstanceOf(clazz);
+            final Object builder = LoaderUtil.newInstanceOf(clazz);
             // Reasonable message instead of `ClassCastException`
             if (!Builder.class.isAssignableFrom(clazz)) {
                 LOGGER.warn("Unable to load plugin: builder {} does not implement {}", clazz, Builder.class);
                 return null;
             }
             return (T) builder;
-        } catch (ReflectiveOperationException ex) {
+        } catch (final ReflectiveOperationException ex) {
             LOGGER.warn("Unable to load plugin: {} due to: {}", plugin.getKey(), ex.getMessage());
             return null;
         }
     }
 
     @SuppressWarnings("unchecked")
-    private <T> PluginType<T> getPlugin(String className) {
+    private <T> PluginType<T> getPlugin(final String className) {
         Objects.requireNonNull(plugins, "plugins");
         Objects.requireNonNull(className, "className");
-        return (PluginType<T>) plugins.get(className.toLowerCase(Locale.ROOT).trim());
+        final String key = className.toLowerCase(Locale.ROOT).trim();
+        final PluginType<?> pluginType = plugins.get(key);
+        if (pluginType == null) {
+            LOGGER.warn("Unable to load plugin class name {} with key {}", className, key);
+        }
+        return (PluginType<T>) pluginType;
     }
 
-    public Appender parseAppender(String className, Element appenderElement, XmlConfiguration config) {
-        PluginType<AppenderBuilder> plugin = getPlugin(className);
+    private <T extends Builder, U> U newInstance(final PluginType<T> plugin, final Function<T, U> consumer) {
         if (plugin != null) {
             try {
-                return LoaderUtil.newInstanceOf(plugin.getPluginClass()).parseAppender(appenderElement, config);
-            } catch (ReflectiveOperationException ex) {
+                final T builder = LoaderUtil.newInstanceOf(plugin.getPluginClass());
+                if (builder != null) {
+                    return consumer.apply(builder);
+                }
+            } catch (final ReflectiveOperationException ex) {
                 LOGGER.warn("Unable to load plugin: {} due to: {}", plugin.getKey(), ex.getMessage());
             }
         }
         return null;
     }
 
-    public Appender parseAppender(String name, String className, String prefix, String layoutPrefix, String filterPrefix, Properties props,
-        PropertiesConfiguration config) {
-        PluginType<AppenderBuilder> plugin = getPlugin(className);
-        if (plugin != null) {
-            AppenderBuilder builder = createBuilder(plugin, prefix, props);
-            if (builder != null) {
-                return builder.parseAppender(name, prefix, layoutPrefix, filterPrefix, props, config);
-            }
-        }
-        return null;
+    public Appender parseAppender(final String className, final Element appenderElement, final XmlConfiguration config) {
+        final PluginType<AppenderBuilder> plugin = getPlugin(className);
+        return newInstance(plugin, b -> b.parseAppender(appenderElement, config));
     }
 
-    public Filter parseFilter(String className, Element filterElement, XmlConfiguration config) {
-        PluginType<FilterBuilder> plugin = getPlugin(className);
-        if (plugin != null) {
-            try {
-                return LoaderUtil.newInstanceOf(plugin.getPluginClass()).parseFilter(filterElement, config);
-            } catch (ReflectiveOperationException ex) {
-                LOGGER.warn("Unable to load plugin: {} due to: {}", plugin.getKey(), ex.getMessage());
-            }
+    public Appender parseAppender(final String name, final String className, final String prefix, final String layoutPrefix, final String filterPrefix, final Properties props,
+        final PropertiesConfiguration config) {
+        final PluginType<AppenderBuilder> plugin = getPlugin(className);
+        final AppenderBuilder builder = createBuilder(plugin, prefix, props);
+        if (builder != null) {
+            return builder.parseAppender(name, prefix, layoutPrefix, filterPrefix, props, config);
         }
         return null;
     }
 
-    public Filter parseFilter(String className, String filterPrefix, Properties props, PropertiesConfiguration config) {
-        PluginType<FilterBuilder> plugin = getPlugin(className);
-        if (plugin != null) {
-            FilterBuilder builder = createBuilder(plugin, filterPrefix, props);
-            if (builder != null) {
-                return builder.parseFilter(config);
-            }
-        }
-        return null;
+    public Filter parseFilter(final String className, final Element filterElement, final XmlConfiguration config) {
+        final PluginType<FilterBuilder> plugin = getPlugin(className);
+        return newInstance(plugin, b -> b.parseFilter(filterElement, config));
     }
 
-    public Layout parseLayout(String className, Element layoutElement, XmlConfiguration config) {
-        PluginType<LayoutBuilder> plugin = getPlugin(className);
-        if (plugin != null) {
-            try {
-                return LoaderUtil.newInstanceOf(plugin.getPluginClass()).parseLayout(layoutElement, config);
-            } catch (ReflectiveOperationException ex) {
-                LOGGER.warn("Unable to load plugin: {} due to: {}", plugin.getKey(), ex.getMessage());
-            }
+    public Filter parseFilter(final String className, final String filterPrefix, final Properties props, final PropertiesConfiguration config) {
+        final PluginType<FilterBuilder> plugin = getPlugin(className);
+        final FilterBuilder builder = createBuilder(plugin, filterPrefix, props);
+        if (builder != null) {
+            return builder.parseFilter(config);
         }
         return null;
     }
 
-    public Layout parseLayout(String className, String layoutPrefix, Properties props, PropertiesConfiguration config) {
-        PluginType<LayoutBuilder> plugin = getPlugin(className);
-        if (plugin != null) {
-            LayoutBuilder builder = createBuilder(plugin, layoutPrefix, props);
-            if (builder != null) {
-                return builder.parseLayout(config);
-            }
-        }
-        return null;
+    public Layout parseLayout(final String className, final Element layoutElement, final XmlConfiguration config) {
+        final PluginType<LayoutBuilder> plugin = getPlugin(className);
+        return newInstance(plugin, b -> b.parseLayout(layoutElement, config));
     }
 
-    public RewritePolicy parseRewritePolicy(String className, Element rewriteElement, XmlConfiguration config) {
-        PluginType<RewritePolicyBuilder> plugin = getPlugin(className);
-        if (plugin != null) {
-            try {
-                return LoaderUtil.newInstanceOf(plugin.getPluginClass()).parseRewritePolicy(rewriteElement, config);
-            } catch (ReflectiveOperationException ex) {
-                LOGGER.warn("Unable to load plugin: {} due to: {}", plugin.getKey(), ex.getMessage());
-            }
+    public Layout parseLayout(final String className, final String layoutPrefix, final Properties props, final PropertiesConfiguration config) {
+        final PluginType<LayoutBuilder> plugin = getPlugin(className);
+        final LayoutBuilder builder = createBuilder(plugin, layoutPrefix, props);
+        if (builder != null) {
+            return builder.parseLayout(config);
         }
         return null;
     }
 
-    public RewritePolicy parseRewritePolicy(String className, String policyPrefix, Properties props, PropertiesConfiguration config) {
-        PluginType<RewritePolicyBuilder> plugin = getPlugin(className);
-        if (plugin != null) {
-            RewritePolicyBuilder builder = createBuilder(plugin, policyPrefix, props);
-            if (builder != null) {
-                return builder.parseRewritePolicy(config);
-            }
+    public RewritePolicy parseRewritePolicy(final String className, final Element rewriteElement, final XmlConfiguration config) {
+        final PluginType<RewritePolicyBuilder> plugin = getPlugin(className);
+        return newInstance(plugin, b -> b.parseRewritePolicy(rewriteElement, config));
+    }
+
+    public RewritePolicy parseRewritePolicy(final String className, final String policyPrefix, final Properties props, final PropertiesConfiguration config) {
+        final PluginType<RewritePolicyBuilder> plugin = getPlugin(className);
+        final RewritePolicyBuilder builder = createBuilder(plugin, policyPrefix, props);
+        if (builder != null) {
+            return builder.parseRewritePolicy(config);
         }
         return null;
     }