Window Handler: display log message in a window(JFrame)
import java.util.logging.ErrorManager; import java.util.logging.Filter; import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.LogRecord; import java.util.logging.Logger; import java.util.logging.SimpleFormatter; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; class LogWindow extends JFrame { private JTextArea textArea = new JTextArea(); public LogWindow() { super(""); setSize(300, 300); add(new JScrollPane(textArea)); setVisible(true); } public void showInfo(String data) { textArea.append(data); this.validate(); } } class WindowHandler extends Handler { private LogWindow window = null; private Formatter formatter = null; private Level level = null; private static WindowHandler handler = null; private WindowHandler() { LogManager manager = LogManager.getLogManager(); String className = this.getClass().getName(); String level = manager.getProperty(className + ".level"); setLevel(level != null ? Level.parse(level) : Level.INFO); if (window == null) window = new LogWindow(); } public static synchronized WindowHandler getInstance() { if (handler == null) { handler = new WindowHandler(); } return handler; } public synchronized void publish(LogRecord record) { String message = null; if (!isLoggable(record)) return; message = getFormatter().format(record); window.showInfo(message); } public void close() { } public void flush() { } } public class Main { private WindowHandler handler = null; private Logger logger = null; public Main() { handler = WindowHandler.getInstance(); logger = Logger.getLogger("logging.handler"); logger.addHandler(handler); } public void logMessage() { logger.info("Hello from ..."); } public static void main(String args[]) { Main demo = new Main(); demo.logMessage(); WindowHandler h = WindowHandler.getInstance(); LogRecord r = new LogRecord(Level.WARNING, "The Handler publish method..."); h.publish(r); } }