package sharpen.xobotos; import org.eclipse.ui.console.*; import sharpen.core.Sharpen; import java.io.*; import java.util.Date; import java.util.logging.*; public class XobotLogger { class MyStreamHandler extends Handler { private final PrintStream printStream; public MyStreamHandler(OutputStream stream) { super(); printStream = new PrintStream (stream, true); } @Override public void close() throws SecurityException { printStream.close(); } @Override public void flush() { printStream.flush(); } @Override public void publish(LogRecord record) { Date date = new Date(record.getMillis()); printStream.printf("[%tT] %s", date, record.getMessage()); printStream.println(); Throwable throwable = record.getThrown(); if (throwable != null) { throwable.printStackTrace(printStream); printStream.println(); } } } class MyConsoleHandler extends MyStreamHandler { public MyConsoleHandler(MessageConsole console) { super(console.newMessageStream()); } } private static final Logger logger = Sharpen.getLogger(); private final MessageConsole console; private final Handler consoleHandler; private File logFile; private FileOutputStream logFileStream; private Handler logFileHandler; public XobotLogger() { console = Activator.getConsole(); console.clearConsole(); console.activate(); consoleHandler = new MyConsoleHandler(console); logger.addHandler(consoleHandler); } public void setLogFile(File newFile, boolean append) throws FileNotFoundException { if (logFile != null) throw new IllegalArgumentException("BuildLogger.setLogFile() may be used only once"); try { logFileStream = new FileOutputStream (newFile, append); logFile = newFile; } catch (FileNotFoundException e) { logger.log(Level.WARNING, "Cannot open logfile: " + newFile.getAbsolutePath()); return; } logger.log(Level.INFO, "Added logfile " + logFile.getAbsolutePath()); logFileHandler = new MyStreamHandler (logFileStream); logger.addHandler(logFileHandler); } public void close() { try { logger.removeHandler(consoleHandler); if (logFileHandler != null) { logFileHandler.close(); logger.removeHandler(logFileHandler); logFileStream.close(); } } catch (IOException e) { ; } } }