Class InternalLoggerRegistry


  • @NullMarked
    public final class InternalLoggerRegistry
    extends java.lang.Object
    A registry of Loggers namespaced by name and message factory. This class is internally used by LoggerContext.

    We don't use the registry from Log4j API to keep Log4j Core independent from the version of Log4j API at runtime. This also allows Log4j Core to evolve independently from Log4j API.

    Since:
    2.25.0
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      Logger computeIfAbsent​(java.lang.String name, MessageFactory messageFactory, java.util.function.BiFunction<java.lang.String,​MessageFactory,​Logger> loggerSupplier)  
      private void expungeStaleEntries()
      Expunges stale entries for logger references and message factories.
      @Nullable Logger getLogger​(java.lang.String name, MessageFactory messageFactory)
      Returns the logger associated with the given name and message factory.
      java.util.Collection<Logger> getLoggers()  
      boolean hasLogger​(java.lang.String name, java.lang.Class<? extends MessageFactory> messageFactoryClass)
      Checks if a logger associated with the given name and message factory type exists.
      boolean hasLogger​(java.lang.String name, MessageFactory messageFactory)
      Checks if a logger associated with the given name and message factory exists.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • loggerRefByNameByMessageFactory

        private final java.util.Map<MessageFactory,​java.util.Map<java.lang.String,​java.lang.ref.WeakReference<Logger>>> loggerRefByNameByMessageFactory
      • lock

        private final java.util.concurrent.locks.ReadWriteLock lock
      • readLock

        private final java.util.concurrent.locks.Lock readLock
      • writeLock

        private final java.util.concurrent.locks.Lock writeLock
      • staleLoggerRefs

        private final java.lang.ref.ReferenceQueue<Logger> staleLoggerRefs
    • Constructor Detail

      • InternalLoggerRegistry

        public InternalLoggerRegistry()
    • Method Detail

      • expungeStaleEntries

        private void expungeStaleEntries()
        Expunges stale entries for logger references and message factories.
      • getLogger

        public @Nullable Logger getLogger​(java.lang.String name,
                                          MessageFactory messageFactory)
        Returns the logger associated with the given name and message factory.
        Parameters:
        name - a logger name
        messageFactory - a message factory
        Returns:
        the logger associated with the given name and message factory
      • getLoggers

        public java.util.Collection<Logger> getLoggers()
      • hasLogger

        public boolean hasLogger​(java.lang.String name,
                                 MessageFactory messageFactory)
        Checks if a logger associated with the given name and message factory exists.
        Parameters:
        name - a logger name
        messageFactory - a message factory
        Returns:
        true, if the logger exists; false otherwise.
      • hasLogger

        public boolean hasLogger​(java.lang.String name,
                                 java.lang.Class<? extends MessageFactory> messageFactoryClass)
        Checks if a logger associated with the given name and message factory type exists.
        Parameters:
        name - a logger name
        messageFactoryClass - a message factory class
        Returns:
        true, if the logger exists; false otherwise.
      • computeIfAbsent

        public Logger computeIfAbsent​(java.lang.String name,
                                      MessageFactory messageFactory,
                                      java.util.function.BiFunction<java.lang.String,​MessageFactory,​Logger> loggerSupplier)