import java.awt.EventQueue;
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.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;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);
Handler fileHandler = new FileHandler("%h/LoggingImageViewer.log", 0, 10);
Logger.getLogger("com.horstmann.corejava").addHandler(fileHandler);
}
catch(IOException e)
{
Logger.getLogger("com.horstmann.corejava").log(Level.SEVERE, "Can't log a file", e);
}
}

EventQueue.invokeLater(new Runnable()
{

public void run() 
{
ImageFrame imageFrame = new ImageFrame();
imageFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Handler windowHandler = new windowHandler();
windowHandler.setLevel(Level.ALL);
Logger.getLogger("com.horstmann.corejava").addHandler(windowHandler);

Logger.getLogger("com.horstmann.corejava").fine("Show Frame");
imageFrame.setVisible(true);
}
});
}} class windowHandler extends StreamHandler
{
public windowHandler()
{
frame = new JFrame();
frame.setSize(200, 200);
frame.setTitle("LoggingImageViewer");

final JTextArea textArea = new JTextArea();
textArea.setEditable(false);
frame.add(new JScrollPane(textArea));

frame.setVisible(true);

setOutputStream(new OutputStream()
{
public void write(int b) throws IOException 
{


}

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

});


}

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

private JFrame frame;
}
 
 class ImageFrame extends JFrame
 {
  public ImageFrame()
  {
  Logger.getLogger("com.horstmann.corejava").entering("ImageFrame", "<init>");  //记录不到
  setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
  setTitle("ImageFrame");
  Logger.getLogger("com.horstmann.corejava").exiting("ImageFrame", "<init>");   //记录不到  } 
  public static final int DEFAULT_WIDTH = 300;
  public static final int DEFAULT_HEIGHT = 400;
 }