Log4j 1.3alpha-3

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 have 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 the specified 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>
 

In case no configuration resource is specified, this repository selector will attempt to find the files log4j.xml and log4j.properties from the resources available to the application.

It follows that bundling a log4j.xml file in your web-application and setting context name will be enough to ensure a separate logging environment for your applicaiton.

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 context name from the list of known repositories.
 LoggerRepository getLoggerRepository()
          Return the repoistory selector based on the current JNDI environment.
 void setDefaultRepository(LoggerRepository dh)
          Sets the default repository
 
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

setDefaultRepository

public void setDefaultRepository(LoggerRepository dh)
Description copied from interface: RepositorySelector
Sets the default repository

Specified by:
setDefaultRepository in interface RepositorySelector

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 or if no such resource is specified, using the resource names "log4j.xml" or "log4j.properties".

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

detachRepository

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

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

Log4j 1.3alpha-3

Copyright 2000-2003 Apache Software Foundation.