package org.pitest.util; import java.io.PrintWriter; import java.io.StringWriter; import java.text.DateFormat; import java.util.Date; import java.util.logging.ConsoleHandler; import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; import java.util.logging.Logger; public class Log { private static final Logger LOGGER = Logger.getLogger("PIT"); public static Logger getLogger() { return LOGGER; } static { if ((System.getProperty("java.util.logging.config.file") == null) && (System.getProperty("java.util.logging.config.class") == null)) { LOGGER.setUseParentHandlers(false); final Handler handler = new ConsoleHandler(); handler.setFormatter(new PlainFormatter()); addOrSetHandler(handler); LOGGER.setLevel(Level.INFO); handler.setLevel(Level.ALL); } } private static void addOrSetHandler(final Handler handler) { if (LOGGER.getHandlers().length == 0) { LOGGER.addHandler(handler); } else { LOGGER.getHandlers()[0] = handler; } } public static void setVerbose(final boolean on) { if (on) { setLevel(Level.FINEST); } else { setLevel(Level.INFO); } } private static void setLevel(final Level level) { LOGGER.setLevel(level); for (final Handler each : LOGGER.getHandlers()) { each.setLevel(level); } } static class PlainFormatter extends Formatter { private static final String LINE_SEPARATOR = System .getProperty("line.separator"); private final DateFormat dateFormat = DateFormat.getTimeInstance(); @Override public String format(final LogRecord record) { final StringBuilder buf = new StringBuilder(180); buf.append(this.dateFormat.format(new Date(record.getMillis()))); buf.append(" PIT >> "); buf.append(record.getLevel()); buf.append(" : "); buf.append(formatMessage(record)); buf.append(LINE_SEPARATOR); final Throwable throwable = record.getThrown(); if (throwable != null) { final StringWriter sink = new StringWriter(); throwable.printStackTrace(new PrintWriter(sink, true)); buf.append(sink.toString()); } return buf.toString(); } } public static boolean isVerbose() { return Level.FINEST.equals(LOGGER.getLevel()); } }