Mega Code Archive

 
Categories / Java / Language Basics
 

Java Log

/* Logging In Java with the JDK 1.4 Logging API and Apache log4j by Samudra Gupta     Apress Copyright 2003  ISBN:1590590996 */ import java.util.logging.*; import javax.swing.JFrame; import javax.swing.JTextArea; import javax.swing.JScrollPane; class LogWindow extends JFrame {   private int width;   private int height;   private JTextArea textArea = null;   private JScrollPane pane = null;   public LogWindow(String title, int width, int height) {     super(title);     setSize(width, height);     textArea = new JTextArea();     pane = new JScrollPane(textArea);     getContentPane().add(pane);     setVisible(true);   }   /**    * This method appends the data to the text area.    *     * @param data    *            the Logging information data    */   public void showInfo(String data) {     textArea.append(data);     this.getContentPane().validate();   } } class WindowHandler extends Handler {   //the window to which the logging is done   private LogWindow window = null;   private Formatter formatter = null;   private Level level = null;   //the singleton instance   private static WindowHandler handler = null;   /**    * private constructor, preventing initialization    */   private WindowHandler() {     configure();     if (window == null)       window = new LogWindow("Logging window", 500, 200);   }   /**    * The getInstance method returns the singleton instance of the    * WindowHandler object It is synchronized to prevent two threads trying to    * create an instance simultaneously. @ return WindowHandler object    */   public static synchronized WindowHandler getInstance() {     if (handler == null) {       handler = new WindowHandler();     }     return handler;   }   /**    * This method loads the configuration properties from the JDK level    * configuration file with the help of the LogManager class. It then sets    * its level, filter and formatter properties.    */   private void configure() {     LogManager manager = LogManager.getLogManager();     String className = this.getClass().getName();     String level = manager.getProperty(className + ".level");     String filter = manager.getProperty(className + ".filter");     String formatter = manager.getProperty(className + ".formatter");     //accessing super class methods to set the parameters     setLevel(level != null ? Level.parse(level) : Level.INFO);     setFilter(makeFilter(filter));     setFormatter(makeFormatter(formatter));   }   /**    * private method constructing a Filter object with the filter name.    *     * @param filterName    *            the name of the filter    * @return the Filter object    */   private Filter makeFilter(String filterName) {     Class c = null;     Filter f = null;     try {       c = Class.forName(filterName);       f = (Filter) c.newInstance();     } catch (Exception e) {       System.out.println("There was a problem to load the filter class: "           + filterName);     }     return f;   }   /**    * private method creating a Formatter object with the formatter name. If no    * name is specified, it returns a SimpleFormatter object    *     * @param formatterName    *            the name of the formatter    * @return Formatter object    */   private Formatter makeFormatter(String formatterName) {     Class c = null;     Formatter f = null;     try {       c = Class.forName(formatterName);       f = (Formatter) c.newInstance();     } catch (Exception e) {       f = new SimpleFormatter();     }     return f;   }   /**    * This is the overridden publish method of the abstract super class    * Handler. This method writes the logging information to the associated    * Java window. This method is synchronized to make it thread-safe. In case    * there is a problem, it reports the problem with the ErrorManager, only    * once and silently ignores the others.    *     * @record the LogRecord object    *      */   public synchronized void publish(LogRecord record) {     String message = null;     //check if the record is loggable     if (!isLoggable(record))       return;     try {       message = getFormatter().format(record);     } catch (Exception e) {       reportError(null, e, ErrorManager.FORMAT_FAILURE);     }     try {       window.showInfo(message);     } catch (Exception ex) {       reportError(null, ex, ErrorManager.WRITE_FAILURE);     }   }   public void close() {   }   public void flush() {   } } public class CustomHandlerDemo {   private WindowHandler handler = null;   private Logger logger = null;   public CustomHandlerDemo() {     handler = WindowHandler.getInstance();     //obtaining a logger instance and setting the handler     logger = Logger.getLogger("sam.logging.handler");     logger.addHandler(handler);   }   /**    * This method publishes the log message    */   public void logMessage() {     logger.info("Hello from WindowHandler...");   }   public static void main(String args[]) {     //logging with the help of a logger     CustomHandlerDemo demo = new CustomHandlerDemo();     demo.logMessage();     //using the handler.publish() to log     WindowHandler h = WindowHandler.getInstance();     LogRecord r = new LogRecord(Level.WARNING,         "The Handler publish method...");     h.publish(r);   } }