A modification of the image viewer program that logs various events : Log « Language Basics « Java






A modification of the image viewer program that logs various events

   
/*
   This program is a part of the companion code for Core Java 8th ed.
   (http://horstmann.com/corejava)

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.StreamHandler;

import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**
 * A modification of the image viewer program that logs various events.
 * @version 1.02 2007-05-31
 * @author Cay Horstmann
 */
public class LoggingImageViewer
{
   public static void main(String[] args)
   {
      if (System.getProperty("java.util.logging.config.class") == null
            && System.getProperty("java.util.logging.config.file") == null)
      {
         try
         {
            Logger.getLogger("com.horstmann.corejava").setLevel(Level.ALL);
            final int LOG_ROTATION_COUNT = 10;
            Handler handler = new FileHandler("%h/LoggingImageViewer.log", 0, LOG_ROTATION_COUNT);
            Logger.getLogger("com.horstmann.corejava").addHandler(handler);
         }
         catch (IOException e)
         {
            Logger.getLogger("com.horstmann.corejava").log(Level.SEVERE,
                  "Can't create log file handler", e);
         }
      }

      EventQueue.invokeLater(new Runnable()
         {
            public void run()
            {
               Handler windowHandler = new WindowHandler();
               windowHandler.setLevel(Level.ALL);
               Logger.getLogger("com.horstmann.corejava").addHandler(windowHandler);

               JFrame frame = new ImageViewerFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

               Logger.getLogger("com.horstmann.corejava").fine("Showing frame");
               frame.setVisible(true);
            }
         });
   }
}

/**
 * The frame that shows the image.
 */
class ImageViewerFrame extends JFrame
{
   public ImageViewerFrame()
   {
      logger.entering("ImageViewerFrame", "<init>");
      setTitle("LoggingImageViewer");
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

      // set up menu bar
      JMenuBar menuBar = new JMenuBar();
      setJMenuBar(menuBar);

      JMenu menu = new JMenu("File");
      menuBar.add(menu);

      JMenuItem openItem = new JMenuItem("Open");
      menu.add(openItem);
      openItem.addActionListener(new FileOpenListener());

      JMenuItem exitItem = new JMenuItem("Exit");
      menu.add(exitItem);
      exitItem.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               logger.fine("Exiting.");
               System.exit(0);
            }
         });

      // use a label to display the images
      label = new JLabel();
      add(label);
      logger.exiting("ImageViewerFrame", "<init>");
   }

   private class FileOpenListener implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
         logger.entering("ImageViewerFrame.FileOpenListener", "actionPerformed", event);

         // set up file chooser
         JFileChooser chooser = new JFileChooser();
         chooser.setCurrentDirectory(new File("."));

         // accept all files ending with .gif
         chooser.setFileFilter(new javax.swing.filechooser.FileFilter()
            {
               public boolean accept(File f)
               {
                  return f.getName().toLowerCase().endsWith(".gif") || f.isDirectory();
               }

               public String getDescription()
               {
                  return "GIF Images";
               }
            });

         // show file chooser dialog
         int r = chooser.showOpenDialog(ImageViewerFrame.this);

         // if image file accepted, set it as icon of the label
         if (r == JFileChooser.APPROVE_OPTION)
         {
            String name = chooser.getSelectedFile().getPath();
            logger.log(Level.FINE, "Reading file {0}", name);
            label.setIcon(new ImageIcon(name));
         }
         else logger.fine("File open dialog canceled.");
         logger.exiting("ImageViewerFrame.FileOpenListener", "actionPerformed");
      }
   }

   private JLabel label;
   private static Logger logger = Logger.getLogger("com.horstmann.corejava");
   private static final int DEFAULT_WIDTH = 300;
   private static final int DEFAULT_HEIGHT = 400;   
}

/**
 * A handler for displaying log records in a window.
 */
class WindowHandler extends StreamHandler
{
   public WindowHandler()
   {
      frame = new JFrame();
      final JTextArea output = new JTextArea();
      output.setEditable(false);
      frame.setSize(200, 200);
      frame.add(new JScrollPane(output));
      frame.setFocusableWindowState(false);
      frame.setVisible(true);
      setOutputStream(new OutputStream()
         {
            public void write(int b)
            {
            } // not called

            public void write(byte[] b, int off, int len)
            {
               output.append(new String(b, off, len));
            }
         });
   }

