java 日志的使用实际练习代码

来源:互联网 发布:jpg用什么软件 编辑:程序博客网 时间:2024/05/16 11:25
//API部分java.util.logging.Logger
//程序部分package logging;//java.awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类。在AWT术语中,诸如按钮或滚动条之类的用户界面对象称为组件。Component类是所有 AWT 组件的根。有关所有 AWT 组件的公共属性详细描述,请参见 Component。import java.util.logging.*;import javax.swing.*;import javax.swing.JLabel;import java.awt.*;import java.awt.event.*;import java.awt.event.ActionListener;import java.io.*;import java.io.IOException;import java.util.logging.FileHandler;import java.util.logging.Handler;import java.util.logging.Level;import java.util.logging.LogRecord;import javax.swing.JMenuItem;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("cuimingxuan ").setLevel(Level.ALL);                final int LOG_ROTATION_COUNT=10;                Handler handler=new FileHandler("%h/LoggingImageViewer.log",0,LOG_ROTATION_COUNT);                Logger.getLogger("cuimingxuan ").addHandler(handler);            }            catch(IOException e)            {                Logger.getLogger("cuimingxuan ").log(Level.SEVERE,"Can't creatr log handler",e);            }        }        EventQueue.invokeLater(()->        {            Handler windowHandler=new WindowHandler();            windowHandler.setLevel(Level.ALL);            Logger.getLogger("cuimingxuan ").addHandler(windowHandler);            JFrame frame=new ImageViewerFrame();            frame.setTitle("LoggingImageViewer");            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            Logger.getLogger("cuimingxuan ").fine("Showing frame");            frame.setVisible(true);        });    }}/** * the frame that shows the image */class ImageViewerFrame extends JFrame{    private static final int DEFAULT_WIDTH=300;    private static final int DEFAULT_HEIGHT=400;    private JLable label=new JLable();     private static Logger logger=Logger.getLogger("cuimingxuan ");    public ImageViewerFrame()    {        logger.entering("ImageViewerFrame", "<init>");        setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);        //set up menu bar        JMenuBar menuBar=new JMenuBar();        setJMenuBar(menuBar);        //public void setJMenuBar(JMenuBar 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();   //////////////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);            /**             * entering                public void entering(String sourceClass,                     String sourceMethod,                     Object[] params)                    使用参数数组记录方法条目。                    这是一种方便的方法,可用于将条目记录到方法中。 具有消息“ENTRY”(后跟参数数组中每个条目的格式{N}指                    * 符)的LogRecord,记录级别FINER,并记录给定的sourceMethod,sourceClass和参数。             */            /**             * JFileChooser                public JFileChooser()                构造一个JFileChooser指向用户的默认目录。 这个默认值取决于操作系统。 它通常是Windows上的“我的文档”文件                * 夹,Unix上的用户主目录。             */            //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()             {                @Override                public boolean accept(File f)                 {                    return f.getName().toLowerCase().endsWith(".gif")||f.isDirectory();                            /**                             * getName                                public String getName()                                返回由此抽象路径名表示的文件或目录的名称。 这只是路径名称序列中的最后一个名字。 如果路                                * 径名的名称序列为空,则返回空字符串。                                结果                                由此抽象路径名表示的文件或目录的名称,如果此路径名的名称序列为空,则为空字符串                             */                  //To change body of generated methods, choose Tools | Templates.                }                @Override                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");        }    }}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()        {            public void write(int b)            {            }            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();    }}