Skip to content

Commit bf79552

Browse files
committed
Minimize changes from 2.24.1
1 parent 041e5eb commit bf79552

File tree

5 files changed

+50
-43
lines changed

5 files changed

+50
-43
lines changed

log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLoggerContext.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,13 @@ public ExtendedLogger getLogger(final String name) {
102102
public ExtendedLogger getLogger(final String name, @Nullable final MessageFactory messageFactory) {
103103
final MessageFactory effectiveMessageFactory =
104104
messageFactory != null ? messageFactory : DEFAULT_MESSAGE_FACTORY;
105-
ExtendedLogger logger = loggerRegistry.getLogger(name, effectiveMessageFactory);
106-
if (logger == null) {
107-
logger = createLogger(name, effectiveMessageFactory);
108-
loggerRegistry.putIfAbsent(name, effectiveMessageFactory, logger);
105+
final ExtendedLogger oldLogger = loggerRegistry.getLogger(name, effectiveMessageFactory);
106+
if (oldLogger != null) {
107+
return oldLogger;
109108
}
110-
return logger;
109+
final ExtendedLogger newLogger = createLogger(name, effectiveMessageFactory);
110+
loggerRegistry.putIfAbsent(name, effectiveMessageFactory, newLogger);
111+
return loggerRegistry.getLogger(name, effectiveMessageFactory);
111112
}
112113

113114
private ExtendedLogger createLogger(final String name, @Nullable final MessageFactory messageFactory) {

log4j-api/src/main/java/org/apache/logging/log4j/spi/LoggerRegistry.java

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
import java.util.ArrayList;
2222
import java.util.Collection;
23+
import java.util.Collections;
2324
import java.util.HashMap;
2425
import java.util.Map;
25-
import java.util.Optional;
2626
import java.util.WeakHashMap;
2727
import java.util.concurrent.ConcurrentHashMap;
2828
import java.util.concurrent.locks.Lock;
@@ -39,7 +39,7 @@
3939
@NullMarked
4040
public class LoggerRegistry<T extends ExtendedLogger> {
4141

42-
private final Map<MessageFactory, Map<String, T>> loggerByNameByMessageFactory = new WeakHashMap<>();
42+
private final Map<String, Map<MessageFactory, T>> loggerByMessageFactoryByName = new HashMap<>();
4343

4444
private final ReadWriteLock lock = new ReentrantReadWriteLock();
4545

@@ -160,12 +160,10 @@ public LoggerRegistry(@Nullable final MapFactory<T> mapFactory) {
160160
requireNonNull(name, "name");
161161
readLock.lock();
162162
try {
163+
final @Nullable Map<MessageFactory, T> loggerByMessageFactory = loggerByMessageFactoryByName.get(name);
163164
final MessageFactory effectiveMessageFactory =
164165
messageFactory != null ? messageFactory : ParameterizedMessageFactory.INSTANCE;
165-
return Optional.of(loggerByNameByMessageFactory)
166-
.map(loggerByNameByMessageFactory -> loggerByNameByMessageFactory.get(effectiveMessageFactory))
167-
.map(loggerByName -> loggerByName.get(name))
168-
.orElse(null);
166+
return loggerByMessageFactory == null ? null : loggerByMessageFactory.get(effectiveMessageFactory);
169167
} finally {
170168
readLock.unlock();
171169
}
@@ -179,8 +177,8 @@ public Collection<T> getLoggers(final Collection<T> destination) {
179177
requireNonNull(destination, "destination");
180178
readLock.lock();
181179
try {
182-
loggerByNameByMessageFactory.values().stream()
183-
.flatMap(loggerByName -> loggerByName.values().stream())
180+
loggerByMessageFactoryByName.values().stream()
181+
.flatMap(loggerByMessageFactory -> loggerByMessageFactory.values().stream())
184182
.forEach(destination::add);
185183
} finally {
186184
readLock.unlock();
@@ -203,7 +201,8 @@ public Collection<T> getLoggers(final Collection<T> destination) {
203201
@Deprecated
204202
public boolean hasLogger(final String name) {
205203
requireNonNull(name, "name");
206-
return getLogger(name) != null;
204+
final @Nullable T logger = getLogger(name);
205+
return logger != null;
207206
}
208207

209208
/**
@@ -221,7 +220,8 @@ public boolean hasLogger(final String name) {
221220
*/
222221
public boolean hasLogger(final String name, @Nullable final MessageFactory messageFactory) {
223222
requireNonNull(name, "name");
224-
return getLogger(name, messageFactory) != null;
223+
final @Nullable T logger = getLogger(name, messageFactory);
224+
return logger != null;
225225
}
226226

227227
/**
@@ -237,9 +237,8 @@ public boolean hasLogger(final String name, final Class<? extends MessageFactory
237237
requireNonNull(messageFactoryClass, "messageFactoryClass");
238238
readLock.lock();
239239
try {
240-
return loggerByNameByMessageFactory.entrySet().stream()
241-
.filter(entry -> messageFactoryClass.equals(entry.getKey().getClass()))
242-
.anyMatch(entry -> entry.getValue().containsKey(name));
240+
return loggerByMessageFactoryByName.getOrDefault(name, Collections.emptyMap()).keySet().stream()
241+
.anyMatch(messageFactory -> messageFactoryClass.equals(messageFactory.getClass()));
243242
} finally {
244243
readLock.unlock();
245244
}
@@ -249,26 +248,30 @@ public boolean hasLogger(final String name, final Class<? extends MessageFactory
249248
* Registers the provided logger.
250249
* <b>Logger name and message factory parameters are ignored</b>, those will be obtained from the logger instead.
251250
*
252-
* @param name ignored – kept for backward compatibility
253-
* @param messageFactory ignored – kept for backward compatibility
251+
* @param name a logger name
252+
* @param messageFactory a message factory
254253
* @param logger a logger instance
255254
*/
256-
public void putIfAbsent(
257-
@Nullable final String name, @Nullable final MessageFactory messageFactory, final T logger) {
255+
public void putIfAbsent(final String name, @Nullable final MessageFactory messageFactory, final T logger) {
258256

259257
// Check arguments
258+
requireNonNull(name, "name");
260259
requireNonNull(logger, "logger");
261260

262261
// Insert the logger
263262
writeLock.lock();
264263
try {
265-
final String loggerName = logger.getName();
266-
final MessageFactory loggerMessageFactory = logger.getMessageFactory();
267-
loggerByNameByMessageFactory
268-
.computeIfAbsent(loggerMessageFactory, ignored -> new HashMap<>())
269-
.putIfAbsent(loggerName, logger);
264+
final MessageFactory effectiveMessageFactory =
265+
messageFactory != null ? messageFactory : ParameterizedMessageFactory.INSTANCE;
266+
loggerByMessageFactoryByName
267+
.computeIfAbsent(name, this::createLoggerRefByMessageFactoryMap)
268+
.putIfAbsent(effectiveMessageFactory, logger);
270269
} finally {
271270
writeLock.unlock();
272271
}
273272
}
273+
274+
private Map<MessageFactory, T> createLoggerRefByMessageFactoryMap(final String ignored) {
275+
return new WeakHashMap<>();
276+
}
274277
}

log4j-taglib/src/main/java/org/apache/logging/log4j/taglib/Log4jTaglibLoggerContext.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,16 @@ public Log4jTaglibLogger getLogger(final String name) {
7373
public Log4jTaglibLogger getLogger(final String name, @Nullable final MessageFactory messageFactory) {
7474
final MessageFactory effectiveMessageFactory =
7575
messageFactory != null ? messageFactory : DEFAULT_MESSAGE_FACTORY;
76-
Log4jTaglibLogger logger = loggerRegistry.getLogger(name, effectiveMessageFactory);
77-
if (logger == null) {
78-
logger = createLogger(name, effectiveMessageFactory);
79-
loggerRegistry.putIfAbsent(name, effectiveMessageFactory, logger);
76+
final Log4jTaglibLogger oldLogger = loggerRegistry.getLogger(name, effectiveMessageFactory);
77+
if (oldLogger != null) {
78+
return oldLogger;
8079
}
81-
return logger;
80+
final Log4jTaglibLogger newLogger = createLogger(name, effectiveMessageFactory);
81+
loggerRegistry.putIfAbsent(name, effectiveMessageFactory, newLogger);
82+
return loggerRegistry.getLogger(name, effectiveMessageFactory);
8283
}
8384

84-
private Log4jTaglibLogger createLogger(final String name, @Nullable final MessageFactory messageFactory) {
85+
private Log4jTaglibLogger createLogger(final String name, final MessageFactory messageFactory) {
8586
final LoggerContext loggerContext = LogManager.getContext(false);
8687
final ExtendedLogger delegateLogger = loggerContext.getLogger(name, messageFactory);
8788
return new Log4jTaglibLogger(delegateLogger, name, delegateLogger.getMessageFactory());

log4j-to-jul/src/main/java/org/apache/logging/log4j/tojul/JULLoggerContext.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,13 @@ public ExtendedLogger getLogger(final String name) {
5252
public ExtendedLogger getLogger(final String name, @Nullable final MessageFactory messageFactory) {
5353
final MessageFactory effectiveMessageFactory =
5454
messageFactory != null ? messageFactory : DEFAULT_MESSAGE_FACTORY;
55-
ExtendedLogger logger = loggerRegistry.getLogger(name, effectiveMessageFactory);
56-
if (logger == null) {
57-
logger = createLogger(name, effectiveMessageFactory);
58-
loggerRegistry.putIfAbsent(name, effectiveMessageFactory, logger);
55+
final ExtendedLogger oldLogger = loggerRegistry.getLogger(name, effectiveMessageFactory);
56+
if (oldLogger != null) {
57+
return oldLogger;
5958
}
60-
return logger;
59+
final ExtendedLogger newLogger = createLogger(name, effectiveMessageFactory);
60+
loggerRegistry.putIfAbsent(name, effectiveMessageFactory, newLogger);
61+
return loggerRegistry.getLogger(name, effectiveMessageFactory);
6162
}
6263

6364
private static ExtendedLogger createLogger(final String name, @Nullable final MessageFactory messageFactory) {

log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLoggerContext.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,13 @@ public ExtendedLogger getLogger(final String name) {
4545
public ExtendedLogger getLogger(final String name, @Nullable final MessageFactory messageFactory) {
4646
final MessageFactory effectiveMessageFactory =
4747
messageFactory != null ? messageFactory : DEFAULT_MESSAGE_FACTORY;
48-
ExtendedLogger logger = loggerRegistry.getLogger(name, effectiveMessageFactory);
49-
if (logger == null) {
50-
logger = createLogger(name, effectiveMessageFactory);
51-
loggerRegistry.putIfAbsent(name, effectiveMessageFactory, logger);
48+
final ExtendedLogger oldLogger = loggerRegistry.getLogger(name, effectiveMessageFactory);
49+
if (oldLogger != null) {
50+
return oldLogger;
5251
}
53-
return logger;
52+
final ExtendedLogger newLogger = createLogger(name, effectiveMessageFactory);
53+
loggerRegistry.putIfAbsent(name, effectiveMessageFactory, newLogger);
54+
return loggerRegistry.getLogger(name, effectiveMessageFactory);
5455
}
5556

5657
private static ExtendedLogger createLogger(final String name, @Nullable final MessageFactory messageFactory) {

0 commit comments

Comments
 (0)