Class JndiContextSelector
java.lang.Object
org.apache.logging.log4j.core.selector.JndiContextSelector
- All Implemented Interfaces:
ContextSelector,NamedContextSelector
This class can be used to define a custom logger repository. It makes use of the fact that in J2EE environments, each
web-application is guaranteed to have its own JNDI context relative to the
java:comp/env context. In
EJBs, each enterprise bean (albeit not each application) has its own context relative to the
java:comp/env context. An env-entry in a deployment descriptor provides the information to
the JNDI context. Once the env-entry is set, a repository selector can query the JNDI application
context to look up the value of the entry. The logging context of the web-application will depend on the value the
env-entry. The JNDI context which is looked up by this class is java:comp/env/log4j/context-name.
For security reasons, JNDI must be enabled by setting system property log4j2.enableJndiContextSelector=true.
Here is an example of an env-entry:
<env-entry> <description>JNDI logging context name for this app</description> <env-entry-name>log4j/context-name</env-entry-name> <env-entry-value>aDistinctiveLoggingContextName</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
If multiple applications use the same logging context name, then they will share the same logging context.
You can also specify the URL for this context's configuration resource. This repository selector (ContextJNDISelector) will use this resource to automatically configure the log4j repository.
<env-entry> <description>URL for configuring log4j context</description> <env-entry-name>log4j/configuration-resource</env-entry-name> <env-entry-value>urlOfConfigurationResource</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>
It usually good practice for configuration resources of distinct applications to have distinct names. However, if this is not possible Naming
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final LoggerContextprivate static final ConcurrentMap<String, LoggerContext> private static final StatusLoggerFields inherited from interface org.apache.logging.log4j.core.selector.ContextSelector
DEFAULT_STOP_TIMEOUT -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiongetContext(String fqcn, ClassLoader loader, boolean currentContext) Returns the LoggerContext.getContext(String fqcn, ClassLoader loader, boolean currentContext, URI configLocation) Returns the LoggerContext.private StringReturns a List of all the available LoggerContexts.booleanhasContext(String fqcn, ClassLoader loader, boolean currentContext) Checks to see if a LoggerContext is installed.booleanDetermines whether or not this ContextSelector depends on the callers classloader.locateContext(String name, Object externalContext, URI configLocation) Locate the LoggerContext with the specified name.removeContext(String name) Locate the LoggerContext with the specified name using the default configuration.voidremoveContext(LoggerContext context) Remove any references to the LoggerContext.voidshutdown(String fqcn, ClassLoader loader, boolean currentContext, boolean allContexts) Shuts down the LoggerContext.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.logging.log4j.core.selector.ContextSelector
getContext, getContext
-
Field Details
-
CONTEXT
-
CONTEXT_MAP
-
LOGGER
-
-
Constructor Details
-
JndiContextSelector
public JndiContextSelector()
-
-
Method Details
-
shutdown
Description copied from interface:ContextSelectorShuts down the LoggerContext.- Specified by:
shutdownin interfaceContextSelector- Parameters:
fqcn- The fully qualified class name of the caller.loader- The ClassLoader to use or null.currentContext- If true returns the current Context, if false returns the Context appropriateallContexts- if true all LoggerContexts that can be located will be shutdown.
-
hasContext
Description copied from interface:ContextSelectorChecks to see if a LoggerContext is installed. The default implementation returns false.- Specified by:
hasContextin interfaceContextSelector- Parameters:
fqcn- The fully qualified class name of the caller.loader- The ClassLoader to use or null.currentContext- If true returns the current Context, if false returns the Context appropriate for the caller if a more appropriate Context can be determined.- Returns:
- true if a LoggerContext has been installed, false otherwise.
-
getContext
Description copied from interface:ContextSelectorReturns the LoggerContext.- Specified by:
getContextin interfaceContextSelector- Parameters:
fqcn- The fully qualified class name of the caller.loader- ClassLoader to use or null.currentContext- If true returns the current Context, if false returns the Context appropriate for the caller if a more appropriate Context can be determined.- Returns:
- The LoggerContext.
-
getContext
public LoggerContext getContext(String fqcn, ClassLoader loader, boolean currentContext, URI configLocation) Description copied from interface:ContextSelectorReturns the LoggerContext.- Specified by:
getContextin interfaceContextSelector- Parameters:
fqcn- The fully qualified class name of the caller.loader- ClassLoader to use or null.currentContext- If true returns the current Context, if false returns the Context appropriate for the caller if a more appropriate Context can be determined.configLocation- The location of the configuration for the LoggerContext.- Returns:
- The LoggerContext.
-
getContextName
-
locateContext
Description copied from interface:NamedContextSelectorLocate the LoggerContext with the specified name.- Specified by:
locateContextin interfaceNamedContextSelector- Parameters:
name- The LoggerContext name.externalContext- The external context to associate with the LoggerContext.configLocation- The location of the configuration.- Returns:
- A LoggerContext.
-
removeContext
Description copied from interface:ContextSelectorRemove any references to the LoggerContext.- Specified by:
removeContextin interfaceContextSelector- Parameters:
context- The context to remove.
-
isClassLoaderDependent
public boolean isClassLoaderDependent()Description copied from interface:ContextSelectorDetermines whether or not this ContextSelector depends on the callers classloader. This method should be overridden by implementations, however a default method is provided which always returnstrueto preserve the old behavior.- Specified by:
isClassLoaderDependentin interfaceContextSelector- Returns:
- true if the class loader is required.
-
removeContext
Description copied from interface:NamedContextSelectorLocate the LoggerContext with the specified name using the default configuration.- Specified by:
removeContextin interfaceNamedContextSelector- Parameters:
name- The LoggerContext name.- Returns:
- A LoggerContext.
-
getLoggerContexts
Description copied from interface:ContextSelectorReturns a List of all the available LoggerContexts.- Specified by:
getLoggerContextsin interfaceContextSelector- Returns:
- The List of LoggerContexts.
-