package org.jboss.util;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.logger.Log4JLogger;
import org.jacorb.config.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
public class Log4jLoggerFactory
implements LoggerFactory
{
private final static String name = "log4j";
private int defaultPriority = 0;
private final Map namedLoggers = new HashMap();
private Configuration configuration = null;
private static org.apache.log4j.Logger getLog4jLogger(String name)
{
org.jboss.logging.Logger l = org.jboss.logging.Logger.getLogger(name);
org.jboss.logging.LoggerPlugin lp = l.getLoggerPlugin();
if (lp instanceof org.jboss.logging.Log4jLoggerPlugin)
return ((org.jboss.logging.Log4jLoggerPlugin)lp).getLogger();
else
return null;
}
private static org.apache.log4j.Level intToLevel(int priority)
{
switch (priority)
{
case 4:
return org.apache.log4j.Level.DEBUG;
case 3:
return org.apache.log4j.Level.INFO;
case 2:
return org.apache.log4j.Level.WARN;
case 1:
return org.apache.log4j.Level.ERROR;
case 0:
default:
return org.apache.log4j.Level.FATAL;
}
}
private int getPriorityForNamedLogger(String name)
{
String prefix = name;
while (!prefix.equals(""))
{
String priorityString = null;
try
{
int priorityForLogger =
configuration.getAttributeAsInteger( prefix + ".log.verbosity");
if (priorityForLogger > 4)
priorityForLogger = 4;
else if (priorityForLogger < 0)
priorityForLogger = 0;
return priorityForLogger;
}
catch( ConfigurationException ce )
{
}
if (prefix.lastIndexOf(".") >= 0)
{
prefix = prefix.substring(0, prefix.lastIndexOf("."));
}
else
{
prefix = "";
}
}
return defaultPriority;
}
public void configure(Configuration configuration)
throws ConfigurationException
{
this.configuration = configuration;
defaultPriority =
configuration.getAttributeAsInteger("jacorb.log.default.verbosity", 0);
switch (defaultPriority)
{
case 0:
case 1:
case 2:
case 3:
case 4:
break;
default:
throw new ConfigurationException("'" + defaultPriority + "' is an illegal"
+ " value for the property jacorb.log.default.verbosity. Valid values are [0-4]");
}
}
public final String getLoggingBackendName()
{
return name;
}
public Logger getNamedLogger(String name)
{
Object o = namedLoggers.get(name);
if (o != null)
return (Logger)o;
org.apache.log4j.Logger log4jLogger = getLog4jLogger(name);
int priority = getPriorityForNamedLogger(name);
log4jLogger.setLevel(intToLevel(priority));
Logger logger = new Log4JLogger(log4jLogger);
namedLoggers.put(name, logger);
return logger;
}
public Logger getNamedRootLogger(String name)
{
return getNamedLogger(name);
}
public Logger getNamedLogger(String name,
String logFileName, long maxLogSize)
throws java.io.IOException
{
return null;
}
public void setDefaultLogFile(String fileName, long maxLogSize)
throws java.io.IOException
{
}
}