Java学习--Logger实例

这篇博客主要介绍了Core Java中关于Logger的实例,虽然对于新手来说有一定难度,需要扎实的面向对象基础,但作者建议先记录下来以备后续学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Core Java讲述Logger的实例,没看懂,不过先记录下来,这本书对新手还比较有难度,至少应该具有丰富的面向对象基础。

LoggingImageViewer.java

package logging;

import java.awt.EventQueue;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JFrame;

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(() -> {
			Handler windowHandler = new WindowHandler();
			windowHandler.setLevel(Level.ALL);
			Logger.getLogger("com.horstmann.corejava").addHandler(windowHandler);
			
			JFrame frame = new ImageViewerFrame();
			frame.setTitle("LoggingImageViewer");
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			Logger.getLogger("com.horstmann.corejava").fine("Showing frame");
			frame.setVisible(true);
		});
	}
}

ImageViewerFrame.java

package logging;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;

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;

public class ImageViewerFrame extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static final int DEFAULT_WIDTH = 300;
	private static final int DEFAULT_HEIGHT = 400;
	private JLabel label;
	private static Logger logger = Logger.getLogger("com.horstmann.corejava");
	public ImageViewerFrame() {
		logger.entering("ImageViewerFrame", "<init>");
		setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
		JMenuBar menuBar = new JMenuBar();
		JMenu menu = new JMenu("File");
		menuBar.add(menu);
		JMenuItem openItem = new JMenuItem("Open");
		menu.add(openItem);
		openItem.addActionListener(new FileOpenListener());
	}
	
	private class FileOpenListener implements ActionListener {

		public FileOpenListener() {
			// TODO Auto-generated constructor stub
		}

		@Override
		public void actionPerformed(ActionEvent event) {
			// TODO Auto-generated method stub
			logger.entering("ImageViewerFrame.FileOpenListener",
					"actionPerformed", event);
			JFileChooser chooser = new JFileChooser();
			chooser.setCurrentDirectory(new File("."));
			chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {

				@Override
				public boolean accept(File f) {
					// TODO Auto-generated method stub
					return f.getName().toLowerCase().endsWith(".gif") ||
							f.isDirectory();
				}

				@Override
				public String getDescription() {
					// TODO Auto-generated method stub
					return "GIF Images";
				}
			});
			int r = chooser.showOpenDialog(ImageViewerFrame.this);
			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");
		}
	}
}

WindowHandler.java

package logging;

import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.StreamHandler;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class WindowHandler extends StreamHandler {
	private JFrame frame;

	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(){

			@Override
			public void write(int arg0) throws IOException {
				// TODO Auto-generated method stub
				
			}
			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();
	}
	public void setLevel(Level all) {
		// TODO Auto-generated method stub
		
	}
}

输出:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值