97 lines · 2.3 KB · Java
RawDownload
package plan9; import java.util.Map;import java.util.HashMap; import plan9.lib.Strings; import static plan9.Log.*; public class LogFactory {	private static boolean checked = false;	private static Log	thelogger = new ConsoleLog();	private static Map<String,Integer> levels = new HashMap<String, Integer>();	private static int defaultlevel = -1; 	public static synchronized Log	logger(Class tag){		Integer iv; 		if(!checked){			try{				Class.forName("org.slf4j.Logger");				thelogger = new Slf4jLog();			}catch(ClassNotFoundException e){				try{					Class.forName("org.apache.log4j.Logger");					thelogger = new ApacheLog();				}catch(ClassNotFoundException e2){					thelogger = new ConsoleLog();				}				defaultlevel = setInitLevels(levels);			}			checked = true;		}		iv = levels.get(tag.getName());		Log log = thelogger.newlog(tag);		if(iv != null)			log.setlevel(iv.intValue());		else if(defaultlevel >= 0)	// otherwise take logging system's default			log.setlevel(defaultlevel);		return log;	} 	/*	 * take debugging levels from environment variable "J9P_DEBUG_LEVEL",	 * or property "plan9.ninep.loglevel"	 */	static final int	setInitLevels(Map<String,Integer> map){		String ev, s, name; 		ev = System.getenv().get("J9P_DEBUG_LEVEL");		if(ev == null){			try{				ev = System.getProperty("plan9.ninep.loglevel");			}catch(Exception e){				// don't care which				return -1;			}		}		String[] fields = Strings.getfields(ev, ",:\1");	// \1 for rc		String def = null;		for(String f : fields){			String tag = null;			int sep = f.lastIndexOf('/');			if(sep >= 0){				tag = f.substring(0, sep);				f = f.substring(sep+1);			}			if(tag != null && !tag.equals("*") && !tag.equals(""))				map.put(tag, Integer.valueOf(level(f)));			else				def = f;		}		if(def != null)			return level(def);		return -1;	} 	static int level(String s){		if(s.equalsIgnoreCase("fatal"))			return Fatal;		else if(s.equalsIgnoreCase("error"))			return Error;		else if(s.equalsIgnoreCase("warn"))			return Warn;		else if(s.equalsIgnoreCase("info"))			return Info;		else if(s.equalsIgnoreCase("debug"))			return Debug;		else if(s.equalsIgnoreCase("trace"))			return Trace;		else if(s.equalsIgnoreCase("all"))			return All;		else if(s.equalsIgnoreCase("off"))			return Off;		return -1;	}}