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 877ec99b823404aa549d902fb49fdeded445e77a Author: Gary Gregory <[email protected]> AuthorDate: Sun Jan 9 14:57:43 2022 -0500 Add org.apache.logging.log4j.spi.LoggerContext.getLoggerRegistry(). - Add org.apache.logging.log4j.core.LoggerContext.getLoggerRegistry() - Add org.apache.logging.log4j.simple.SimpleLoggerContext.getLoggerRegistry(). - Move and make final SimpleLoggerContext singleton declaration from SimpleLoggerContextFactory to SimpleLoggerContext. - Add and use singleton SimpleLoggerContextFactory (stateless). - Split commit 1/2 for cherry-picking to master. Conflicts: log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContextFactory.java --- .../logging/log4j/simple/SimpleLoggerTest.java | 3 +-- .../java/org/apache/logging/log4j/LogManager.java | 26 +++++++++++----------- .../logging/log4j/simple/SimpleLoggerContext.java | 15 ++++++++++++- .../log4j/simple/SimpleLoggerContextFactory.java | 18 ++++++++------- .../apache/logging/log4j/spi/LoggerContext.java | 12 ++++++++++ .../log4j/core/config/TestConfiguratorError.java | 2 +- .../apache/logging/log4j/core/LoggerContext.java | 10 +++++++++ 7 files changed, 61 insertions(+), 25 deletions(-) diff --git a/log4j-api-test/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java index 7e5bdbc..4d26e7e 100644 --- a/log4j-api-test/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java +++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java @@ -30,8 +30,7 @@ import org.junit.jupiter.api.parallel.Resources; public class SimpleLoggerTest { @RegisterExtension - public static final LoggerContextFactoryExtension EXTENSION = - new LoggerContextFactoryExtension(new SimpleLoggerContextFactory()); + public static final LoggerContextFactoryExtension EXTENSION = new LoggerContextFactoryExtension(SimpleLoggerContextFactory.INSTANCE); private final Logger logger = LogManager.getLogger("TestError"); diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java b/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java index a3ee536..a67dcbd 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java @@ -54,7 +54,7 @@ public class LogManager { public static final String FACTORY_PROPERTY_NAME = "log4j2.loggerContextFactory"; /** - * The name of the root Logger. + * The name of the root Logger is {@value #ROOT_LOGGER_NAME}. */ public static final String ROOT_LOGGER_NAME = Strings.EMPTY; @@ -103,7 +103,7 @@ public class LogManager { if (factories.isEmpty()) { LOGGER.error("Log4j2 could not find a logging implementation. " + "Please add log4j-core to the classpath. Using SimpleLogger to log to the console..."); - factory = new SimpleLoggerContextFactory(); + factory = SimpleLoggerContextFactory.INSTANCE; } else if (factories.size() == 1) { factory = factories.get(factories.lastKey()); } else { @@ -120,7 +120,7 @@ public class LogManager { } else { LOGGER.error("Log4j2 could not find a logging implementation. " + "Please add log4j-core to the classpath. Using SimpleLogger to log to the console..."); - factory = new SimpleLoggerContextFactory(); + factory = SimpleLoggerContextFactory.INSTANCE; } LogManagerStatus.setInitialized(true); } @@ -157,7 +157,7 @@ public class LogManager { return factory.getContext(FQCN, null, null, true); } catch (final IllegalStateException ex) { LOGGER.warn(ex.getMessage() + " Using SimpleLogger"); - return new SimpleLoggerContextFactory().getContext(FQCN, null, null, true); + return SimpleLoggerContextFactory.INSTANCE.getContext(FQCN, null, null, true); } } @@ -176,7 +176,7 @@ public class LogManager { return factory.getContext(FQCN, null, null, currentContext, null, null); } catch (final IllegalStateException ex) { LOGGER.warn(ex.getMessage() + " Using SimpleLogger"); - return new SimpleLoggerContextFactory().getContext(FQCN, null, null, currentContext, null, null); + return SimpleLoggerContextFactory.INSTANCE.getContext(FQCN, null, null, currentContext, null, null); } } @@ -196,7 +196,7 @@ public class LogManager { return factory.getContext(FQCN, loader, null, currentContext); } catch (final IllegalStateException ex) { LOGGER.warn(ex.getMessage() + " Using SimpleLogger"); - return new SimpleLoggerContextFactory().getContext(FQCN, loader, null, currentContext); + return SimpleLoggerContextFactory.INSTANCE.getContext(FQCN, loader, null, currentContext); } } @@ -218,7 +218,7 @@ public class LogManager { return factory.getContext(FQCN, loader, externalContext, currentContext); } catch (final IllegalStateException ex) { LOGGER.warn(ex.getMessage() + " Using SimpleLogger"); - return new SimpleLoggerContextFactory().getContext(FQCN, loader, externalContext, currentContext); + return SimpleLoggerContextFactory.INSTANCE.getContext(FQCN, loader, externalContext, currentContext); } } @@ -240,7 +240,7 @@ public class LogManager { return factory.getContext(FQCN, loader, null, currentContext, configLocation, null); } catch (final IllegalStateException ex) { LOGGER.warn(ex.getMessage() + " Using SimpleLogger"); - return new SimpleLoggerContextFactory().getContext(FQCN, loader, null, currentContext, configLocation, + return SimpleLoggerContextFactory.INSTANCE.getContext(FQCN, loader, null, currentContext, configLocation, null); } } @@ -264,7 +264,7 @@ public class LogManager { return factory.getContext(FQCN, loader, externalContext, currentContext, configLocation, null); } catch (final IllegalStateException ex) { LOGGER.warn(ex.getMessage() + " Using SimpleLogger"); - return new SimpleLoggerContextFactory().getContext(FQCN, loader, externalContext, currentContext, + return SimpleLoggerContextFactory.INSTANCE.getContext(FQCN, loader, externalContext, currentContext, configLocation, null); } } @@ -289,7 +289,7 @@ public class LogManager { return factory.getContext(FQCN, loader, externalContext, currentContext, configLocation, name); } catch (final IllegalStateException ex) { LOGGER.warn(ex.getMessage() + " Using SimpleLogger"); - return new SimpleLoggerContextFactory().getContext(FQCN, loader, externalContext, currentContext, + return SimpleLoggerContextFactory.INSTANCE.getContext(FQCN, loader, externalContext, currentContext, configLocation, name); } } @@ -309,7 +309,7 @@ public class LogManager { return factory.getContext(fqcn, null, null, currentContext); } catch (final IllegalStateException ex) { LOGGER.warn(ex.getMessage() + " Using SimpleLogger"); - return new SimpleLoggerContextFactory().getContext(fqcn, null, null, currentContext); + return SimpleLoggerContextFactory.INSTANCE.getContext(fqcn, null, null, currentContext); } } @@ -331,7 +331,7 @@ public class LogManager { return factory.getContext(fqcn, loader, null, currentContext); } catch (final IllegalStateException ex) { LOGGER.warn(ex.getMessage() + " Using SimpleLogger"); - return new SimpleLoggerContextFactory().getContext(fqcn, loader, null, currentContext); + return SimpleLoggerContextFactory.INSTANCE.getContext(fqcn, loader, null, currentContext); } } @@ -356,7 +356,7 @@ public class LogManager { return factory.getContext(fqcn, loader, null, currentContext, configLocation, name); } catch (final IllegalStateException ex) { LOGGER.warn(ex.getMessage() + " Using SimpleLogger"); - return new SimpleLoggerContextFactory().getContext(fqcn, loader, null, currentContext); + return SimpleLoggerContextFactory.INSTANCE.getContext(fqcn, loader, null, currentContext); } } diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java index 109798c..ac14f37 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java @@ -19,7 +19,6 @@ package org.apache.logging.log4j.simple; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; -import java.nio.file.Files; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.message.MessageFactory; @@ -34,6 +33,9 @@ import org.apache.logging.log4j.util.PropertiesUtil; */ public class SimpleLoggerContext implements LoggerContext { + /** Singleton instance. */ + static final SimpleLoggerContext INSTANCE = new SimpleLoggerContext(); + private static final String SYSTEM_OUT = "system.out"; private static final String SYSTEM_ERR = "system.err"; @@ -126,6 +128,17 @@ public class SimpleLoggerContext implements LoggerContext { return loggerRegistry.getLogger(name, messageFactory); } + /** + * Gets the LoggerRegistry. + * + * @return the LoggerRegistry. + * @since 2.17.2 + */ + @Override + public LoggerRegistry<ExtendedLogger> getLoggerRegistry() { + return loggerRegistry; + } + @Override public boolean hasLogger(final String name) { return false; diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContextFactory.java b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContextFactory.java index 1275bd7..bf9c577 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContextFactory.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContextFactory.java @@ -22,22 +22,24 @@ import org.apache.logging.log4j.spi.LoggerContext; import org.apache.logging.log4j.spi.LoggerContextFactory; /** - * + * Simple and stateless {@link LoggerContextFactory}. */ public class SimpleLoggerContextFactory implements LoggerContextFactory { - private static final LoggerContext context = new SimpleLoggerContext(); + /** + * Singleton instance. + */ + public static final SimpleLoggerContextFactory INSTANCE = new SimpleLoggerContextFactory(); @Override - public LoggerContext getContext(final String fqcn, final ClassLoader loader, final Object externalContext, - final boolean currentContext) { - return context; + public LoggerContext getContext(final String fqcn, final ClassLoader loader, final Object externalContext, final boolean currentContext) { + return SimpleLoggerContext.INSTANCE; } @Override - public LoggerContext getContext(final String fqcn, final ClassLoader loader, final Object externalContext, - final boolean currentContext, final URI configLocation, final String name) { - return context; + public LoggerContext getContext(final String fqcn, final ClassLoader loader, final Object externalContext, final boolean currentContext, + final URI configLocation, final String name) { + return SimpleLoggerContext.INSTANCE; } @Override diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerContext.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerContext.java index ff438e4..84837d5 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerContext.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerContext.java @@ -16,6 +16,7 @@ */ package org.apache.logging.log4j.spi; +import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.message.MessageFactory; /** @@ -40,6 +41,7 @@ public interface LoggerContext { return getLogger(canonicalName != null ? canonicalName : cls.getName()); } + /** * Gets an ExtendedLogger using the fully qualified name of the Class as the Logger name. * @param cls The Class whose name should be used as the Logger name. @@ -70,6 +72,16 @@ public interface LoggerContext { ExtendedLogger getLogger(String name, MessageFactory messageFactory); /** + * Gets the LoggerRegistry. + * + * @return the LoggerRegistry. + * @since 2.17.2 + */ + default LoggerRegistry<? extends Logger> getLoggerRegistry() { + return null; + } + + /** * Gets an object by its name. * @param key The object's key. * @return The Object that is associated with the key, if any. diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java index c7d67f7..b41392f 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java @@ -29,7 +29,7 @@ import static org.junit.jupiter.api.Assertions.assertNull; public class TestConfiguratorError { @RegisterExtension - static final LoggerContextFactoryExtension extension = new LoggerContextFactoryExtension(new SimpleLoggerContextFactory()); + static final LoggerContextFactoryExtension EXTENSION = new LoggerContextFactoryExtension(SimpleLoggerContextFactory.INSTANCE); @Test public void testErrorNoClassLoader() throws Exception { diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java index 4eabb21..3d1bc50 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java @@ -528,6 +528,16 @@ public class LoggerContext extends AbstractLifeCycle } /** + * Gets the LoggerRegistry. + * + * @return the LoggerRegistry. + * @since 2.17.2 + */ + public LoggerRegistry<Logger> getLoggerRegistry() { + return loggerRegistry; + } + + /** * Determines if the specified Logger exists. * * @param name The Logger name to search for.
