You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2022/01/13 21:09:05 UTC

[logging-log4j2] 01/02: Add CategoryUtil#getAppenders() and getFilters(); add Javadoc.

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

ggregory pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 7f565a3e3ef030f0365d1e203b22df788de3fb0e
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Jan 13 16:08:21 2022 -0500

    Add CategoryUtil#getAppenders() and getFilters(); add Javadoc.
    
    Refactor duplication.
---
 .../org/apache/log4j/legacy/core/CategoryUtil.java | 97 +++++++++++++++++-----
 1 file changed, 78 insertions(+), 19 deletions(-)

diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/legacy/core/CategoryUtil.java b/log4j-1.2-api/src/main/java/org/apache/log4j/legacy/core/CategoryUtil.java
index 04c47aa..ea6b43c 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/legacy/core/CategoryUtil.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/legacy/core/CategoryUtil.java
@@ -16,45 +16,104 @@
  */
 package org.apache.log4j.legacy.core;
 
+import java.util.Iterator;
+import java.util.Map;
+import java.util.function.Supplier;
+
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.spi.LoggerContext;
 
 /**
- * Provide access to Log4j Core Logger methods.
+ * Delegates to {@code Logger} methods implemented by {@code log4j-core} if appropriate.
  */
 public final class CategoryUtil {
 
+    private static org.apache.logging.log4j.core.Logger asCore(final Logger logger) {
+        return (org.apache.logging.log4j.core.Logger) logger;
+    }
+
+    private static <T> T get(final Logger logger, final Supplier<T> run, final T defaultValue) {
+        return isCore(logger) ? run.get() : defaultValue;
+    }
+
+    /**
+     * Delegates to {@link org.apache.logging.log4j.core.Logger#getAppenders()} if appropriate.
+     *
+     * @param logger The target logger.
+     * @return A Map containing the Appender's name as the key and the Appender as the value.
+     */
+    public static Map<String, Appender> getAppenders(final Logger logger) {
+        return get(logger, asCore(logger)::getAppenders, null);
+    }
+
+    /**
+     * Delegates to {@link org.apache.logging.log4j.core.Logger#getFilters()} if appropriate.
+     *
+     * @param logger The target logger.
+     * @return An Iterator over all the Filters associated with the Logger.
+     */
+    public static Iterator<Filter> getFilters(final Logger logger) {
+        return get(logger, asCore(logger)::getFilters, null);
+    }
+
+    /**
+     * Delegates to {@link org.apache.logging.log4j.core.Logger#getContext()} if appropriate.
+     *
+     * @param logger The target logger.
+     * @return the LoggerContext.
+     */
     public static LoggerContext getLoggerContext(final Logger logger) {
-        if (logger instanceof org.apache.logging.log4j.core.Logger) {
-            return ((org.apache.logging.log4j.core.Logger) logger).getContext();
-        }
-        return null;
+        return get(logger, asCore(logger)::getContext, null);
     }
 
+    /**
+     * Delegates to {@link org.apache.logging.log4j.core.Logger#getParent()} if appropriate.
+     *
+     * @param logger The target logger.
+     * @return The parent Logger.
+     */
     public static Logger getParent(final Logger logger) {
-        if (logger instanceof org.apache.logging.log4j.core.Logger) {
-            return ((org.apache.logging.log4j.core.Logger) logger).getParent();
-        }
-        return null;
+        return get(logger, asCore(logger)::getParent, null);
     }
-    
+
+    /**
+     * Delegates to {@link org.apache.logging.log4j.core.Logger#isAdditive()} if appropriate.
+     *
+     * @param logger The target logger.
+     * @return true if the associated LoggerConfig is additive, false otherwise.
+     */
     public static boolean isAdditive(final Logger logger) {
-        if (logger instanceof org.apache.logging.log4j.core.Logger) {
-            return ((org.apache.logging.log4j.core.Logger) logger).isAdditive();
-        }
-        return false;
+        return get(logger, asCore(logger)::isAdditive, false);
+    }
+
+    private static boolean isCore(final Logger logger) {
+        return logger instanceof org.apache.logging.log4j.core.Logger;
     }
 
-    public static void setAdditivity(final Logger logger, final boolean additivity) {
-        if (logger instanceof org.apache.logging.log4j.core.Logger) {
-            ((org.apache.logging.log4j.core.Logger) logger).setAdditive(additivity);
+    /**
+     * Delegates to {@link org.apache.logging.log4j.core.Logger#setAdditive(boolean)} if appropriate.
+     *
+     * @param logger The target logger.
+     * @param additive Boolean value to indicate whether the Logger is additive or not.
+     */
+    public static void setAdditivity(final Logger logger, final boolean additive) {
+        if (isCore(logger)) {
+            asCore(logger).setAdditive(additive);
         }
     }
 
+    /**
+     * Delegates to {@link org.apache.logging.log4j.core.Logger#setLevel(Level)} if appropriate.
+     *
+     * @param logger The target logger.
+     * @param level The Level to use on this Logger, may be null.
+     */
     public static void setLevel(final Logger logger, final Level level) {
-        if (logger instanceof org.apache.logging.log4j.core.Logger) {
-            ((org.apache.logging.log4j.core.Logger) logger).setLevel(level);
+        if (isCore(logger)) {
+            asCore(logger).setLevel(level);
         }
     }