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();