
import org.apache.log4j.*;
import java.util.*;

public class EAILogger extends Logger 
{
    static private Appender[] appenders = null;
    
    public EAILogger(String name)
    {
        super(name);   
    }

    static public Logger getLogger(String name) 
    {
        Logger logger = LogManager.getLogger(name);
        return setAppenders(logger, "application");
    }

    static public Logger getLogger(String name, String appenderName) 
    {
        Logger logger = LogManager.getLogger(name);
        return setAppenders(logger, appenderName);
    }
    
    static synchronized Logger setAppenders(Logger logger, String appenderName)
    {   
        if (appenders == null)
        {
            System.out.println("SHOULD ONLY SEE THIS MESSAGE ONCE");
            Vector v = new Vector();
            
            // Should only happen once!
            System.out.println("THIS LOGGERS NAME IS (should be test1):" + logger.getName());
            System.out.println("THE ROOT LOGGERS NAME IS :" + logger.getRootLogger().getName());
            
            Enumeration enum = logger.getRootLogger().getAllAppenders();
            while (enum.hasMoreElements())
            {
                System.out.println("ADDING APPENDER FROM ROOT LOGGER");
                v.addElement(enum.nextElement());
            }
            appenders = new Appender[v.size()];
            v.copyInto(appenders);
            
            for (int i=0; i<appenders.length; i++)
            {
                logger.getRootLogger().removeAppender(appenders[i]);
            }
        }
        for (int i=0; i<appenders.length; i++)
        {
            if (appenders[i].getName().equals(appenderName))
            {   
                System.out.println("Adding appender [" + appenders[i].getName() + "] to logger named [" + logger.getName() + "] as appender name is [" + appenderName + "]");
                logger.addAppender(appenders[i]);                    
            }
            else
            {
                System.out.println("Not adding appender [" + appenders[i].getName() + "] to logger named [" + logger.getName() + "] as appender name is [" + appenderName + "]");
            }
        }
        return logger;
    }
}
