Yes, I include log4j-1.2.8 in each webapp's WEB-INF/lib folder. Let me go
ahead and post the background code and such then.
First, I was trying to load a context event listener with the following code:
package biz.ormia.util.logging;
/**
* User: sstacha
* Date: May 3, 2009
* Time: 1:22:11 PM
* Attempt to do logging without much effort on the devleopers part.
* Developers will need to add the following the web.xml file
*
*
biz.ormia.util.logging.ContextRepositoryListener
*
*
*/
import org.apache.log4j.spi.WebAppRepositorySelector;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.Enumeration;
public class ContextRepositoryListener implements ServletContextListener
{
public void contextInitialized(ServletContextEvent contextEvent)
{
try
{
System.out.println("Attempting to add a context to the
repositorySelector: " +
contextEvent.getServletContext().getServletContextName());
Enumeration
names=contextEvent.getServletContext().getAttributeNames();
System.out.println("- attributes -");
String name;
while (names.hasMoreElements())
{
name = (String)names.nextElement();
System.out.println(" " + name + " - " +
contextEvent.getServletContext().getAttribute(name));
}
names=contextEvent.getServletContext().getInitParameterNames();
System.out.println("- init params -");
while (names.hasMoreElements())
System.out.println(" " +
names.nextElement());
WebAppRepositorySelector.init(contextEvent.getServletContext());
//ContextRepositorySelector.init(contextEvent.getServletContext());
}
catch (Exception ex) {System.err.println(ex);}
}
public void contextDestroyed(ServletContextEvent contextEvent)
{
System.out.println("Attempting to remove a context from the
repositorySelector: " + contextEvent.getServletContext());
ContextRepositorySelector.removeContext();
}
}
As you can see mostly I was trying to figure out what I had available to me and
make sure it was being called. The only real thing in init is to call the
WebAppRepositorySelector.init(contextEvent.getServletContext());
WebAppRepositorySelector is my implementation which simply tries to take the
default respository that jboss sets up and then tries to add a new one for each
webapp deployment.
package org.apache.log4j.spi;
import org.apache.log4j.LogManager;
import org.apache.log4j.Hierarchy;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.util.Map;
import java.util.HashMap;
/**
* User: sstacha
* Date: May 5, 2009
* Time: 2:58:16 PM
* To change this template use File | Settings | File Templates.
*/
public class WebAppRepositorySelector implements RepositorySelector
{
private static Map repositories = new
HashMap();
private static LoggerRepository defaultRepository;
public static void init(ServletContext context) throws ServletException
{
System.out.println("in addContext...");
System.out.println("current thread: " +
Thread.currentThread().getName());
System.out.println("classloader: " +
Thread.currentThread().getContextClassLoader().toString());
System.out.println("context: " +
context.getServletContextName());
if (defaultRepository == null)
{
defaultRepository = LogManager.getLoggerRepository();
Object guard = LogManager.getRootLogger();
LogManager.setRepositorySelector(new
WebAppRepositorySelector(), guard);
}
System.out.println("defaultRepository: " +
defaultRepository.toString());
org.apache.log4j.Logger rootLogger = new
RootLogger(org.apache.log4j.Level.DEBUG);
System.out.println("rootLogger: " + rootLogger);
// org.apache.log4j.Hierarchy hierarchy = new
Hierarchy(rootLogger);
//
// try
{repositories.put(Thread.currentThread().getContextClassLoader(), hierarchy);}
// catch (Exception ex) {System.out.println("Exception while
creating new heiarchy for repository: " + ex);}
// if (defaultRepository == null)
// {
// defaultRepository = LogManager.getLoggerRepository();
//