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 * * <listener-class>biz.ormia.util.logging.ContextRepositoryListener</listener-class> * * */ 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<ClassLoader, LoggerRepository> repositories = new HashMap<ClassLoader, LoggerRepository>(); 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(); // Object guard = LogManager.getRootLogger(); // LogManager.setRepositorySelector(new CTXRepositorySelector(), guard); // } // // add our thread instance in for lookup later // Hierarchy hierarchy = new Hierarchy(new RootLogger(Level.DEBUG)); // try {repositories.put(Thread.currentThread().getContextClassLoader(), hierarchy);} // catch (Exception ex) {System.out.println("Exception while creating new heiarchy for repository: " + ex);} } public static synchronized void removeContext() { System.out.println("in removeContext..."); System.out.println("current thread: " + Thread.currentThread().getName()); System.out.println("classloader: " + Thread.currentThread().getContextClassLoader().toString()); } private WebAppRepositorySelector() { } public LoggerRepository getLoggerRepository() { System.out.println("in getLoggerRepository..."); System.out.println("current thread: " + Thread.currentThread().getName()); System.out.println("classloader: " + Thread.currentThread().getContextClassLoader().toString()); ClassLoader cl = Thread.currentThread().getContextClassLoader(); // Hierarchy hierarchy = (Hierarchy) repositories.get(cl); // // if (hierarchy == null) { // hierarchy = new Hierarchy(new RootLogger(org.apache.log4j.Level.DEBUG)); // hierMap.put(cl, hierarchy); // } // // return hierarchy; LoggerRepository repository = null; try { repository = repositories.get(Thread.currentThread().getContextClassLoader()); } catch (Exception ex) {System.out.println("Exception in getLoggerRepository getting the repository from the class loader: " + ex);} if (repository == null) { System.out.println("respository is null using default..."); return defaultRepository; } else { System.out.println("Using repository: " + repository); return repository; } // if (repository == null) // return defaultRepository; // return repository; // if (defaultRepository != null) // return defaultRepository; // return null; } } Note that this works as I have it commented here but I am not doing anything aside from saving off the original jboss repository and then resetting the selector to ourselves. If I uncomment the next line: org.apache.log4j.Hierarchy hierarchy = new Hierarchy(rootLogger); Then I get the error mentioned above. If I don't put my Selector in the log4j...spi package then I get a generic error: [ERROR] - Exception sending context initialized event to listener instance of class biz.ormia.util.logging.ContextRepositoryListener java.lang.VerifyError: (class: biz/ormia/util/logging/ContextRepositorySelector, method: init signature: (Ljavax/servlet/ServletContext;)V) Incompatible argument to function View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4229010#4229010 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4229010 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user