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

Reply via email to