package snowblossom.lib; import duckutil.Config; import java.io.FileInputStream; import java.util.Enumeration; import java.util.Properties; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.Logger; public class LogSetup { private static final Logger logger = Logger.getLogger("snowblossom.logsetup"); private static Properties log_props = new Properties(); public static void setup(Config config) throws java.io.IOException { if (config.isSet("log_config_file")) { try { log_props.load(new FileInputStream(config.get("log_config_file"))); LogManager.getLogManager().readConfiguration(new FileInputStream(config.get("log_config_file"))); } catch (Exception e) { System.out.println("FAILED TO INITIALIZE LOGGING: " + e); } } else { log_props.setProperty(".level", "FINE"); log_props.setProperty("io.level", "SEVERE"); } //listLoggers(); } public static void fixLevels() { LogManager lm = LogManager.getLogManager(); Enumeration<String> e = LogManager.getLogManager().getLoggerNames(); while(e.hasMoreElements()) { String s = e.nextElement(); Logger m = LogManager.getLogManager().getLogger(s); if (m != null) { if (m.getLevel() == null) { String name = s; while(name.length() > 0) { if (log_props.getProperty(name +".level") != null) { Level lvl = Level.parse(log_props.getProperty(name +".level")); logger.fine(String.format("Setting level for %s to %s based on %s", s, lvl, name)); m.setLevel(lvl); break; } else { int last_dot = name.lastIndexOf('.'); if (last_dot < 0) { break; } else { name = name.substring(0, last_dot); } } } } } } } public static void listLoggers() { Enumeration<String> e = LogManager.getLogManager().getLoggerNames(); while(e.hasMoreElements()) { String s =e.nextElement(); System.out.print("Logger: " + s + " "); Logger m = LogManager.getLogManager().getLogger(s); if (m != null) { System.out.println(m.getLevel()); //m.setLevel(Level.WARNING); Logger p = m.getParent(); if (p != null) System.out.println(" p: " + p.getName()); for(Handler h : m.getHandlers()) { System.out.println(" " + h.getClass().getName()); } } } } }