Log4j 1.3alpha-5

org.apache.log4j.selector
Class ContextJNDISelector

java.lang.Object
  |
  +--org.apache.log4j.selector.ContextJNDISelector
All Implemented Interfaces:
RepositorySelector

public class ContextJNDISelector
extends java.lang.Object
implements RepositorySelector

Log4j JNDI based Repository selector

based primarily on Ceki Gülcü's article

Supporting the Log4j RepositorySelector in Servlet Containers

at: http://qos.ch/logging/sc.html

By default, the class static RepositorySelector variable of the LogManager class is set to a trivial RepositorySelector implementation which always returns the same logger repository. a.k.a. hierarchy. In other words, by default log4j will use one hierarchy, the default hierarchy. This behavior can be overridden via the LogManager's setRepositorySelector(RepositorySelector, Object) method.

That is where this class enters the picture. It 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.

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>urlOfConfigrationResource</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

Note that in case no configuration resource is specified, then there will be NO attempt to search for the default configuration files log4j.xml and log4j.properties. This voluntary omission ensures that the configuration file for your application's logger repository will not be confused with the default configuration file for the default logger repository.

Given that JNDI is part of the J2EE specification, the JNDI selector is the recommended context selector.

Since:
1.3
Author:
Jacob Kjome, Ceki Gülcü

Constructor Summary
ContextJNDISelector()
          public no-args constructor
 
Method Summary
 LoggerRepository detachRepository(java.lang.String contextName)
          Remove the repository with the given name from the list of known repositories.
 LoggerRepository getLoggerRepository()
          Return the repoistory selector based on the current JNDI environment.
 LoggerRepository getLoggerRepository(java.lang.String name)
          Get the logger repository with the corresponding name.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ContextJNDISelector

public ContextJNDISelector()
public no-args constructor

Method Detail

getLoggerRepository

public LoggerRepository getLoggerRepository()
Return the repoistory selector based on the current JNDI environment. If the respository is retreived for the first time, then also configure the repository using a user specified resource.

Specified by:
getLoggerRepository in interface RepositorySelector
Returns:
the appropriate JNDI-keyed context name/LoggerRepository

getLoggerRepository

public LoggerRepository getLoggerRepository(java.lang.String name)
Get the logger repository with the corresponding name.

Returned value can be null if the selector is unaware of the repository with the given name.

Specified by:
getLoggerRepository in interface RepositorySelector

detachRepository

public LoggerRepository detachRepository(java.lang.String contextName)
Remove the repository with the given name from the list of known repositories.

Specified by:
detachRepository in interface RepositorySelector
Returns:
the detached repository

Log4j 1.3alpha-5

Copyright 2000-2005 Apache Software Foundation.