Skip to content

Commit 1a4c864

Browse files
committed
changed the removeLogger to not iterate
1 parent adee3d5 commit 1a4c864

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

log4j-core/src/main/java/org/apache/logging/log4j/core/util/internal/InternalLoggerRegistry.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,21 @@ private void expungeStaleEntries() {
7979
* Removes a logger from the registry.
8080
*/
8181
private void removeLogger(Reference<? extends Logger> loggerRef) {
82+
Logger logger = loggerRef.get();
83+
if (logger == null) return; // Logger already cleared
84+
85+
MessageFactory messageFactory = logger.getMessageFactory();
86+
String name = logger.getName();
87+
8288
writeLock.lock();
8389
try {
84-
loggerRefByNameByMessageFactory.values().forEach(map -> map.values().removeIf(ref -> ref == loggerRef));
90+
Map<String, WeakReference<Logger>> loggerRefByName = loggerRefByNameByMessageFactory.get(messageFactory);
91+
if (loggerRefByName != null) {
92+
loggerRefByName.remove(name);
93+
if (loggerRefByName.isEmpty()) {
94+
loggerRefByNameByMessageFactory.remove(messageFactory); // Cleanup
95+
}
96+
}
8597
} finally {
8698
writeLock.unlock();
8799
}

0 commit comments

Comments
 (0)