Package org.jboss.logmanager

# Class CallerClassLoaderLogContextSelector

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

All Implemented Interfaces:
  `LogContextSelector`

public final class CallerClassLoaderLogContextSelector extends 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
Constructor
Description
`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

Modifier and Type
Method
Description
`boolean`
`addLogApiClassLoader(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(ClassLoader classLoader, LogContext logContext)`
Register a class loader with a log context.
`boolean`
`removeLogApiClassLoader(ClassLoader apiClassLoader)`
Remove a class loader from the known log APIs set.
`boolean`
`unregisterLogContext(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 Details

### 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 Details

### 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(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(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(ClassLoader classLoader, LogContext logContext) throws IllegalArgumentException
Register a class loader with a log context. This method requires the `registerLogContext` `RuntimePermission`.

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

### unregisterLogContext

public boolean unregisterLogContext(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