@Override public void publish(LogRecord record) { if (record == null || !isLoggable(record)) return; String message = getFormatter().format(record); if (message == null) return; if (record.getLevel().intValue() > Level.INFO.intValue()) { System.err.print(message); System.err.flush(); } else { System.out.print(message); System.out.flush(); } for (PrintStream ps: s_printStreams) { ps.print(message); } }
/** If the user has not specified a java property for the global Handler, then set the default global handler to this CleanHandler at an INFO level. */ public static void setDefaultHandler() { synchronized (CleanHandler.class) { if (s_setDefault) return; if (System.getProperties().getProperty ("java.util.logging.config.file") == null && System.getProperties().getProperty ("java.util.logging.config.class") == null) { overrideExistingHandlers(Level.INFO); // nothing set previously } s_setDefault = true; } }
/** Construct a new CleanHandler. */ public CleanHandler() { setFormatter(new CleanFormatter()); }
/** Call this from your code to test each type of log message */ public static void testLogger() { setDefaultHandler(); assert null != CleanHandler.class.getResource("CleanHandler.properties"); assert null != java.util.ResourceBundle.getBundle ("edu.mines.jtk.util.CleanHandler") : "can't find rb"; Logger logger = Logger.getLogger("edu.mines.jtk.util", "edu.mines.jtk.util.CleanHandler"); logger.severe("test a severe"); logger.warning("test a warning"); logger.info("test an info"); logger.info("test a\\"); logger.info(" continued info"); logger.config("test an config"); logger.fine("test a fine"); logger.finer("test a finer"); logger.finest("test a finest"); logger.info("testmessage"); logger.info("Try this:>>${testmessage}<<"); logger.info("Try this:>>${testmessage}<< >>${testmessage}<<"); }
/** Test code * @param args command line */ public static void main(String[] args) { testLogger(); }
/** * run tests * * @param argv command line * @throws Exception test failures */ public static void main(final String[] argv) throws Exception { CleanHandler.setDefaultHandler(); final Monitor monitor = new LogMonitor("${Test}", LOG); monitor.report(0); final int pause = 25; Thread.sleep(pause); monitor.report(0); final int n = 25; for (int i = 0; i < n; ++i) { monitor.report(i / (n - 1.0)); Thread.sleep(pause); } } }
/** Unit tests */ public void testFormatter() { CleanHandler.setDefaultHandler(); Logger logger = Logger.getLogger("edu.mines.jtk.util.CleanFormatter"); CleanFormatter cf = new CleanFormatter(); String[] messages = new String[] {"one", "two", "three"}; Level[] levels = new Level[] {Level.INFO, Level.WARNING, Level.SEVERE}; String[] s = new String[3]; for (int i=0; i<messages.length; ++i) { LogRecord lr = new LogRecord(levels[i], messages[i]); lr.setSourceClassName("Class"); lr.setSourceMethodName("method"); s[i] = cf.format(lr); assertTrue(s[i].endsWith(messages[i]+NL)); logger.fine("|"+s[i]+"|"); } assert s[0].equals("one"+NL): s[0]; assert s[1].equals("WARNING: two"+NL) : s[1]; assert s[2].matches("^\\*\\*\\*\\* SEVERE WARNING \\*\\*\\*\\* "+ "\\(Class.method \\d+-\\d+ #.*\\)"+NL+ "SEVERE: three"+NL+"$") :s[2]; }