java 日志的使用实际练习代码
2017-08-29 15:45
344 查看
//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(); } }
相关文章推荐
- java代码练习软件editplus安装使用…
- 使用Java代码书写日志的工具类
- 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
- java使用动态代理来实现AOP(日志记录)的实例代码
- java使用动态代理来实现AOP(日志记录)的实例代码
- java多线程stop,suspend使用代码实际例子
- 开发日志:使用MyEclipse开发JavaWeb,无论怎么改Java代码都不生效,Tomcat报ClassNotFoundException错误
- 使用JAVA Get POST 抓网页的练习代码
- 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
- 我的JAVA练习代码
- 在java应用中使用log4j日志工具
- 在struts中html:select 标签的disabled属性中使用java代码
- 使用Simian检查Java项目中冗余代码
- 使用Jbuilder重构功能阅读混淆过的Java代码。
- 如何使用java代码来访问managed-bean 的属性?
- 在Struts中使用JavaBean和List(多行数据)类型属性-JSP教程,Java技巧及代码
- java中log日志的使用(完全版)
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- Java中使用MySQL从安装、配置到实际程序测试详解
- java日志api的使用