   public void publish(LogRecord record)
   {
      if (!frame.isVisible()) return;
      super.publish(record);
      flush();
   }

   private JFrame frame;
}

   
    
    
  








Related examples in the same category

1.Log levelLog level
2.Simple Log Formatter ExampleSimple Log Formatter Example
3.Log to file with FileHandler and SimpleFomatterLog to file with FileHandler and SimpleFomatter
4.Log multiple HandlersLog multiple Handlers
5.Log multiple Handlers 2Log multiple Handlers 2
6.Override LogRecord toString()Override LogRecord toString()
7.Email LoggerEmail Logger
8.Log To File with FileHandlerLog To File with FileHandler
9.Logging LevelsLogging Levels
10.Creating a Custom Log Level
11.Logging Level ManipulationLogging Level Manipulation
12.Configure LoggingConfigure Logging
13.How to write custom Log handlerHow to write custom Log handler
14.Log Client Filter
15.Log HTML Table Formatter
16.Logging Example 1Logging Example 1
17.Basic Logging Example
18.Java Log:Basic Logging Java Log:Basic Logging
19.Java log: Hierarchy loggingJava log: Hierarchy logging
20.Java log: various log methodsJava log: various log methods
21.Java log: Stream Handler DemoJava log: Stream Handler Demo
22.Java log: File Handler DemoJava log: File Handler Demo
23.Java log: Memory Handler DemoJava log: Memory Handler Demo
24.Java log: Socket Handler Demo
25.Java log: Basic logging 2Java log: Basic logging 2
26.Java log: Logging Server
27.Java log: log filterJava log: log filter
28.Java log: XML log
29.Java log: alternate XML logJava log: alternate XML log
30.Java log: Localize LoggingJava log: Localize Logging
31.Java log: Custom XML FormatterJava log: Custom XML Formatter
32.Java log: Remote Config Reader
33.Java log: Log and Window(JFrame, frame)Java log: Log and Window(JFrame, frame)
34.File Logger
35.Setting the Formatter of a Logger Handler
36.Memory Handler Demo
37.Socket Handler Demo
38.XMLFormatter based Logging
39.#define the properties for the SocketHandler
40.Custom filter
41.Using Regular Expressions based on StreamHandler
42.The Quintessential Logging Program
43.Determining If a Message Will Be Logged
44.Logging a Method Call
45.Logging an Exception
46.Minimizing the Impact of Logging Code
47.Preventing a Logger from Forwarding Log Records to Its Parent
48.Writing Log Records to a Log File
49.A file handler that appends.
50.Writing Log Records to Standard Error
51.Writing Log Records Only After a Condition Occurs
52.Create a memory handler with a memory of 100 records and dumps the records into the file my.log
53.Setting a Filter on a Logger Handler
54.Comparing Log Levels: To compare the severity of two logging levels, use Level.intValue().
55.Creating a Custom Formatter for a Logger Handler
56.Limiting the Size of a Log File
57.Limiting the Size of a Log by Using a Rotating Sequence of Files
58.Configuring Logger Default Values with a Properties File
59.Determining When the Logging Configuration Properties are Reread
60.Handling Errors While Parsing an XML File
61.An example of a program providing the functionality of logging
62.Use Logger with simple formatter and FileHandler
63.Logger with XMLFormatter and FileHandler
64.Stream Handler
65.The Patterns in FileHandler
66.Flush File Handler and Logger
67.Config Demo
68.config.properties
69.Alternate XML by using FileHandler
70.Localized Logging
71.Define your own Custom Formatter
72.Remote ConfigReader with URLConnection
73.Window Handler: display log message in a window(JFrame)
74.Create log with package nameCreate log with package name
75.Logger Demo
76.Return a message for logging.
77.A simple wrapper around JDK logging facilities
78.A class helper for logging service.
79.Logging Thread Pool
80.Logging Thread