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:18 UTC

[logging-log4j2] branch master updated (d425819 -> d31e8dd)

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

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


    from d425819  Additional log4j-to-jul test coverage for correct formatting (#712)
     new 282bd7b  Port StackAllocator changes from from release 2.x. - Do not allocate an extra collection. - Constants should be in upper case.
     new d31e8dd  Refactor to only set the logger level once instead of potentially twice.

The 2 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:
 .../logging/log4j/util/StackLocatorUtilTest.java   |  1 -
 .../apache/logging/log4j/status/StatusLogger.java  | 37 ++++++++++++++++++----
 .../apache/logging/log4j/util/StackLocator.java    | 23 ++++++++------
 3 files changed, 44 insertions(+), 17 deletions(-)

[logging-log4j2] 01/02: Port StackAllocator changes from from release 2.x. - Do not allocate an extra collection. - Constants should be in upper case.

Posted by gg...@apache.org.
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);
     }
 }

[logging-log4j2] 02/02: Refactor to only set the logger level once instead of potentially twice.

Posted by gg...@apache.org.
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 d31e8dd3919e31c1c54ad2ce0a34d912bb1c83f8
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jan 18 12:21:55 2022 -0500

    Refactor to only set the logger level once instead of potentially twice.
---
 .../apache/logging/log4j/status/StatusLogger.java  | 37 ++++++++++++++++++----
 1 file changed, 30 insertions(+), 7 deletions(-)

diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
index cf7124b..86eee2a 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
@@ -101,18 +101,41 @@ public final class StatusLogger extends AbstractLogger {
 
     private int listenersLevel;
 
+    /**
+     * Constructs the singleton instance for the STATUS_LOGGER constant.
+     * <p>
+     * This is now the logger level is set:
+     * </p>
+     * <ol>
+     * <li>If the property {@value Constants#LOG4J2_DEBUG} is {@code "true"}, then use {@link Level#TRACE}, otherwise,</li>
+     * <li>Use {@link Level#ERROR}</li>
+     * </ol>
+     * <p>
+     * This is now the listener level is set:
+     * </p>
+     * <ol>
+     * <li>If the property {@value #DEFAULT_STATUS_LISTENER_LEVEL} is set, then use <em>it</em>, otherwise,</li>
+     * <li>Use {@link Level#WARN}</li>
+     * </ol>
+     * <p>
+     * See:
+     * <ol>
+     * <li>LOG4J2-1813 Provide shorter and more intuitive way to switch on Log4j internal debug logging. If system property
+     * "log4j2.debug" is defined, print all status logging.</li>
+     * <li>LOG4J2-3340 StatusLogger's log Level cannot be changed as advertised.</li>
+     * </ol>
+     * </p>
+     * 
+     * @param name The logger name.
+     * @param messageFactory The message factory.
+     */
     private StatusLogger(final String name, final MessageFactory messageFactory) {
         super(name, messageFactory);
         final String dateFormat = PROPS.getStringProperty(STATUS_DATE_FORMAT, Strings.EMPTY);
         final boolean showDateTime = !Strings.isEmpty(dateFormat);
-        this.logger = new SimpleLogger("StatusLogger", Level.ERROR, false, true, showDateTime, false,
-                dateFormat, messageFactory, PROPS, System.err);
+        final Level loggerLevel = isDebugPropertyEnabled() ? Level.TRACE : Level.ERROR;
+        this.logger = new SimpleLogger("StatusLogger", loggerLevel, false, true, showDateTime, false, dateFormat, messageFactory, PROPS, System.err);
         this.listenersLevel = Level.toLevel(DEFAULT_STATUS_LEVEL, Level.WARN).intLevel();
-
-        // LOG4J2-1813 if system property "log4j2.debug" is defined, print all status logging
-        if (isDebugPropertyEnabled()) {
-            logger.setLevel(Level.TRACE);
-        }
     }
 
     // LOG4J2-1813 if system property "log4j2.debug" is defined, print all status logging