Package org.jboss.logmanager

## Class CallerClassLoaderLogContextSelector

- java.lang.Object
- - org.jboss.logmanager.CallerClassLoaderLogContextSelector

All Implemented Interfaces:
  `LogContextSelector`

    public final class CallerClassLoaderLogContextSelector
    extends java.lang.Object
    implements LogContextSelector

A log context selector which chooses a log context based on the caller's classloader. The first caller that is not a log API or does not have a `null` classloader will be the class loader used.

### Constructor Summary

Constructors
`CallerClassLoaderLogContextSelector()` Construct a new instance.
`CallerClassLoaderLogContextSelector​(boolean checkParentClassLoaders)` Construct a new instance.
`CallerClassLoaderLogContextSelector​(LogContextSelector defaultSelector)` Construct a new instance.
`CallerClassLoaderLogContextSelector​(LogContextSelector defaultSelector, boolean checkParentClassLoaders)` Construct a new instance.

### Method Summary

All Methods Instance Methods Concrete Methods
`boolean` `addLogApiClassLoader​(java.lang.ClassLoader apiClassLoader)` Register a class loader which is a known log API, and thus should be skipped over when searching for the log context to use for the caller class.
`LogContext` `getLogContext()` Get the current log context.
`void` `registerLogContext​(java.lang.ClassLoader classLoader, LogContext logContext)` Register a class loader with a log context.
`boolean` `removeLogApiClassLoader​(java.lang.ClassLoader apiClassLoader)` Remove a class loader from the known log APIs set.
`boolean` `unregisterLogContext​(java.lang.ClassLoader classLoader, LogContext logContext)` Unregister a class loader/log context association.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### CallerClassLoaderLogContextSelector

    public CallerClassLoaderLogContextSelector​(LogContextSelector defaultSelector)

Construct a new instance. If no matching log context is found, the provided default selector is consulted.

Parameters:
  `defaultSelector` - the selector to consult if no matching log context is found

#### CallerClassLoaderLogContextSelector

    public CallerClassLoaderLogContextSelector​(LogContextSelector defaultSelector,
                                               boolean checkParentClassLoaders)

Construct a new instance. If no matching log context is found, the provided default selector is consulted.

If the `checkParentClassLoaders` is set to `true` this selector recursively searches the class loader parents until a match is found or a `null` parent is found.

Parameters:
  `defaultSelector` - the selector to consult if no matching log context is found
  `checkParentClassLoaders` - `true` if the `log context` could not found for the class loader and the `parent class loader` should be checked

#### CallerClassLoaderLogContextSelector

    public CallerClassLoaderLogContextSelector()

Construct a new instance. If no matching log context is found, the system context is used.

#### CallerClassLoaderLogContextSelector

    public CallerClassLoaderLogContextSelector​(boolean checkParentClassLoaders)

Construct a new instance. If no matching log context is found, the system context is used.

If the `checkParentClassLoaders` is set to `true` this selector recursively searches the class loader parents until a match is found or a `null` parent is found.

Parameters:
  `checkParentClassLoaders` - `true` if the `log context` could not found for the class loader and the `parent class loader` should be checked

### Method Detail

#### getLogContext

    public LogContext getLogContext()

Get the current log context. This instance will consult the call stack to see if the first callers classloader is associated with a log context. The first caller is determined by the first class loader that is not registered as a log API.

Specified by:
  `getLogContext` in interface `LogContextSelector`
Returns:
  the current log context

#### addLogApiClassLoader

    public boolean addLogApiClassLoader​(java.lang.ClassLoader apiClassLoader)

Register a class loader which is a known log API, and thus should be skipped over when searching for the log context to use for the caller class.

Parameters:
  `apiClassLoader` - the API class loader
Returns:
  `true` if this class loader was previously unknown, or `false` if it was already registered

#### removeLogApiClassLoader

    public boolean removeLogApiClassLoader​(java.lang.ClassLoader apiClassLoader)

Remove a class loader from the known log APIs set.

Parameters:
  `apiClassLoader` - the API class loader
Returns:
  `true` if the class loader was removed, or `false` if it was not known to this selector

#### registerLogContext

    public void registerLogContext​(java.lang.ClassLoader classLoader,
                                   LogContext logContext)
                            throws java.lang.IllegalArgumentException

Register a class loader with a log context. This method requires the `registerLogContext` `RuntimePermission`.

Parameters:
  `classLoader` - the classloader
  `logContext` - the log context
Throws:
  `java.lang.IllegalArgumentException` - if the classloader is already associated with a log context

#### unregisterLogContext

    public boolean unregisterLogContext​(java.lang.ClassLoader classLoader,
                                        LogContext logContext)

Unregister a class loader/log context association. This method requires the `unregisterLogContext` `RuntimePermission`.

Parameters:
  `classLoader` - the classloader
  `logContext` - the log context
Returns:
  `true` if the association exists and was removed, `false` otherwise