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/08 19:58:19 UTC

[logging-log4j2] branch release-2.x updated (97f9201 -> e1d0624)

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

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


    from 97f9201  Replace internal use of synchronized java.util.Stack with unsynchronized java.util.Deque. These objects are not shared between threads.
     new c61ec4a  Only check if log4j-core is available once.
     new cead0fd  Only check if log4j-core is available once.
     new e1d0624  Only check if log4j-core is available once.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../main/java/org/apache/log4j/helpers/Loader.java | 99 +++++++---------------
 .../src/main/java/org/apache/log4j/spi/Filter.java | 27 ++++--
 2 files changed, 48 insertions(+), 78 deletions(-)

[logging-log4j2] 01/03: Only check if log4j-core is available once.

Posted by gg...@apache.org.
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 c61ec4abeee445b7448dfc8bc670ceebab575aee
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 8 14:48:42 2022 -0500

    Only check if log4j-core is available once.
---
 .../src/main/java/org/apache/log4j/spi/Filter.java | 25 +++++++++++++++-------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/Filter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/Filter.java
index 997398b..5cd7189 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/Filter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/Filter.java
@@ -22,17 +22,24 @@ import org.apache.log4j.bridge.FilterAdapter;
  * @since 0.9.0
  */
 public abstract class Filter {
-    private final FilterAdapter adapter;
 
-    public Filter() {
-        FilterAdapter filterAdapter = null;
+    static {
+        boolean temp;
         try {
-            Class.forName("org.apache.logging.log4j.core.Filter");
-            filterAdapter = new FilterAdapter(this);
-        } catch(ClassNotFoundException ex) {
-            // Ignore the exception. Log4j Core is not present.
+            temp = Class.forName("org.apache.logging.log4j.core.Filter") != null;
+        } catch (Exception e) {
+            temp = false;
         }
-        this.adapter = filterAdapter;
+        isCorePresent = temp;
+    }
+    
+    private final FilterAdapter adapter;
+
+    /**
+     * C
+     */
+    public Filter() {
+        this.adapter = isCorePresent ? new FilterAdapter(this) : null;
     }
 
     /**
@@ -61,6 +68,8 @@ public abstract class Filter {
     @Deprecated
     public Filter next;
 
+    private static final boolean isCorePresent;
+
     /**
      * Usually filters options become active when set. We provide a
      * default do-nothing implementation for convenience.

[logging-log4j2] 03/03: Only check if log4j-core is available once.

Posted by gg...@apache.org.
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 e1d06248930f7aaa3d41186f9856eef50991a071
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 8 14:58:17 2022 -0500

    Only check if log4j-core is available once.
---
 .../main/java/org/apache/log4j/helpers/Loader.java | 99 +++++++---------------
 1 file changed, 29 insertions(+), 70 deletions(-)

diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/Loader.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/Loader.java
index 9e8ed40..cf5ca22 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/Loader.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/Loader.java
@@ -5,9 +5,9 @@
  * 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.
@@ -17,9 +17,6 @@
 
 package org.apache.log4j.helpers;
 
-import java.io.InterruptedIOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
 import java.net.URL;
 
 /**
@@ -29,22 +26,10 @@ public class Loader {
 
     static final String TSTR = "Caught Exception while in Loader.getResource. This may be innocuous.";
 
-    // We conservatively assume that we are running under Java 1.x
-    static private boolean java1 = true;
-
-    static private boolean ignoreTCL = false;
+    static private boolean ignoreTCL;
 
     static {
-        String prop = OptionConverter.getSystemProperty("java.version", null);
-
-        if (prop != null) {
-            int i = prop.indexOf('.');
-            if (i != -1) {
-                if (prop.charAt(i + 1) != '1')
-                    java1 = false;
-            }
-        }
-        String ignoreTCLProp = OptionConverter.getSystemProperty("log4j.ignoreTCL", null);
+        final String ignoreTCLProp = OptionConverter.getSystemProperty("log4j.ignoreTCL", null);
         if (ignoreTCLProp != null) {
             ignoreTCL = OptionConverter.toBoolean(ignoreTCLProp, true);
         }
@@ -55,21 +40,19 @@ public class Loader {
      * <ol>
      * <p>
      * <li>Search for <code>resource</code> using the thread context class loader under Java2. If that fails, search for
-     * <code>resource</code> using the class loader that loaded this class (<code>Loader</code>). Under JDK 1.1, only the
-     * the class loader that loaded this class (<code>Loader</code>) is used.
+     * <code>resource</code> using the class loader that loaded this class (<code>Loader</code>).
      * </p>
      * <p>
-     * <li>Try one last time with <code>ClassLoader.getSystemResource(resource)</code>, that is is using the system class
-     * loader in JDK 1.2 and virtual machine's built-in class loader in JDK 1.1.
+     * <li>Try one last time with <code>ClassLoader.getSystemResource(resource)</code>.
      * </p>
      * </ol>
      */
-    static public URL getResource(String resource) {
+    static public URL getResource(final String resource) {
         ClassLoader classLoader = null;
         URL url = null;
 
         try {
-            if (!java1 && !ignoreTCL) {
+            if (!ignoreTCL) {
                 classLoader = getTCL();
                 if (classLoader != null) {
                     LogLog.debug("Trying to find [" + resource + "] using context classloader " + classLoader + ".");
@@ -81,7 +64,7 @@ public class Loader {
             }
 
             // We could not find resource. Ler us now try with the
-            // classloader that loaded this class.
+            // ClassLoader that loaded this class.
             classLoader = Loader.class.getClassLoader();
             if (classLoader != null) {
                 LogLog.debug("Trying to find [" + resource + "] using " + classLoader + " class loader.");
@@ -90,15 +73,7 @@ public class Loader {
                     return url;
                 }
             }
-        } catch (IllegalAccessException t) {
-            LogLog.warn(TSTR, t);
-        } catch (InvocationTargetException t) {
-            if (t.getTargetException() instanceof InterruptedException || t.getTargetException() instanceof InterruptedIOException) {
-                Thread.currentThread().interrupt();
-            }
-            LogLog.warn(TSTR, t);
-        } catch (Throwable t) {
-            //
+        } catch (final Throwable t) {
             // can't be InterruptedException or InterruptedIOException
             // since not declared, must be error or RuntimeError.
             LogLog.warn(TSTR, t);
@@ -113,66 +88,50 @@ public class Loader {
     }
 
     /**
-     * Get a resource by delegating to getResource(String).
-     * 
+     * Gets a resource by delegating to getResource(String).
+     *
      * @param resource resource name
      * @param clazz class, ignored.
      * @return URL to resource or null.
      * @deprecated as of 1.2.
      */
     @Deprecated
-    public static URL getResource(String resource, Class clazz) {
+    public static URL getResource(final String resource, final Class clazz) {
         return getResource(resource);
     }
 
     /**
-     * Get the Thread Context Loader which is a JDK 1.2 feature. If we are running under JDK 1.1 or anything else goes wrong
-     * the method returns <code>null<code>.
-     *
+     * Shorthand for {@code Thread.currentThread().getContextClassLoader()}.
      */
-    private static ClassLoader getTCL() throws IllegalAccessException, InvocationTargetException {
-
-        // Are we running on a JDK 1.2 or later system?
-        Method method = null;
-        try {
-            method = Thread.class.getMethod("getContextClassLoader", (Class<?>[]) null);
-        } catch (NoSuchMethodException e) {
-            // We are running on JDK 1.1
-            return null;
-        }
-
-        return (ClassLoader) method.invoke(Thread.currentThread(), (Object[]) null);
+    private static ClassLoader getTCL() {
+        return Thread.currentThread().getContextClassLoader();
     }
 
     /**
-     * Are we running under JDK 1.x?
+     * Always returns false since Java 1.x support is long gone.
+     *
+     * @return Always false.
      */
     public static boolean isJava1() {
-        return java1;
+        return false;
     }
 
     /**
-     * If running under JDK 1.2 load the specified class using the <code>Thread</code> <code>contextClassLoader</code> if
-     * that fails try Class.forname. Under JDK 1.1 only Class.forName is used.
+     * Loads the specified class using the <code>Thread</code> <code>contextClassLoader</code>, if that fails try
+     * Class.forname.
      *
+     * @param clazz The class to load.
+     * @return The Class.
+     * @throws ClassNotFoundException Never thrown, declared for compatibility.
      */
-    static public Class loadClass(String clazz) throws ClassNotFoundException {
-        // Just call Class.forName(clazz) if we are running under JDK 1.1
-        // or if we are instructed to ignore the TCL.
-        if (java1 || ignoreTCL) {
+    static public Class loadClass(final String clazz) throws ClassNotFoundException {
+        // Just call Class.forName(clazz) if we are instructed to ignore the TCL.
+        if (ignoreTCL) {
             return Class.forName(clazz);
         }
         try {
             return getTCL().loadClass(clazz);
-        }
-        // we reached here because tcl was null or because of a
-        // security exception, or because clazz could not be loaded...
-        // In any case we now try one more time
-        catch (InvocationTargetException e) {
-            if (e.getTargetException() instanceof InterruptedException || e.getTargetException() instanceof InterruptedIOException) {
-                Thread.currentThread().interrupt();
-            }
-        } catch (Throwable t) {
+        } catch (final Throwable t) {
             // ignore
         }
         return Class.forName(clazz);

[logging-log4j2] 02/03: Only check if log4j-core is available once.

Posted by gg...@apache.org.
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 cead0fdc28acdcb54baf7f37b6deb92661b202ad
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 8 14:57:48 2022 -0500

    Only check if log4j-core is available once.
---
 log4j-1.2-api/src/main/java/org/apache/log4j/spi/Filter.java | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/Filter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/Filter.java
index 5cd7189..17a15d6 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/spi/Filter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/spi/Filter.java
@@ -27,16 +27,17 @@ public abstract class Filter {
         boolean temp;
         try {
             temp = Class.forName("org.apache.logging.log4j.core.Filter") != null;
-        } catch (Exception e) {
+        } catch (Exception | LinkageError e) {
             temp = false;
         }
         isCorePresent = temp;
     }
     
+    // TODO Unused?
     private final FilterAdapter adapter;
 
     /**
-     * C
+     * Constructs a new instance.
      */
     public Filter() {
         this.adapter = isCorePresent ? new FilterAdapter(this) : null;
@@ -75,6 +76,7 @@ public abstract class Filter {
      * default do-nothing implementation for convenience.
      */
     public void activateOptions() {
+        // noop
     }