package com.chamago.bison.logger; import java.io.File; import java.io.FileInputStream; import java.util.Properties; import java.util.concurrent.ConcurrentHashMap; public class LoggerFactory { private static ConcurrentHashMap<String, Logger> maps = new ConcurrentHashMap(); private static Properties prop = null; public static synchronized Logger getLogger(String name) { if (prop == null) { try { String confDir = System.getProperty("conf.dir"); if ((confDir == null) || (confDir.length() == 0)) { confDir = System.getenv("conf.dir"); } prop = new Properties(); File file = new File(confDir, "log.properties"); FileInputStream fis = new FileInputStream(file); prop.load(fis); fis.close(); fis = null; } catch (Exception e) { e.printStackTrace(); prop = null; } } Logger logger = (Logger)maps.get(name); if (logger == null) { String type = "CONSOLE"; String level = "INFO"; String dir = ""; if (prop != null) { type = prop.getProperty(name + ".type"); if (type == null) { type = prop.getProperty("root.type"); } level = prop.getProperty(name + ".level"); if (level == null) { level = prop.getProperty("root.level"); } dir = prop.getProperty(name + ".dir"); if (dir == null) { dir = prop.getProperty("root.dir"); } if ((dir == null) || (dir.length() == 0)) { dir = ".." + File.separator + "logs"; } if ((type == null) || (type.length() == 0)) { type = "CONSOLE"; } } if (type.equalsIgnoreCase("FILE")) { FileLogger flogger = new FileLogger(name); flogger.setLogDir(dir); flogger.setLogLevel(level); logger = flogger; } else { ConsoleLogger clogger = new ConsoleLogger(name); clogger.setLogLevel(level); logger = clogger; } maps.put(name, logger); } return logger; } public static Logger getLogger(Class clz) { return getLogger(clz.getName()); } }