2020import java .io .PrintStream ;
2121import org .apache .logging .log4j .Level ;
2222import org .apache .logging .log4j .message .MessageFactory ;
23+ import org .apache .logging .log4j .message .ParameterizedMessageFactory ;
2324import org .apache .logging .log4j .simple .internal .SimpleProvider ;
24- import org .apache .logging .log4j .spi .AbstractLogger ;
2525import org .apache .logging .log4j .spi .ExtendedLogger ;
2626import org .apache .logging .log4j .spi .LoggerContext ;
2727import org .apache .logging .log4j .spi .LoggerRegistry ;
2828import org .apache .logging .log4j .util .PropertiesUtil ;
29+ import org .jspecify .annotations .Nullable ;
2930
3031/**
3132 * A simple {@link LoggerContext} implementation.
@@ -41,6 +42,8 @@ public class SimpleLoggerContext implements LoggerContext {
4142 /** All system properties used by <code>SimpleLog</code> start with this */
4243 protected static final String SYSTEM_PREFIX = "org.apache.logging.log4j.simplelog." ;
4344
45+ private static final MessageFactory DEFAULT_MESSAGE_FACTORY = ParameterizedMessageFactory .INSTANCE ;
46+
4447 private final PropertiesUtil props ;
4548
4649 /** Include the instance name in the log message? */
@@ -96,14 +99,20 @@ public ExtendedLogger getLogger(final String name) {
9699 }
97100
98101 @ Override
99- public ExtendedLogger getLogger (final String name , final MessageFactory messageFactory ) {
100- // Note: This is the only method where we add entries to the 'loggerRegistry' ivar.
101- final ExtendedLogger extendedLogger = loggerRegistry . getLogger ( name , messageFactory ) ;
102- if ( extendedLogger != null ) {
103- AbstractLogger . checkMessageFactory ( extendedLogger , messageFactory );
104- return extendedLogger ;
102+ public ExtendedLogger getLogger (final String name , @ Nullable final MessageFactory messageFactory ) {
103+ final MessageFactory effectiveMessageFactory =
104+ messageFactory != null ? messageFactory : DEFAULT_MESSAGE_FACTORY ;
105+ final ExtendedLogger oldLogger = loggerRegistry . getLogger ( name , effectiveMessageFactory );
106+ if ( oldLogger != null ) {
107+ return oldLogger ;
105108 }
106- final SimpleLogger simpleLogger = new SimpleLogger (
109+ final ExtendedLogger newLogger = createLogger (name , effectiveMessageFactory );
110+ loggerRegistry .putIfAbsent (name , effectiveMessageFactory , newLogger );
111+ return loggerRegistry .getLogger (name , effectiveMessageFactory );
112+ }
113+
114+ private ExtendedLogger createLogger (final String name , @ Nullable final MessageFactory messageFactory ) {
115+ return new SimpleLogger (
107116 name ,
108117 defaultLevel ,
109118 showLogName ,
@@ -114,8 +123,6 @@ public ExtendedLogger getLogger(final String name, final MessageFactory messageF
114123 messageFactory ,
115124 props ,
116125 stream );
117- loggerRegistry .putIfAbsent (name , messageFactory , simpleLogger );
118- return loggerRegistry .getLogger (name , messageFactory );
119126 }
120127
121128 /**
@@ -131,16 +138,18 @@ public LoggerRegistry<ExtendedLogger> getLoggerRegistry() {
131138
132139 @ Override
133140 public boolean hasLogger (final String name ) {
134- return false ;
141+ return loggerRegistry . hasLogger ( name , DEFAULT_MESSAGE_FACTORY ) ;
135142 }
136143
137144 @ Override
138145 public boolean hasLogger (final String name , final Class <? extends MessageFactory > messageFactoryClass ) {
139- return false ;
146+ return loggerRegistry . hasLogger ( name , messageFactoryClass ) ;
140147 }
141148
142149 @ Override
143- public boolean hasLogger (final String name , final MessageFactory messageFactory ) {
144- return false ;
150+ public boolean hasLogger (final String name , @ Nullable final MessageFactory messageFactory ) {
151+ final MessageFactory effectiveMessageFactory =
152+ messageFactory != null ? messageFactory : DEFAULT_MESSAGE_FACTORY ;
153+ return loggerRegistry .hasLogger (name , effectiveMessageFactory );
145154 }
146155}
0 commit comments