Class LogContext

  • All Implemented Interfaces:
    AutoCloseable

    public final class LogContext
    extends Object
    implements AutoCloseable
    A logging context, for producing isolated logging environments.
    • Field Detail

      • DEFAULT_LOG_CONTEXT_SELECTOR

        public static final LogContextSelector DEFAULT_LOG_CONTEXT_SELECTOR
        The default log context selector, which always returns the system log context.
    • Method Detail

      • create

        public static LogContext create​(boolean strong)
        Create a new log context. If a security manager is installed, the caller must have the "createLogContext" RuntimePermission to invoke this method.
        Parameters:
        strong - true if the context should use strong references, false to use (default) weak references for automatic logger GC
        Returns:
        a new log context
      • create

        public static LogContext create​(boolean strong,
                                        LogContextInitializer initializer)
        Create a new log context. If a security manager is installed, the caller must have the "createLogContext" RuntimePermission to invoke this method.
        Parameters:
        strong - true if the context should use strong references, false to use (default) weak references for automatic logger GC
        initializer - the log context initializer to use (must not be null)
        Returns:
        a new log context
      • create

        public static LogContext create()
        Create a new log context. If a security manager is installed, the caller must have the "createLogContext" RuntimePermission to invoke this method.
        Returns:
        a new log context
      • create

        public static LogContext create​(LogContextInitializer initializer)
        Create a new log context. If a security manager is installed, the caller must have the "createLogContext" RuntimePermission to invoke this method.
        Parameters:
        initializer - the log context initializer to use (must not be null)
        Returns:
        a new log context
      • getAttachment

        public <V> V getAttachment​(Logger.AttachmentKey<V> key)
        Get the attachment value for a given key, or null if there is no such attachment. Log context attachments are placed on the root logger and can also be accessed there.
        Type Parameters:
        V - the attachment value type
        Parameters:
        key - the key
        Returns:
        the attachment, or null if there is none for this key
      • attach

        public <V> V attach​(Logger.AttachmentKey<V> key,
                            V value)
                     throws SecurityException
        Attach an object to this log context under a given key. A strong reference is maintained to the key and value for as long as this log context exists. Log context attachments are placed on the root logger and can also be accessed there.
        Type Parameters:
        V - the attachment value type
        Parameters:
        key - the attachment key
        value - the attachment value
        Returns:
        the old attachment, if there was one
        Throws:
        SecurityException - if a security manager exists and if the caller does not have LoggingPermission(control)
        IllegalArgumentException - if the attachment cannot be added because the maximum has been reached
      • attachIfAbsent

        public <V> V attachIfAbsent​(Logger.AttachmentKey<V> key,
                                    V value)
                             throws SecurityException
        Attach an object to this log context under a given key, if such an attachment does not already exist. A strong reference is maintained to the key and value for as long as this log context exists. Log context attachments are placed on the root logger and can also be accessed there.
        Type Parameters:
        V - the attachment value type
        Parameters:
        key - the attachment key
        value - the attachment value
        Returns:
        the current attachment, if there is one, or null if the value was successfully attached
        Throws:
        SecurityException - if a security manager exists and if the caller does not have LoggingPermission(control)
        IllegalArgumentException - if the attachment cannot be added because the maximum has been reached
      • detach

        public <V> V detach​(Logger.AttachmentKey<V> key)
                     throws SecurityException
        Remove an attachment. Log context attachments are placed on the root logger and can also be accessed there.
        Type Parameters:
        V - the attachment value type
        Parameters:
        key - the attachment key
        Returns:
        the old value, or null if there was none
        Throws:
        SecurityException - if a security manager exists and if the caller does not have LoggingPermission(control)
      • getLogger

        public Logger getLogger​(String name)
        Get a logger with the given name from this logging context.
        Parameters:
        name - the logger name
        Returns:
        the logger instance
        See Also:
        LogManager.getLogger(String)
      • getLoggerIfExists

        public Logger getLoggerIfExists​(String name)
        Get a logger with the given name from this logging context, if a logger node exists at that location.
        Parameters:
        name - the logger name
        Returns:
        the logger instance, or null if no such logger node exists
      • getAttachment

        public <V> V getAttachment​(String loggerName,
                                   Logger.AttachmentKey<V> key)
        Get a logger attachment for a logger name, if it exists.
        Type Parameters:
        V - the attachment value type
        Parameters:
        loggerName - the logger name
        key - the attachment key
        Returns:
        the attachment or null if the logger or the attachment does not exist
      • registerLevel

        public void registerLevel​(Level level)
        Register a level instance with this log context. The level can then be looked up by name. Only a weak reference to the level instance will be kept. Any previous level registration for the given level's name will be overwritten.
        Parameters:
        level - the level to register
      • registerLevel

        public void registerLevel​(Level level,
                                  boolean strong)
        Register a level instance with this log context. The level can then be looked up by name. Any previous level registration for the given level's name will be overwritten.
        Parameters:
        level - the level to register
        strong - true to strongly reference the level, or false to weakly reference it
      • unregisterLevel

        public void unregisterLevel​(Level level)
        Unregister a previously registered level. Log levels that are not registered may still be used, they just will not be findable by name.
        Parameters:
        level - the level to unregister
      • getSystemLogContext

        public static LogContext getSystemLogContext()
        Get the system log context.
        Returns:
        the system log context
      • getLogContext

        public static LogContext getLogContext()
        Get the currently active log context.
        Returns:
        the currently active log context
      • setLogContextSelector

        public static void setLogContextSelector​(LogContextSelector newSelector)
        Set a new log context selector. If a security manager is installed, the caller must have the "setLogContextSelector" RuntimePermission to invoke this method.
        Parameters:
        newSelector - the new selector.
      • getLogContextSelector

        public static LogContextSelector getLogContextSelector()
        Returns the currently set log context selector.
        Returns:
        the log context selector
      • getLoggerNames

        public Enumeration<String> getLoggerNames()
        Returns an enumeration of the logger names that have been created. This does not return names of loggers that may have been garbage collected. Logger names added after the enumeration has been retrieved may also be added to the enumeration.
        Returns:
        an enumeration of the logger names
        See Also:
        LogManager.getLoggerNames()
      • addCloseHandler

        public void addCloseHandler​(AutoCloseable closeHandler)
        Adds a handler invoked during the close of this log context. The close handlers will be invoked in the order they are added.

        The loggers associated with this context will always be closed.

        Parameters:
        closeHandler - the close handler to use
      • getCloseHandlers

        public Set<AutoCloseable> getCloseHandlers()
        Gets the current close handlers associated with this log context.
        Returns:
        the current close handlers
      • setCloseHandlers

        public void setCloseHandlers​(Collection<AutoCloseable> closeHandlers)
        Clears any current close handlers associated with log context, then adds the handlers to be invoked during the close of this log context. The close handlers will be invoked in the order they are added.

        The loggers associated with this context will always be closed.

        Parameters:
        closeHandlers - the close handlers to use