28
28
import java .util .concurrent .locks .Lock ;
29
29
import java .util .concurrent .locks .ReadWriteLock ;
30
30
import java .util .concurrent .locks .ReentrantReadWriteLock ;
31
+ import org .apache .logging .log4j .Logger ;
31
32
import org .apache .logging .log4j .message .MessageFactory ;
32
33
import org .apache .logging .log4j .message .ParameterizedMessageFactory ;
33
34
import org .jspecify .annotations .NullMarked ;
@@ -246,7 +247,10 @@ public boolean hasLogger(final String name, final Class<? extends MessageFactory
246
247
247
248
/**
248
249
* Registers the provided logger.
249
- * <b>Logger name and message factory parameters are ignored</b>, those will be obtained from the logger instead.
250
+ * <p>
251
+ * The logger will be registered using the keys provided by the {@code name} and {@code messageFactory} parameters
252
+ * and the values of {@link Logger#getName()} and {@link Logger#getMessageFactory()}.
253
+ * </p>
250
254
*
251
255
* @param name a logger name
252
256
* @param messageFactory a message factory
@@ -263,9 +267,16 @@ public void putIfAbsent(final String name, @Nullable final MessageFactory messag
263
267
try {
264
268
final MessageFactory effectiveMessageFactory =
265
269
messageFactory != null ? messageFactory : ParameterizedMessageFactory .INSTANCE ;
270
+ // Register using the keys provided by the caller
266
271
loggerByMessageFactoryByName
267
272
.computeIfAbsent (name , this ::createLoggerRefByMessageFactoryMap )
268
273
.putIfAbsent (effectiveMessageFactory , logger );
274
+ // Also register using the values extracted from `logger`
275
+ if (!name .equals (logger .getName ()) || !effectiveMessageFactory .equals (logger .getMessageFactory ())) {
276
+ loggerByMessageFactoryByName
277
+ .computeIfAbsent (logger .getName (), this ::createLoggerRefByMessageFactoryMap )
278
+ .putIfAbsent (logger .getMessageFactory (), logger );
279
+ }
269
280
} finally {
270
281
writeLock .unlock ();
271
282
}
0 commit comments