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 2022/03/26 00:17:48 UTC

[logging-log4j2] branch master updated (85db357 -> cda00cc)

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

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


    from 85db357  Make Clock injectable in TimeBasedTriggeringPolicy
     new 9fbb323  Improve exception message
     new 83c9abe  Simplify log4j-core check
     new 8fab62c  Add v1config flag to LoggerContextSource
     new 2996db2  Ensure Configuration is registered in v1 configs
     new 89e7540  Revert change to construction
     new 5e47d21  Improve test error messages
     new cda00cc  Add Injector::removeBinding

The 7 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:
 .../src/main/java/org/apache/log4j/LogManager.java | 26 ++++++++--------------
 .../appender/RollingFileAppenderBuilder.java       |  2 +-
 .../apache/log4j/config/Log4j1Configuration.java   |  1 +
 .../core/test/junit/LoggerContextResolver.java     | 20 ++++++++++++++---
 .../log4j/core/test/junit/LoggerContextSource.java |  5 +++++
 .../rolling/RollingDirectTimeNewDirectoryTest.java | 25 ++++++++++++---------
 .../core/appender/rolling/PatternProcessor.java    | 14 ++++++------
 .../logging/log4j/plugins/di/DefaultInjector.java  |  5 +++++
 .../apache/logging/log4j/plugins/di/Injector.java  |  7 ++++++
 9 files changed, 67 insertions(+), 38 deletions(-)

[logging-log4j2] 06/07: Improve test error messages

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5e47d217d223ce450b9ed9e972800a2ae8fc6472
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Fri Mar 25 18:57:22 2022 -0500

    Improve test error messages
    
    Signed-off-by: Matt Sicker <ma...@apache.org>
---
 .../rolling/RollingDirectTimeNewDirectoryTest.java | 25 +++++++++++++---------
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectTimeNewDirectoryTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectTimeNewDirectoryTest.java
index e6c0508..627a021 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectTimeNewDirectoryTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingDirectTimeNewDirectoryTest.java
@@ -25,14 +25,15 @@ import org.apache.logging.log4j.core.time.Clock;
 import org.apache.logging.log4j.plugins.Factory;
 import org.apache.logging.log4j.test.junit.CleanUpDirectories;
 import org.junit.jupiter.api.Test;
