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/18 18:55:19 UTC
[logging-log4j2] 01/02: Port StackAllocator changes from from release 2.x. - Do not allocate an extra collection. - Constants should be in upper case.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 282bd7b070465c2a8aea9161cb22c1d0699a4f0e
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jan 18 13:53:51 2022 -0500
Port StackAllocator changes from from release 2.x.
- Do not allocate an extra collection.
- Constants should be in upper case.
---
.../logging/log4j/util/StackLocatorUtilTest.java | 1 -
.../apache/logging/log4j/util/StackLocator.java | 23 +++++++++++++---------
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java
index 3a944a2..82829e1 100644
--- a/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java
+++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java
@@ -31,7 +31,6 @@ import org.junit.runners.ParentRunner;
@RunWith(BlockJUnit4ClassRunner.class)
public class StackLocatorUtilTest {
-
@Test
public void testStackTraceEquivalence() throws Throwable {
StackTraceElement[] stackTraceElements = expectedStack(new Throwable().getStackTrace());
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java
index 6807901..0203886 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java
@@ -27,9 +27,9 @@ import java.util.stream.Collectors;
*/
public final class StackLocator {
- private final static StackWalker walker = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);
+ private final static StackWalker WALKER = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);
- private final static StackWalker stackWalker = StackWalker.getInstance();
+ private final static StackWalker STACK_WALKER = StackWalker.getInstance();
private final static StackLocator INSTANCE = new StackLocator();
@@ -53,7 +53,7 @@ public final class StackLocator {
if (callerPredicate == null) {
throw new IllegalArgumentException("callerPredicate cannot be null");
}
- return walker.walk(s -> s
+ return WALKER.walk(s -> s
.map(StackWalker.StackFrame::getDeclaringClass)
// Skip until the sentinel class is found
.dropWhile(clazz -> !sentinelClass.equals(clazz))
@@ -69,7 +69,7 @@ public final class StackLocator {
@PerformanceSensitive
public Class<?> getCallerClass(final String fqcn, final String pkg) {
- return walker.walk(s -> s
+ return WALKER.walk(s -> s
.dropWhile(f -> !f.getClassName().equals(fqcn))
.dropWhile(f -> f.getClassName().equals(fqcn))
.dropWhile(f -> !f.getClassName().startsWith(pkg))
@@ -80,7 +80,7 @@ public final class StackLocator {
@PerformanceSensitive
public Class<?> getCallerClass(final Class<?> anchor) {
- return walker.walk(s -> s.dropWhile(f -> !f.getDeclaringClass().equals(anchor)).
+ return WALKER.walk(s -> s.dropWhile(f -> !f.getDeclaringClass().equals(anchor)).
dropWhile(f -> f.getDeclaringClass().equals(anchor)).findFirst()).
map(StackWalker.StackFrame::getDeclaringClass).orElse(null);
}
@@ -95,7 +95,7 @@ public final class StackLocator {
*/
@PerformanceSensitive
public Class<?> getCallerClass(final int depth) {
- return walker.walk(s -> s.skip(depth).findFirst()).map(StackWalker.StackFrame::getDeclaringClass).orElse(null);
+ return WALKER.walk(s -> s.skip(depth).findFirst()).map(StackWalker.StackFrame::getDeclaringClass).orElse(null);
}
@PerformanceSensitive
@@ -104,18 +104,23 @@ public final class StackLocator {
if (PrivateSecurityManagerStackTraceUtil.isEnabled()) {
return PrivateSecurityManagerStackTraceUtil.getCurrentStackTrace();
}
- return new ArrayDeque<>(walker.walk(s -> s.map(StackWalker.StackFrame::getDeclaringClass).collect(Collectors.toList())));
+ final Deque<Class<?>> stack = new ArrayDeque<>();
+ return WALKER.walk(s -> {
+ s.forEach(f -> stack.add(f.getDeclaringClass()));
+ return stack;
+ });
+
}
public StackTraceElement calcLocation(final String fqcnOfLogger) {
- return stackWalker.walk(
+ return STACK_WALKER.walk(
s -> s.dropWhile(f -> !f.getClassName().equals(fqcnOfLogger)) // drop the top frames until we reach the logger
.dropWhile(f -> f.getClassName().equals(fqcnOfLogger)) // drop the logger frames
.findFirst()).map(StackWalker.StackFrame::toStackTraceElement).orElse(null);
}
public StackTraceElement getStackTraceElement(final int depth) {
- return stackWalker.walk(s -> s.skip(depth).findFirst())
+ return STACK_WALKER.walk(s -> s.skip(depth).findFirst())
.map(StackWalker.StackFrame::toStackTraceElement).orElse(null);
}
}