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 2018/04/09 15:58:18 UTC
[1/3] logging-log4j2 git commit: adding log4j2.forceTCLOnly option
Repository: logging-log4j2
Updated Branches:
refs/heads/master ffd4ab638 -> 1ee85dcb6
adding log4j2.forceTCLOnly option
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/fbde9cd0
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/fbde9cd0
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/fbde9cd0
Branch: refs/heads/master
Commit: fbde9cd0efb8b50098724e668b0474116761cd81
Parents: ffd4ab6
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Tue Jan 9 11:59:52 2018 +0100
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Mon Apr 9 12:01:39 2018 +0200
----------------------------------------------------------------------
.../apache/logging/log4j/util/LoaderUtil.java | 50 ++++++++++++-----
.../logging/log4j/util/LoaderUtilTest.java | 58 ++++++++++++++++++++
2 files changed, 93 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/fbde9cd0/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
index 2a153b1..84ce69f 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
@@ -44,6 +44,7 @@ public final class LoaderUtil {
* @since 2.1
*/
public static final String IGNORE_TCCL_PROPERTY = "log4j.ignoreTCL";
+ public static final String FORCE_TCL_ONLY_PROPERTY = "log4j.forceTCLOnly";
private static final SecurityManager SECURITY_MANAGER = System.getSecurityManager();
@@ -53,6 +54,8 @@ public final class LoaderUtil {
private static final boolean GET_CLASS_LOADER_DISABLED;
+ protected static Boolean forceTcclOnly;
+
private static final PrivilegedAction<ClassLoader> TCCL_GETTER = new ThreadContextClassLoaderGetter();
static {
@@ -109,21 +112,23 @@ public final class LoaderUtil {
List<ClassLoader> classLoaders = new ArrayList<>();
ClassLoader tcl = getThreadContextClassLoader();
classLoaders.add(tcl);
- ClassLoader current = LoaderUtil.class.getClassLoader();
- if (current != tcl) {
- classLoaders.add(current);
- ClassLoader parent = current.getParent();
+ if (!isForceTccl()) {
+ ClassLoader current = LoaderUtil.class.getClassLoader();
+ if (current != tcl) {
+ classLoaders.add(current);
+ ClassLoader parent = current.getParent();
+ while (parent != null && !classLoaders.contains(parent)) {
+ classLoaders.add(parent);
+ }
+ }
+ ClassLoader parent = tcl.getParent();
while (parent != null && !classLoaders.contains(parent)) {
classLoaders.add(parent);
+ parent = parent.getParent();
+ }
+ if (!classLoaders.contains(ClassLoader.getSystemClassLoader())) {
+ classLoaders.add(ClassLoader.getSystemClassLoader());
}
- }
- ClassLoader parent = tcl.getParent();
- while (parent != null && !classLoaders.contains(parent)) {
- classLoaders.add(parent);
- parent = parent.getParent();
- }
- if (!classLoaders.contains(ClassLoader.getSystemClassLoader())) {
- classLoaders.add(ClassLoader.getSystemClassLoader());
}
return classLoaders.toArray(new ClassLoader[classLoaders.size()]);
}
@@ -260,6 +265,21 @@ public final class LoaderUtil {
return ignoreTCCL;
}
+ private static boolean isForceTccl() {
+ if (forceTcclOnly == null) {
+ // PropertiesUtil.getProperties() uses that code path so don't use that!
+ forceTcclOnly = System.getSecurityManager() == null ?
+ Boolean.getBoolean(FORCE_TCL_ONLY_PROPERTY) :
+ AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
+ @Override
+ public Boolean run() {
+ return Boolean.getBoolean(FORCE_TCL_ONLY_PROPERTY);
+ }
+ });
+ }
+ return forceTcclOnly;
+ }
+
/**
* Finds classpath {@linkplain URL resources}.
*
@@ -279,9 +299,9 @@ public final class LoaderUtil {
static Collection<UrlResource> findUrlResources(final String resource) {
// @formatter:off
final ClassLoader[] candidates = {
- getThreadContextClassLoader(),
- LoaderUtil.class.getClassLoader(),
- GET_CLASS_LOADER_DISABLED ? null : ClassLoader.getSystemClassLoader()};
+ getThreadContextClassLoader(),
+ isForceTccl() ? null : LoaderUtil.class.getClassLoader(),
+ isForceTccl() || GET_CLASS_LOADER_DISABLED ? null : ClassLoader.getSystemClassLoader()};
// @formatter:on
final Collection<UrlResource> resources = new LinkedHashSet<>();
for (final ClassLoader cl : candidates) {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/fbde9cd0/log4j-api/src/test/java/org/apache/logging/log4j/util/LoaderUtilTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/LoaderUtilTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/LoaderUtilTest.java
new file mode 100644
index 0000000..c30041e
--- /dev/null
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/LoaderUtilTest.java
@@ -0,0 +1,58 @@
+/*
+ * 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.util;
+
+import static org.junit.Assert.assertEquals;
+
+import java.net.URL;
+import java.util.Collections;
+import java.util.Enumeration;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class LoaderUtilTest {
+ @Before
+ @After
+ public void reset() {
+ LoaderUtil.forceTcclOnly = null;
+ }
+
+ @Test
+ public void systemClassLoader() {
+ final Thread thread = Thread.currentThread();
+ final ClassLoader tccl = thread.getContextClassLoader();
+
+ LoaderUtil.forceTcclOnly = true;
+ final ClassLoader loader = new ClassLoader(tccl) {
+ @Override
+ public Enumeration<URL> getResources(final String name) {
+ return Collections.emptyEnumeration();
+ }
+ };
+ thread.setContextClassLoader(loader);
+ try {
+ assertEquals(0, LoaderUtil.findUrlResources("Log4j-charsets.properties").size());
+
+ LoaderUtil.forceTcclOnly = false;
+ assertEquals(1, LoaderUtil.findUrlResources("Log4j-charsets.properties").size());
+ } finally {
+ thread.setContextClassLoader(tccl);
+ }
+ }
+}
[3/3] logging-log4j2 git commit: adding back the doc
Posted by ma...@apache.org.
adding back the doc
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/1ee85dcb
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/1ee85dcb
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/1ee85dcb
Branch: refs/heads/master
Commit: 1ee85dcb6e0ea0e07d840adbe6eb67639aa2283e
Parents: 28c6ec2
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Mon Apr 9 17:05:32 2018 +0200
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Mon Apr 9 17:05:32 2018 +0200
----------------------------------------------------------------------
src/site/asciidoc/manual/configuration.adoc | 8 ++++++++
1 file changed, 8 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/1ee85dcb/src/site/asciidoc/manual/configuration.adoc
----------------------------------------------------------------------
diff --git a/src/site/asciidoc/manual/configuration.adoc b/src/site/asciidoc/manual/configuration.adoc
index 138e3f0..aef2a6b 100644
--- a/src/site/asciidoc/manual/configuration.adoc
+++ b/src/site/asciidoc/manual/configuration.adoc
@@ -1841,6 +1841,14 @@ Windows.
Otherwise, an attempt is made to load classes with the current thread's
context class loader before falling back to the default class loader.
+
+|[[forceTCLOnly]]log4j2.forceTCLOnly +
+([[log4j.forceTCLOnly]]log4j.forceTCLOnly)
+|LOG4J_FORCE_TCL_ONLY
+|false
+|If `true`, classes and configuration are only loaded with the default context class loader.
+Otherwise, log4j also uses the log4j classloader, parent classloaders and the system classloader.
+
|[[uuidSequence]]log4j2.uuidSequence +
([[org.apache.logging.log4j.uuidSequence]]org.apache.logging.log4j.uuidSequence)
|LOG4J_UUID_SEQUENCE
[2/3] logging-log4j2 git commit: fixing tests after rebase + adding
jira in changes.xml
Posted by ma...@apache.org.
fixing tests after rebase + adding jira in changes.xml
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/28c6ec24
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/28c6ec24
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/28c6ec24
Branch: refs/heads/master
Commit: 28c6ec246f084cea9d58e918c888ef82fc57eb57
Parents: fbde9cd
Author: Romain Manni-Bucau <rm...@gmail.com>
Authored: Mon Apr 9 13:53:44 2018 +0200
Committer: Romain Manni-Bucau <rm...@gmail.com>
Committed: Mon Apr 9 13:53:44 2018 +0200
----------------------------------------------------------------------
.../main/java/org/apache/logging/log4j/util/LoaderUtil.java | 6 +++++-
src/changes/changes.xml | 3 +++
2 files changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/28c6ec24/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
index 84ce69f..3923c7c 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
@@ -268,7 +268,8 @@ public final class LoaderUtil {
private static boolean isForceTccl() {
if (forceTcclOnly == null) {
// PropertiesUtil.getProperties() uses that code path so don't use that!
- forceTcclOnly = System.getSecurityManager() == null ?
+ try {
+ forceTcclOnly = System.getSecurityManager() == null ?
Boolean.getBoolean(FORCE_TCL_ONLY_PROPERTY) :
AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
@Override
@@ -276,6 +277,9 @@ public final class LoaderUtil {
return Boolean.getBoolean(FORCE_TCL_ONLY_PROPERTY);
}
});
+ } catch (final SecurityException se) {
+ forceTcclOnly = false;
+ }
}
return forceTcclOnly;
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/28c6ec24/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index ad7e632..9ebfc4a 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -31,6 +31,9 @@
- "remove" - Removed
-->
<release version="3.0.0" date="2018-xx-xx" description="GA Release 3.0.0">
+ <action issue="LOG4J2-2171" dev="rmannibucau" type="add">
+ Allow to force LOG4J2 to use TCCL only.
+ </action>
<action issue="LOG4J2-1802" dev="mattsicker" type="add">
Convert documentation into AsciiDoc format.
</action>