+import org.opentest4j.AssertionFailedError;
 
 import java.io.File;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.concurrent.atomic.AtomicLong;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class RollingDirectTimeNewDirectoryTest {
 
@@ -55,10 +56,12 @@ public class RollingDirectTimeNewDirectoryTest {
         final Logger logger = context.getLogger(RollingDirectTimeNewDirectoryTest.class.getName());
 
         for (int i = 0; i < 1000; i++) {
+            currentTimeMillis.incrementAndGet();
             logger.info("nHq6p9kgfvWfjzDRYbZp");
         }
-        currentTimeMillis.addAndGet(1500);
+        currentTimeMillis.addAndGet(500);
         for (int i = 0; i < 1000; i++) {
+            currentTimeMillis.incrementAndGet();
             logger.info("nHq6p9kgfvWfjzDRYbZp");
         }
 
@@ -70,19 +73,18 @@ public class RollingDirectTimeNewDirectoryTest {
         try {
 
             final int minExpectedLogFolderCount = 2;
-            assertTrue(logFolders.length >= minExpectedLogFolderCount, "was expecting at least " + minExpectedLogFolderCount + " folders, " +
-                    "found " + logFolders.length);
+            assertThat(logFolders).hasSizeGreaterThanOrEqualTo(minExpectedLogFolderCount);
 
             for (File logFolder : logFolders) {
                 File[] logFiles = logFolder.listFiles();
                 if (logFiles != null) {
                     Arrays.sort(logFiles);
                 }
-                assertTrue(logFiles != null && logFiles.length > 0, "empty folder: " + logFolder);
+                assertThat(logFiles).isNotNull().isNotEmpty();
             }
 
-        } catch (AssertionError error) {
-            System.out.format("log directory (%s) contents:%n", DIR);
+        } catch (AssertionFailedError error) {
+            StringBuilder sb = new StringBuilder(error.getMessage()).append(" log directory (").append(DIR).append(") contents: [");
             final Iterator<File> fileIterator =
                     FileUtils.iterateFilesAndDirs(
                             logDir, TrueFileFilter.TRUE, TrueFileFilter.TRUE);
@@ -90,10 +92,13 @@ public class RollingDirectTimeNewDirectoryTest {
             while (fileIterator.hasNext()) {
                 totalFileCount++;
                 final File file = fileIterator.next();
-                System.out.format("-> %s (%d)%n", file, file.length());
+                sb.append("-> ").append(file).append(" (").append(file.length()).append(')');
+                if (fileIterator.hasNext()) {
+                    sb.append(", ");
+                }
             }
-            System.out.format("total file count: %d%n", totalFileCount);
-            throw new AssertionError("check failure", error);
+            sb.append("] total file count: ").append(totalFileCount);
+            throw new AssertionFailedError(sb.toString(), error);
         }
 
     }

[logging-log4j2] 03/07: Add v1config flag to LoggerContextSource

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 8fab62c515c596d702100b9a53e9f82056385ba8
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Fri Mar 25 18:54:42 2022 -0500

    Add v1config flag to LoggerContextSource
    
    Signed-off-by: Matt Sicker <ma...@apache.org>
---
 .../log4j/core/test/junit/LoggerContextResolver.java | 20 +++++++++++++++++---
 .../log4j/core/test/junit/LoggerContextSource.java   |  5 +++++
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java
index 60479ec..ea6693e 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java
@@ -19,6 +19,7 @@ package org.apache.logging.log4j.core.test.junit;
 
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.LoggerContextAccessor;
+import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.core.util.NetUtils;
 import org.apache.logging.log4j.plugins.di.DI;
@@ -32,6 +33,7 @@ import org.junit.jupiter.api.extension.ParameterContext;
 import org.junit.jupiter.api.extension.ParameterResolutionException;
 
 import java.lang.reflect.Method;
+import java.net.URI;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
@@ -141,9 +143,16 @@ class LoggerContextResolver extends TypeBasedParameterResolver<LoggerContext> im
             injector.init();
             final Class<?> testClass = extensionContext.getRequiredTestClass();
             final ClassLoader classLoader = testClass.getClassLoader();
+            final Map.Entry<String, Object> injectorContext = Map.entry(Injector.class.getName(), injector);
             final String configLocation = source.value();
-            context = Configurator.initialize(displayName, classLoader,
-                    NetUtils.toURI(configLocation), Map.entry(Injector.class.getName(), injector));
+            final URI configUri;
+            if (source.v1config()) {
+                System.setProperty(ConfigurationFactory.LOG4J1_CONFIGURATION_FILE_PROPERTY, configLocation);
+                configUri = null; // handled by system property
+            } else {
+                configUri = configLocation.isEmpty() ? null : NetUtils.toURI(configLocation);
+            }
+            context = Configurator.initialize(displayName, classLoader, configUri, injectorContext);
             assertNotNull(context, () -> "No LoggerContext created for " + testClass + " and config file " + configLocation);
             reconfigurationPolicy = source.reconfigure();
             shutdownTimeout = source.timeout();
@@ -161,7 +170,12 @@ class LoggerContextResolver extends TypeBasedParameterResolver<LoggerContext> im
 
         @Override
         public void close() {
-            context.stop(shutdownTimeout, unit);
+            try {
+                context.stop(shutdownTimeout, unit);
+            } finally {
+                System.clearProperty(ConfigurationFactory.LOG4J1_EXPERIMENTAL);
+                System.clearProperty(ConfigurationFactory.LOG4J1_CONFIGURATION_FILE_PROPERTY);
+            }
         }
     }
 
diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java
index 7dfcf18..b3896cf 100644
--- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java
@@ -76,4 +76,9 @@ public @interface LoggerContextSource {
      * Specifies the time unit {@link #timeout()} is measured in.
      */
     TimeUnit unit() default TimeUnit.SECONDS;
+
+    /**
+     * Toggles Log4j1 configuration file compatibility mode for XML and properties files.
+     */
+    boolean v1config() default false;
 }

[logging-log4j2] 01/07: Improve exception message

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9fbb32337bf9754f0afc9eabce691f3615bae2d6
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Fri Mar 25 18:52:34 2022 -0500

    Improve exception message
    
    Signed-off-by: Matt Sicker <ma...@apache.org>
---
 .../log4j/core/appender/rolling/PatternProcessor.java      | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
index 8672b3d..aed78d5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
@@ -16,12 +16,6 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
@@ -34,6 +28,12 @@ import org.apache.logging.log4j.core.pattern.PatternConverter;
 import org.apache.logging.log4j.core.pattern.PatternParser;
 import org.apache.logging.log4j.status.StatusLogger;
 
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
 /**
  * Parses the rollover pattern.
  */
@@ -155,7 +155,7 @@ public class PatternProcessor {
         final long nextTime;
 
         if (frequency == null) {
-            throw new IllegalStateException("Pattern does not contain a date");
+            throw new IllegalStateException("Pattern '" + pattern + "' does not contain a date");
         }
         final Calendar currentCal = Calendar.getInstance();
         currentCal.setTimeInMillis(currentMillis);

[logging-log4j2] 02/07: Simplify log4j-core check

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 83c9abee2844ec6e59e4f347cc1dffdad1fd328d
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Fri Mar 25 18:53:44 2022 -0500

    Simplify log4j-core check
    
    Signed-off-by: Matt Sicker <ma...@apache.org>
---
 .../src/main/java/org/apache/log4j/LogManager.java | 26 ++++++++--------------
 1 file changed, 9 insertions(+), 17 deletions(-)

diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/LogManager.java b/log4j-1.2-api/src/main/java/org/apache/log4j/LogManager.java
index b18c8f1..b4d8b7b 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/LogManager.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/LogManager.java
@@ -16,10 +16,6 @@
  */
 package org.apache.log4j;
 
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.stream.Collectors;
-
 import org.apache.log4j.legacy.core.ContextUtil;
 import org.apache.log4j.spi.DefaultRepositorySelector;
 import org.apache.log4j.spi.LoggerFactory;
@@ -28,8 +24,13 @@ import org.apache.log4j.spi.NOPLoggerRepository;
 import org.apache.log4j.spi.RepositorySelector;
 import org.apache.log4j.spi.RootLogger;
 import org.apache.logging.log4j.spi.LoggerContext;
+import org.apache.logging.log4j.util.LoaderUtil;
 import org.apache.logging.log4j.util.StackLocatorUtil;
 
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.stream.Collectors;
+
 /**
  * The main entry point to Log4j 1.
  */
@@ -66,21 +67,12 @@ public final class LogManager {
     private static final boolean LOG4J_CORE_PRESENT;
 
     static {
-        LOG4J_CORE_PRESENT = checkLog4jCore();
-        //
-        // By default we use a DefaultRepositorySelector which always returns 'hierarchy'.
+        LOG4J_CORE_PRESENT = LoaderUtil.isClassAvailable("org.apache.logging.log4j.core.LoggerContext");
+        // By default, we use a DefaultRepositorySelector which always returns 'hierarchy'.
         final Hierarchy hierarchy = new Hierarchy(new RootLogger(Level.DEBUG));
         repositorySelector = new DefaultRepositorySelector(hierarchy);
     }
 
-    private static boolean checkLog4jCore() {
-        try {
-            return Class.forName("org.apache.logging.log4j.core.LoggerContext") != null;
-        } catch (final Throwable ex) {
-            return false;
-        }
-    }
-
     /**
      * Tests if a logger for the given name exists.
      *
@@ -98,7 +90,7 @@ public final class LogManager {
     /**
      * Gets a LoggerContext.
      *
-     * @param loader The ClassLoader for the context. If null the context will attempt to determine the appropriate
+     * @param classLoader The ClassLoader for the context. If null the context will attempt to determine the appropriate
      *        ClassLoader.
      * @return a LoggerContext.
      */
@@ -210,7 +202,7 @@ public final class LogManager {
         if (selector == null) {
             throw new IllegalArgumentException("RepositorySelector must be non-null.");
         }
-        LogManager.repositorySelector = selector;
+        repositorySelector = selector;
     }
 
     /**

[logging-log4j2] 05/07: Revert change to construction

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 89e7540fb262a6d1f520e2ade36f421b9e1a397b
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Fri Mar 25 18:56:54 2022 -0500

    Revert change to construction
    
    Signed-off-by: Matt Sicker <ma...@apache.org>
---
 .../org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
index 9bc8349..a52b69e 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/appender/RollingFileAppenderBuilder.java
@@ -187,7 +187,7 @@ public class RollingFileAppenderBuilder extends AbstractBuilder implements Appen
         String filePattern = fileName + ".%i";
         TriggeringPolicy timePolicy = TimeBasedTriggeringPolicy.newBuilder().setClock(clock).setModulate(true).build();
         SizeBasedTriggeringPolicy sizePolicy = SizeBasedTriggeringPolicy.createPolicy(maxSize);
-        CompositeTriggeringPolicy policy = CompositeTriggeringPolicy.createPolicy(timePolicy, sizePolicy);
+        CompositeTriggeringPolicy policy = CompositeTriggeringPolicy.createPolicy(sizePolicy);
         RolloverStrategy strategy = DefaultRolloverStrategy.newBuilder()
                 .setConfig(config)
                 .setMax(maxBackups)

[logging-log4j2] 07/07: Add Injector::removeBinding

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit cda00cca8d746ed46b10b476b82ff4bfe41d76e1
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Fri Mar 25 18:58:58 2022 -0500

    Add Injector::removeBinding
    
    Signed-off-by: Matt Sicker <ma...@apache.org>
---
 .../java/org/apache/logging/log4j/plugins/di/DefaultInjector.java  | 5 +++++
 .../main/java/org/apache/logging/log4j/plugins/di/Injector.java    | 7 +++++++
 2 files changed, 12 insertions(+)

diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInjector.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInjector.java
index d7050d2..1937234 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInjector.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/DefaultInjector.java
@@ -168,6 +168,11 @@ class DefaultInjector implements Injector {
     }
 
     @Override
+    public void removeBinding(final Key<?> key) {
+        bindingMap.remove(key);
+    }
+
+    @Override
     public void setReflectionAccessor(final ReflectionAccessor accessor) {
         this.accessor = accessor;
     }
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Injector.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Injector.java
index 8420c92..b51d845 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Injector.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/di/Injector.java
@@ -149,6 +149,13 @@ public interface Injector {
     <T> Injector registerBindingIfAbsent(final Key<T> key, final Supplier<? extends T> factory);
 
     /**
+     * Removes any existing binding for the provided key.
+     *
+     * @param key key to remove previously registered bindings
+     */
+    void removeBinding(final Key<?> key);
+
+    /**
      * Sets the {@link ReflectionAccessor} used for invoking {@link java.lang.reflect.AccessibleObject#setAccessible(boolean)}
      * from an appropriate caller class. Customizing this allows for changing the base module that other modules should
      * open themselves to.

[logging-log4j2] 04/07: Ensure Configuration is registered in v1 configs

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2996db2e30bf0ed30e672fc5223c453dc466e6b8
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Fri Mar 25 18:55:55 2022 -0500

    Ensure Configuration is registered in v1 configs
    
    Signed-off-by: Matt Sicker <ma...@apache.org>
---
 .../src/main/java/org/apache/log4j/config/Log4j1Configuration.java       | 1 +
 1 file changed, 1 insertion(+)

diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1Configuration.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1Configuration.java
index f75caa5..d97ff90 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1Configuration.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1Configuration.java
@@ -53,6 +53,7 @@ public class Log4j1Configuration extends AbstractConfiguration implements Reconf
      */
     @Override
     public void initialize() {
+        injector.registerBinding(Configuration.KEY, () -> this);
         getStrSubstitutor().setConfiguration(this);
         getConfigurationStrSubstitutor().setConfiguration(this);
         super.getScheduler().start();