package org.limewire.logging; import java.util.IdentityHashMap; import java.util.Map; /** * Mimics and wraps {@link org.apache.commons.logging.LogFactory} and implements a * subset of its methods, but returns {@link Log} instead of * {@link org.apache.commons.logging.Log} instances. */ public class LogFactory { private static Map<org.apache.commons.logging.Log, Log> logs = new IdentityHashMap<org.apache.commons.logging.Log, Log>(); /** * @param clazz can not be null * @return a Log named by the fully qualifed class name of clazz */ public static Log getLog(Class clazz) { return getLog(clazz, null); } /** * @param key can not be null * @return a Log named by the key */ public static Log getLog(String key) { return getLog(null, key); } /** * @param clazz can be null if keyOrCategory is non-null * @param keyOrCategory can be null if clazz is non-null * @return a log with the name <code>keyOrCategory.classname</code> * where <code>classname</code> is the non-qualified name of the * class. */ public static Log getLog(Class clazz, String keyOrCategory) { assert clazz != null || keyOrCategory != null; // not synchronized as LogFactory is also not synchronized, Logs are created // at class load time which is synchronized org.apache.commons.logging.Log log; if (keyOrCategory == null) { log = org.apache.commons.logging.LogFactory.getLog(clazz); } else if(clazz == null) { log = org.apache.commons.logging.LogFactory.getLog(keyOrCategory); } else { log = org.apache.commons.logging.LogFactory.getLog(keyOrCategory + "." + clazz.getSimpleName()); } Log decorator = logs.get(log); if (decorator == null) { decorator = new LogImpl(log); logs.put(log, decorator); } return decorator; } }